как боротся с ошибкой 138 неверные цены - страница 3

 
И всетаки как правильно то будет ? у меня и так в башке кипеш, щас вообще каша густая 3 час ночи пипец ))
 
Pyxlik2009:
И всетаки как правильно то будет ? у меня и так в башке кипеш, щас вообще каша густая 3 час ночи пипец ))
правильно будет пойти спать
 
sanyooooook:
правильно будет пойти спать

ок и так ща спать буду до завтра мож завтра встану меня озорит но если кто то подправить то спс ))
 
//+------------------------------------------------------------------+
double iif( bool condition, double ifTrue, double ifFalse )
{
if( condition ) return( ifTrue );

return( ifFalse );
}

//+------------------------------------------------------------------+
int orderDirection(int type, int revers)
{
int res = 0;

if(type == OP_BUY || type == OP_SELLLIMIT || type == OP_BUYSTOP)
res = 1;
if(type == OP_SELL || type == OP_BUYLIMIT || type == OP_SELLSTOP)
res = -1;

//если реверс = 1, то это для выставления ордера, если = -1 то для
//расчета стопов и тейков

if(type == OP_BUYLIMIT || type == OP_SELLLIMIT)
res = res * revers;
//return( 1 - 2 * ( OrderType() % 2 ) );
return(res);
}


//+-------------------------------------------------------------------+
//выставляет ордер
//на входе: переменные для открытия ордера
//на выходе - тикет открытого ордера или -1 если ордер
//не может быть открыт
//+-------------------------------------------------------------------+
int OpenOrder(string _symbol,int _cmd, double _volume, double _price, int _sleepage, double _stoploss, double _takeprofit, string _comment, int _magic, int _exp, string fn = "")
{
/*
symbol - Наименование финансового инструмента, с которым проводится торговая операция.
cmd - Торговая операция. Может быть любым из значений торговых операций.
volume - Количество лотов.
price - Цена открытия.
slippage - Максимально допустимое отклонение цены для рыночных ордеров (ордеров на покупку или продажу).
stoploss - Цена закрытия позиции при достижении уровня убыточности (0 в случае отсутствия уровня убыточности).
takeprofit - Цена закрытия позиции при достижении уровня прибыльности (0 в случае отсутствия уровня прибыльности).
comment - Текст комментария ордера. Последняя часть комментария может быть изменена торговым сервером.
magic - Магическое число ордера. Может использоваться как определяемый пользователем идентификатор.
expiration - Срок истечения отложенного ордера.
arrow_color - Цвет открывающей стрелки на графике. Если параметр отсутствует или его значение равно CLR_NONE, то открывающая стрелка не отображается на графике.

если price == 0 тогда открываем по текущей цене
*/
int res = -1;
int countOfTry = 5;
int nTry = 0;

int sltpLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);



while(res < 0 && nTry <= countOfTry && !IsStopped() && IsTradeAllowed())
{
if(!IsExpertEnabled()) break;

while(IsTradeContextBusy())
{
Sleep(3000);
}

RefreshRates();
if (_price == 0){
_price = iif(orderDirection(_cmd,1)>0,MarketInfo(Symbol(),MODE_ASK),MarketInfo(Symbol(),MODE_BID));
}

if(_price > 0 ){
if(_cmd == OP_BUYSTOP || _cmd == OP_SELLLIMIT){
if(_price < (MarketInfo(Symbol(),MODE_ASK) + sltpLevel * Point)){
Print("================== cant open ", "ot = ",_cmd, " op = ",_price);
return(-1);
}
}
//***
if(_cmd == OP_SELLSTOP || _cmd == OP_BUYLIMIT){
if(_price > (MarketInfo(Symbol(),MODE_BID) - sltpLevel * Point)){
Print("================== cant open ", "ot = ",_cmd, " op = ",_price);
return(-1);
}
}
}

//нормализуем все переменные зависящие от цены
_price = NormalizeDouble(_price, Digits);
_stoploss = NormalizeDouble(_stoploss, Digits);
_takeprofit = NormalizeDouble(_takeprofit, Digits);

res = OrderSend(_symbol,_cmd,_volume,_price,_sleepage,_stoploss,_takeprofit,_comment,_magic,_exp,CLR_NONE);

Print(StringConcatenate("OpenOrder = ",res));

if(res > -1)
return(res);
//---
int err = GetLastError();
if(err > 0)
{
if(err == 4109){
Print("TRADE IS DISABLED!!!!");
return(-1);
}

if(err == 4051)
break;
//logInfo(_price);
if(err == 148){
Print("BROCKER MAX ORDERS!!!!!");
return(-1);
}

if(err == 130){
Print(StringConcatenate("sl = ",_stoploss," tp = ",_takeprofit));
return(-1);
}
Print("OpenOrder",StringConcatenate("OrderSendError, fn = ",fn),err);
Print(StringConcatenate("Price = ",_price," cmd = ",_cmd, " bid = ", Bid, " ask = ", Ask));
}

nTry++;
}

return(res);

}

//--------------------------------------
void OPENORDER(string ord)
{
int error;
if (ord=="Buy" ) error=OpenOrder(Symbol(),OP_BUY, LOT,NormalizeDouble(Ask,Digits),30,SL,TP,"", 1,3);
if (ord=="Sell") error=OpenOrder(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),30,SL,TP,"",-1,3);
if (error==-1) //неудачная покупка OK
{
ShowERROR(error,0,0);
}
return;
}

 
Pyxlik2009:

как боротся с ошибкой 138 неверные цены

Кардинальные меры:

1. Перейти на нормальный ДЦ, лучше ECN/Currenex,

2. Если торгует бот, то поставить на VPS, который в свою очередь подсунуть поближе к торговому серверу ДЦ.