MQL5로 시작한다고 생각하십시오.StopMoss가 0이 아닌 경우 ExpertMACD raise [invalid stops]
학습을 위해서, 나는 Alpari-MT5-Demo 계정의 BTCUSD H1 쌍에있는 ExpertMACD (MT5에 기본 설치된)에서 MT5의 EA 최적화를 실행했습니다.
데이터가 변경 되어도 Advisor가 더 이상 진화하지 않는다면 2017 년 7 월까지 모든 데이터가 확인되어 계속 0 점의 거래를 반복합니다 (스크린 샷). 백 테스팅의 경우에도 마찬가지입니다. 2017 년 7 월의 데이터는 거래를하지 않습니다.
테스트 로그에 오류 [invalid stops]
가 표시됩니다. 최적화 할 입력에서 손실 중지 수준을 선택 취소하고 기본값을 0으로 설정하면 중지 손실이 더 이상 사용되지 않지만 모든 것이 다시 작동합니다.
무슨 일이 일어나는지 설명해 주시겠습니까? 왜 전체 역사에 종사하는 고문은 2017 년 7 월부터 일하지 않습니까? (나는 진드기 데이터를 확인했는데, 모두 괜찮아 보인다.) Stop Loss를 제거하면 왜 다시 트레이드 되나요?
P.S.
(갑자기) BTCUSD에 대한 확산이 2에서 13000으로 바뀌었을 때 (예, 쉼표없이), 이것은 물론 조언자를 망치고 있으며 일반적으로 ' 말이 되네. 어떻게 가능합니까? 이 경우 어떻게해야합니까? 나는 다른 중개인을 검사하고 2017 년 7 월 어딘가에 나타나는 스프레드가 모두 똑같이 증가했음을 보여줍니다.
나는 Alpari 웹 사이트를 파고 들어 본 결과 the average spread value for BTCUSD이 실제로 그렇게 높은 것으로 나타났습니다. 다시 이것은 어떻게 가능합니까? 왜 그럴까요? (Maybe related to the fork? 제게는 말이 안됩니다.)
마지막으로, 합리적인 stop-loss를 포함하여 주문을 적절하게하기 위해 ExpertMACD를 어떻게 수정 하시겠습니까?
ExpertMACD의 코드는 다음
//+------------------------------------------------------------------+
//| ExpertMACD.mq5 |
//| Copyright 2009-2017, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Include |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
#include <Expert\Signal\SignalMACD.mqh>
#include <Expert\Trailing\TrailingNone.mqh>
#include <Expert\Money\MoneyNone.mqh>
//+------------------------------------------------------------------+
//| Inputs |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Inp_Expert_Title ="ExpertMACD";
int Expert_MagicNumber =10981;
bool Expert_EveryTick =false;
//--- inputs for signal
input int Inp_Signal_MACD_PeriodFast =12;
input int Inp_Signal_MACD_PeriodSlow =24;
input int Inp_Signal_MACD_PeriodSignal=9;
input int Inp_Signal_MACD_TakeProfit =50;
input int Inp_Signal_MACD_StopLoss =20;
//+------------------------------------------------------------------+
//| Global expert object |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert |
//+------------------------------------------------------------------+
int OnInit(void)
{
//--- Initializing expert
if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
{
//--- failed
printf(__FUNCTION__+": error initializing expert");
ExtExpert.Deinit();
return(-1);
}
//--- Creation of signal object
CSignalMACD *signal=new CSignalMACD;
if(signal==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating signal");
ExtExpert.Deinit();
return(-2);
}
//--- Add signal to expert (will be deleted automatically))
if(!ExtExpert.InitSignal(signal))
{
//--- failed
printf(__FUNCTION__+": error initializing signal");
ExtExpert.Deinit();
return(-3);
}
//--- Set signal parameters
signal.PeriodFast(Inp_Signal_MACD_PeriodFast);
signal.PeriodSlow(Inp_Signal_MACD_PeriodSlow);
signal.PeriodSignal(Inp_Signal_MACD_PeriodSignal);
signal.TakeLevel(Inp_Signal_MACD_TakeProfit);
signal.StopLevel(Inp_Signal_MACD_StopLoss);
//--- Check signal parameters
if(!signal.ValidationSettings())
{
//--- failed
printf(__FUNCTION__+": error signal parameters");
ExtExpert.Deinit();
return(-4);
}
//--- Creation of trailing object
CTrailingNone *trailing=new CTrailingNone;
if(trailing==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating trailing");
ExtExpert.Deinit();
return(-5);
}
//--- Add trailing to expert (will be deleted automatically))
if(!ExtExpert.InitTrailing(trailing))
{
//--- failed
printf(__FUNCTION__+": error initializing trailing");
ExtExpert.Deinit();
return(-6);
}
//--- Set trailing parameters
//--- Check trailing parameters
if(!trailing.ValidationSettings())
{
//--- failed
printf(__FUNCTION__+": error trailing parameters");
ExtExpert.Deinit();
return(-7);
}
//--- Creation of money object
CMoneyNone *money=new CMoneyNone;
if(money==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating money");
ExtExpert.Deinit();
return(-8);
}
//--- Add money to expert (will be deleted automatically))
if(!ExtExpert.InitMoney(money))
{
//--- failed
printf(__FUNCTION__+": error initializing money");
ExtExpert.Deinit();
return(-9);
}
//--- Set money parameters
//--- Check money parameters
if(!money.ValidationSettings())
{
//--- failed
printf(__FUNCTION__+": error money parameters");
ExtExpert.Deinit();
return(-10);
}
//--- Tuning of all necessary indicators
if(!ExtExpert.InitIndicators())
{
//--- failed
printf(__FUNCTION__+": error initializing indicators");
ExtExpert.Deinit();
return(-11);
}
//--- succeed
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Deinitialization function of the expert |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ExtExpert.Deinit();
}
//+------------------------------------------------------------------+
//| Function-event handler "tick" |
//+------------------------------------------------------------------+
void OnTick(void)
{
ExtExpert.OnTick();
}
//+------------------------------------------------------------------+
//| Function-event handler "trade" |
//+------------------------------------------------------------------+
void OnTrade(void)
{
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+
//| Function-event handler "timer" |
//+------------------------------------------------------------------+
void OnTimer(void)
{
ExtExpert.OnTimer();
}
//+------------------------------------------------------------------+
업데이트 잠시 후, Alpari의 고객 서비스 대답
: 확산이 올바르게 표시됩니다
우리 웹 사이트의 사양. 스프레드는 점 뒤에 3 자리 숫자로 지정됩니다. 입찰가와 물가 사이의 차이는 약 19 달러입니다.
따라서 19094의 확산은 실제로 19.094입니다.
답장을 보내 주셔서 감사합니다. 나는 거래를 확인하고 갑자기 BTCUSD의 확산이 2에서 13000 (예, 쉼표없이)으로 바뀌 었습니다. 물론 이것은 고문을 망칠 뿐이지 일반적으로 이해가 가지 않습니다. 어떻게 가능합니까? 이 경우 어떻게해야합니까? 나는 다른 중개인을 검사했고 그들은 모두 2017 년 7 월에 somhere로 나타나는 확산의 동일한 증가를 보여줍니다. mk4 spread의 –
이 설정에서 제공됩니다. 현재 스프레드를 사용하지 않는다면 확실히 알 수 있습니다. mql5 스프레드는 막대 (시간, OHLC, 볼륨, 스프레드)로 표시되므로 스프레드가 너무 클 수 있습니다. 아마 SeqWit 때문에 나는 전문가가 아니에요. 나는 최대 확산 필터를 ea의 코드에 도입 할 것을 제안합니다 :'if spread> 입력 매개 변수 - 건너 뛰기 거래' –
그들이 포크와 관련이있는 것처럼 보입니다. 그만큼 확산을 달성함으로써 달성하십시오. 또한 그들은 8 월까지는 될 것이라고 말했으나 아직 시행 중이다. 여기 Alpari로부터의 통신 https://alpari.com/en/company/news/4729_27072017/ –