Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пиши программы на заказ. Зарабатывай с помощью сервиса Фриланс!
prt
364
prt 2014.09.15 19:29 
Здравствуйте при модификации появляется упорно ошибка 130... может ктото подскажет? bool x; x=OrderModify(OrderTicket(),0,NormalizeDouble(Ask,Digits)-NormalizeDouble(Tr,Digits),OrderTakeProfit(),0,Red); При чем MarketInfo (Symbol();MODE_STOPLEVEL) равно 30-ти меньше зания Tr которок в свою очередь равно 40. перед етим вывожу double Buy_modyfy = NormalizeDouble(Ask,Digits)-NormalizeDouble(dist,Digits); Print("Buy modyfy ", Buy_modyfy); и все прекрано... нормальное число приведенное до нужного количества знаков... Может у когото есть идеи? Спасибо.
Artyom Trishkin
68908
Artyom Trishkin 2014.09.15 19:59  
prt:
Здравствуйте при модификации появляется упорно ошибка 130... может ктото подскажет?bool x; x=OrderModify(OrderTicket(),0,NormalizeDouble(Ask,Digits)-NormalizeDouble(Tr,Digits),OrderTakeProfit(),0,Red);При чем MarketInfo (Symbol();MODE_STOPLEVEL) равно 30-ти меньше зания Tr которок в свою очередь равно 40.перед етим вывожу double Buy_modyfy = NormalizeDouble(Ask,Digits)-NormalizeDouble(dist,Digits);Print("Buy modyfy ", Buy_modyfy);и все прекрано... нормальное число приведенное до нужного количества знаков...Может у когото есть идеи? Спасибо.

Как-то так, но с тем учётом, что нужный ордер уже выбран при помощи OrderSelect();

//+------------------------------------------------------------------+
    int op=OrderType(), Tr=40;
    string symbol=OrderSymbol();
    double sl=0, ask=SymbolInfoDouble(symbol,SYMBOL_ASK), 
                 bid=SymbolInfoDouble(symbol,SYMBOL_BID),
                 pt=SymbolInfoDouble(symbol,SYMBOL_POINT);
    int dg=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
    int sp=(int)SymbolInfoInteger(symbol,SYMBOL_SPREAD);
    int lv=(int)SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL);
    int stopLevel=(lv==0)?sp*2:lv;
    if(op==OP_BUY || op==OP_SELL) {
       sl=(op==OP_BUY)?fmin(NormalizeDouble(bid-Tr*pt,dg),NormalizeDouble(bid-(stopLevel+1)*pt,dg)):
                       fmax(NormalizeDouble(ask+Tr*pt,dg),NormalizeDouble(ask+(stopLevel+1)*pt,dg));
       bool x=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,clrRed);
       }
//+------------------------------------------------------------------+

Не проверял, на коленке набросал. Думаю, разберётесь. Хотя, тут в любом случае стандартную OrderModify() нужно обернуть в полноценную функцию с проверкой и обработкой всех кодов возврата сервера, иначе - только для тестера.

Vitalie Postolache
11060
Vitalie Postolache 2014.09.15 20:00  
вторым параметром - цена открытия, а она нулевой не бывает.
Artyom Trishkin
68908
Artyom Trishkin 2014.09.15 20:03  
evillive:
вторым параметром - цена открытия, а она нулевой не бывает.
Там ещё и уровень стопа не верно рассчитывается.
Artyom Trishkin
68908
Artyom Trishkin 2014.09.15 20:09  
artmedia70:

Как-то так, но с тем учётом, что нужный ордер уже выбран при помощи OrderSelect();

Не проверял, на коленке набросал. Думаю, разберётесь. Хотя, тут в любом случае стандартную OrderModify() нужно обернуть в полноценную функцию с проверкой и обработкой всех кодов возврата сервера, иначе - только для тестера.

Да и тут не правильно. Скорее так:

//+------------------------------------------------------------------+
    int op=OrderType(), Tr=40;
    bool x=false;
    string symbol=OrderSymbol();
    double sl=0, ask=SymbolInfoDouble(symbol,SYMBOL_ASK), 
                 bid=SymbolInfoDouble(symbol,SYMBOL_BID),
                 pt=SymbolInfoDouble(symbol,SYMBOL_POINT);
    int dg=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
    int sp=(int)SymbolInfoInteger(symbol,SYMBOL_SPREAD);
    int lv=(int)SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL);
    int stopLevel=(lv==0)?sp*2:lv;
    if(op==OP_BUY) {
       sl=fmin(NormalizeDouble(bid-Tr*pt,dg),NormalizeDouble(bid-(stopLevel+1)*pt,dg));
       if(OrderStopLoss()<sl) x=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,clrBlue);
       }
    if(op==OP_SELL) {
      sl=fmax(NormalizeDouble(ask+Tr*pt,dg),NormalizeDouble(ask+(stopLevel+1)*pt,dg));
      if(OrderStopLoss()==0 || OrderStopLoss()>sl) x=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,clrRed);
      }
//+------------------------------------------------------------------+
prt
364
prt 2014.09.15 20:22  
Спасибо огромное корифеям!!! Постараюсь разобратся... Не подскажите есть ли где-то заготовка с примерным набором ошибок для бработки при применнеи модификации ордеров. Заранее благодарен!
Artyom Trishkin
68908
Artyom Trishkin 2014.09.15 20:23  
prt:
Спасибо огромное корифеям!!! Постараюсь разобратся... Не подскажите есть ли где-то заготовка с примерным набором ошибок для бработки при применнеи модификации ордеров. Заранее благодарен!

Здесь

Или какую вам заготовку нужно?

Коды, которые нужно обрабатывать

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий