ошибка 130

 

Только начинающий в mql4, постоянно выдает ошибку 130,  менял стоплоссы и тэйк профиты и все равно не работает.

input double lot = 0.01;
input double K = 17;
input double D = 9;

input int StopLoss = 600; 
input int TakeProfit = 1000;
         
int start(){  
                         
   double S1=iStochastic(NULL,0,K,D,3,MODE_SMA,0,MODE_MAIN,0);// Символ, таймфрейм, 
   // період К, D, вповільнення, метод усереднення, вибір ціни 0 - Low/High або 1 - Close/Close
   // лінія, зсув назад відносно поточного бара
   double S2=iStochastic(NULL,0,K,D,3,MODE_SMA,0,MODE_SIGNAL,0); 
   
   if(OrdersTotal()==0){        
      if (S1 > S2 && S1 <= 25 ){
double SL = NormalizeDouble(Bid + StopLoss*Point,Digits);

double TP = NormalizeDouble(Bid -  TakeProfit * Point,Digits);

          int ticket= OrderSend(Symbol(), OP_BUY, lot, Ask, 3, SL,TP,NULL,800,0,clrGreen);
          // NULL - коментарій, 0-магічне число ордера, 0-відкладений ордер
          if(ticket<0){
            Alert("OrderSend завершився з помилкою: ", ErrorDescription(GetLastError()));
          }else{
            
            Alert("Функція OrderSend успішно виконана. ticket = ", ticket);
          }          
      }
   }
   return 0;                        
}
 

для OP_BUY нужно использовать Ask

вычитать сл 

double SL = NormalizeDouble(Ask - StopLoss*Point,Digits);

 прибавлять тп  

double TP = NormalizeDouble(Ask +  TakeProfit * Point,Digits);
почитайте еще тему 133
 

Скорее всего, дело в том, что сервер работает в режиме Market Execution. В этом режиме нельзя устанавливать стоп и профит вместе с открытием рыночного ордера. Чтобы установить стоп и профит, нужно сначала открыть ордер, а потом модифицировать его.

Tecuciztecatl:

для OP_BUY нужно использовать Ask

вычитать сл 

 прибавлять тп  

почитайте еще тему 133

Это только для расчета цен SL и TP. Для проверки корректности этих уровней все равно нужно использовать Bid - базовую цену для ордеров Buy, т. к. закрытие происходит именно по этой цене. Аналогично с ордерами Sell - открытие по Bid, а проверка корректности стопов - по Ask.

 
Scriptong:

Скорее всего, дело в том, что сервер работает в режиме Market Execution.

Наверное, не все обратили внимание, а Tecuciztecatl не стал акцентировать. Он же поправил главную ошибку, перепутанные знаки у дистанций до ордеров. В исходном тексте при вычислении уровня TP для OP_BUY дистанция 1000 пунктов ВЫЧИТАЕТСЯ из курса.

А запрещать выставлять SL и TP сразу при открытии рыночного ордера, как мне помнится, ДЦ может и в режиме Instant Execution. Есть там и еще вопросы, но сначала надо поправить знаки.

 
Vlad143:

Наверное, не все обратили внимание, а Tecuciztecatl не стал акцентировать. Он же поправил главную ошибку, перепутанные знаки у дистанций до ордеров. В исходном тексте при вычислении уровня TP для OP_BUY дистанция 1000 пунктов ВЫЧИТАЕТСЯ из курса.

А запрещать выставлять SL и TP сразу при открытии рыночного ордера, как мне помнится, ДЦ может и в режиме Instant Execution. Есть там и еще вопросы, но сначала надо поправить знаки.

М-да, со знаками не заметил... Действительно, в них и проблема.
Причина обращения: