проклятие MQL4 - ошибка 130 на пятизнаке. Случайно ли оно?

 

Пожалуйста, подскажите почему на пятизнаке в нижеприведенном коде срабатывает ошибка 130, а на четырёхзнаке такой ошибки не возникает и всё работает.

Заранее благодарен за помощь.

//+------------------------------------------------------------------+

//| ccc.mq4 |

//| Copyright © 2011, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "VAGEYEV"

#include <stdlib.mqh>


//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int UseSlippage;

extern int Slippage = 3;


int init()

{

//----


UseSlippage = GetSlippage(Symbol(),Slippage);

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----


double LotSize = 0.1;

int SellTicket;

// Calculate open price, stop loss and take profit

double OpenPrice = NormalizeDouble(Bid,Digits);

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

double StopLoss = NormalizeDouble(Bid+30*Point,Digits);

Print(OpenPrice," ",TakeProfit," ",StopLoss, " ",Digits);

// Open Sell Order

if (SellTicket==0)

{

SellTicket = OrderSend(Symbol(),OP_SELL,3*LotSize,OpenPrice,UseSlippage,StopLoss,TakeProfit,"Sell Order",0,0,Green);

if (SellTicket==-1)

{

int ErrorCode = GetLastError();

string ErrDesc = ErrorDescription(ErrorCode);

Print(ErrorCode," ",ErrDesc);

string ErrAlert = StringConcatenate(ErrorCode,": ",ErrDesc);

Alert(ErrAlert);

}

}

//----

return(0);

}

// Get Slippage Function

int GetSlippage(string Currency, int SlippagePips)

{

int CalcDigits = MarketInfo(Currency,MODE_DIGITS);

if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;

else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;

return(CalcSlippage);

}

//+------------------------------------------------------------------+

 
//+------------------------------------------------------------------+

//| ccc.mq4 |

//| Copyright © 2011, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "VAGEYEV"

#include <stdlib.mqh>


//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int UseSlippage;

extern int Slippage = 3;


int init()

{

//----


UseSlippage = GetSlippage(Symbol(),Slippage);

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----


double LotSize = 0.1;

int SellTicket;

// Calculate open price, stop loss and take profit

double OpenPrice = NormalizeDouble(Bid,Digits);

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

double StopLoss = NormalizeDouble(Bid+30*Point,Digits);

Print(OpenPrice," ",TakeProfit," ",StopLoss, " ",Digits);

// Open Sell Order

if (SellTicket==0)

{

SellTicket = OrderSend(Symbol(),OP_SELL,3*LotSize,OpenPrice,UseSlippage,StopLoss,TakeProfit,"Sell Order",0,0,Green);

if (SellTicket==-1)

{

int ErrorCode = GetLastError();

string ErrDesc = ErrorDescription(ErrorCode);

Print(ErrorCode," ",ErrDesc);

string ErrAlert = StringConcatenate(ErrorCode,": ",ErrDesc);

Alert(ErrAlert);

}

}

//----

return(0);

}

// Get Slippage Function

int GetSlippage(string Currency, int SlippagePips)

{

int CalcDigits = MarketInfo(Currency,MODE_DIGITS);

if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;

else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;

return(CalcSlippage);

}

//+------------------------------------------------------------------+

Пользуйтесь кнопкой SRC для вставки кода.
 
Потому, что снова та же самая ошибка - отсутствие проверки на соответствие стоп-приказа минимально-допустимому расстоянию. Там, где на четырёхзнаке 30 пунктов норма, там на пятизнаке может оказаться весьма мало.
 
drknn:
Потому, что снова та же самая ошибка - отсутствие проверки на соответствие стоп-приказа минимально-допустимому расстоянию. Там, где на четырёхзнаке 30 пунктов норма, там на пятизнаке может оказаться весьма мало.

я пробовал устанавливать фикс стоп-лосс на большом расстоянии - всё равно выдаёт на пятизнаке ошибку 130.
 

А это привет разработчикам передавайте... раз в год я их долбил, теперь ваш черед...

Залипание Digits при переходе с 4 на 5 и обратно, может приводить, как это принято говорить, "к непредсказуемым результатам" ;)

Самое обидное что действительно (как в Кавказской пленнице) "сюшай, ничего не сделал, только зашел", а оно вонакак :)))

 
Когда ставишь стопы в зоне риска, необходимо считать уровень допустимого зазора от противоположного значения цены, в Вашем случае от Аска.
 
Всем спасибо! Буду искать пути снятия проклятия пятизнака! :)
 
f.t.:

А это привет разработчикам передавайте... раз в год я их долбил, теперь ваш черед...

Залипание Digits при переходе с 4 на 5 и обратно, может приводить, как это принято говорить, "к непредсказуемым результатам" ;)

Самое обидное что действительно (как в Кавказской пленнице) "сюшай, ничего не сделал, только зашел", а оно вонакак :)))

Если эта функция глючит - может свою написать?
 

А Вы не выставляйте при открытии ордера SL и TP, а после - путём модификации ордера. И будет Вам счастье.

 
f.t.:

А это привет разработчикам передавайте... раз в год я их долбил, теперь ваш черед...

Залипание Digits при переходе с 4 на 5 и обратно, может приводить, как это принято говорить, "к непредсказуемым результатам" ;)

Самое обидное что действительно (как в Кавказской пленнице) "сюшай, ничего не сделал, только зашел", а оно вонакак :)))

Слюшай, ничего не залипает, если правылна заходыть.

//+------- 
//+------------------------------------------------------------------+
//| check_min_dist() проверка дистанции стопов
//| требует:
//| - проверяемый параметр - StopLoss или TakeProfit или DistTral
//| - текстовая строка, сообщающая, какой параметр проверен
//+------------------------------------------------------------------+
int check_min_dist(int _Param, string _Txt)
{  string _Function = "check_min_dist(): ";
   int _Min_Dist = MathAbs(MarketInfo(Symbol(),MODE_STOPLEVEL));
   if(_Param != 0)   {
      if(_Param < _Min_Dist)   {  
         _Param = _Min_Dist;
         Alert(_Txt+" исправлен на "+_Min_Dist); 
      }
      else Alert(_Txt+" - OK"); 
   }
   return(_Param);
}  
//+------------------------------------------------------------------+
//+-------
 
Топикстартер, ответь сперва себе на вопрос чем отличается instant execution от market execution, а потом создавайте темы. Удачи.