Так берите себе свои 100 баксов, это Вы тут такой единственно уникальный, который " Сам так делал, все возможно" и тему можно закрывать.
Прикольно. А че такая агрессия то?
Я что, плохое что-то предложил, или только в свою харю..?
100 баксов взбесили или что!? Ну больше не могу, сорри если мало.
Да ничего такого, кроме сомнения, через "е" ли пишется слово "че". Вы тут самый заслуживающий. у вас же "Сам так делал, все возможно", у нас другая реальность.
У Вас ко мне личная неприязнь что ли?
У Вас ко мне личная неприязнь что ли?
Вам так сильно хочется?
Нет простого метода перевода советника с МТ4 в МТ5.
1. Советник может работать с несколькими рыночными ордерами, притом разнонаправленными.
2. Советник может держать разнонаправленные отложенные ордера, если в МТ4 допустимо срабатывание из обеих, в МТ5 это будет недопустимо, т.е. требуется переработка алгоритма советника.
Переписывание советника с МТ4 в МТ5 это не просто строчку заменить или функцию, может потребоваться даже адаптация самой стратегии, а не только кода.
--
Есть конечно вариант "виртуальной прокладки" - в массивах хранить аналоги рыночных ордеров, а в рынок выводить совокупную позицию. Но нафига такая жизнь...
Нет простого метода перевода советника с МТ4 в МТ5.
Я надеюсь что все таки есть.
Некоторые экспериментальные куски кода которыми я заменял привычные для 4ки функции примерно год назад. Не пару строк конечно, но как мог. С тех пор в 5рку даже и не заглядывал. Думаю, что многое с тех пор поменялось и стало намного проще.
datetime iTime(string symb, ENUM_TIMEFRAMES period, int h_shift) { datetime Time[]; if (CopyTime(symb,period,0,h_shift+1,Time)==h_shift+1) return(Time[0]); else return(-1); } double iClose (string symb, ENUM_TIMEFRAMES period, int h_shift) { double CLOSE[]; if (CopyClose(symb,period,0,h_shift+1,CLOSE)==h_shift+1) return(CLOSE[0]); else return(-1); } double iOpen (string symb, ENUM_TIMEFRAMES period, int h_shift) { double OPEN[]; if (CopyOpen(symb,period,0,h_shift+1,OPEN)==h_shift+1) return(OPEN[0]); else return(-1); } double iHigh (string symb, ENUM_TIMEFRAMES period, int h_shift) { double HIGH[]; if (CopyHigh(symb,period,0,h_shift+1,HIGH)==h_shift+1) return(HIGH[0]); else return(-1); } double iLow (string symb, ENUM_TIMEFRAMES period, int h_shift) { double LOW[]; if (CopyLow(symb,period,0,h_shift+1,LOW)==h_shift+1) return(LOW[0]); else return(-1); } int iBarShift(string symb,ENUM_TIMEFRAMES period, datetime h_time) { return(Bars(symb,period,TimeCurrent(),h_time)-1); } int iHighest (string symb, ENUM_TIMEFRAMES period, ENUM_SERIES_ID series_id, int count, int start=0) { double buf[]; int h_result; ArrayFree(buf); ArrayResize(buf,count); switch (series_id) { case MODE_OPEN: if (CopyOpen(symb,period,start, count, buf)<=0) return(-1); break; case MODE_LOW: if (CopyLow(symb,period,start, count, buf)<=0) return(-1); break; case MODE_HIGH: if (CopyHigh(symb,period,start, count, buf)<=0) return(-1); break; case MODE_CLOSE: if (CopyClose(symb,period,start, count, buf)<=0) return(-1); break; default: return(-1); } h_result=count-ArrayMaximum(buf); return(h_result); } int iLowest (string symb, ENUM_TIMEFRAMES period, ENUM_SERIES_ID series_id, int count, int start=0) { double buf[]; int h_result; ArrayFree(buf); ArrayResize(buf,count); switch (series_id) { case MODE_OPEN: if (CopyOpen(symb,period,start, count, buf)<=0) return(-1); break; case MODE_LOW: if (CopyLow(symb,period,start, count, buf)<=0) return(-1); break; case MODE_HIGH: if (CopyHigh(symb,period,start, count, buf)<=0) return(-1); break; case MODE_CLOSE: if (CopyClose(symb,period,start, count, buf)<=0) return(-1); break; default: return(-1); } h_result=count-ArrayMinimum(buf); return(h_result); } int OrderSend(string symbol,ENUM_ORDER_TYPE direct,double lots,double h_price,int slippage=0,double h_SL=0,double h_TP=0,string comment="",int Magic=NULL,datetime expiration=0,color clr=clrNONE) { MqlTradeRequest request={}; // структура запроса MqlTradeResult h_result={}; request.symbol=symbol; request.type=direct; request.volume=lots; if (direct==ORDER_TYPE_BUY || direct==ORDER_TYPE_SELL) request.price=h_price; else { request.price=h_price; request.stoplimit=SymbolInfoDouble(symbol,SYMBOL_BID); } request.deviation=slippage; request.sl=h_SL; request.tp=h_TP; request.comment=comment; request.magic=Magic; request.expiration=expiration; request.type_time=(expiration==0 ? ORDER_TIME_GTC : ORDER_TIME_SPECIFIED); request.type_filling=ORDER_FILLING_IOC; request.action=((direct==ORDER_TYPE_BUY || direct==ORDER_TYPE_SELL) ? TRADE_ACTION_DEAL : TRADE_ACTION_PENDING); if (!OrderSend(request,h_result)) return(-1); Sleep(150); if (direct==ORDER_TYPE_BUY || direct==ORDER_TYPE_SELL) return((int)h_result.deal); else { if (expiration>0 && OrderSelect(h_result.order)) if (OrderGetInteger(ORDER_TIME_EXPIRATION)!=expiration) { } return((int)h_result.order); } } double AccountFreeMarginCheck(string symbol,ENUM_ORDER_TYPE direct,double lots,uint& retcode, string& comment) { MqlTradeRequest h_request={}; // структура запроса MqlTradeCheckResult h_result={}; h_request.symbol=symbol; h_request.type=direct; h_request.volume=lots; h_request.price=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits); h_request.sl=0; h_request.tp=0; h_request.deviation=0; h_request.type_filling=ORDER_FILLING_IOC; h_request.action=((direct==ORDER_TYPE_BUY || direct==ORDER_TYPE_SELL) ? TRADE_ACTION_DEAL : TRADE_ACTION_PENDING); if (!OrderCheck(h_request,h_result)) { retcode=h_result.retcode; comment=h_result.comment; return(-1); } retcode=h_result.retcode; return(h_result.margin_free); } int OrderModify(string symbol,double h_SL=0,double h_TP=0) { MqlTradeRequest h_request={}; // структура запроса MqlTradeResult h_result={}; if (!PositionSelect(symbol) || PositionGetDouble(POSITION_VOLUME)<=0) return(-1); h_request.symbol=symbol; h_request.sl=h_SL; h_request.tp=h_TP; h_request.action=TRADE_ACTION_SLTP; bool h_res=OrderSend(h_request,h_result); Sleep(150); if (!h_res) { Print ("Order not modify. "+h_result.comment); return(-1); } else return((int)h_result.deal); } int OrderModifyPending(ulong l_ticket,double h_price=0, double h_SL=0,double h_TP=0,datetime Expiration=0) { MqlTradeRequest h_request={}; // структура запроса MqlTradeResult h_result={}; if (!OrderSelect(l_ticket)) return(-1); h_request.symbol=OrderGetString(ORDER_SYMBOL); h_request.price=(h_price<=0 ? OrderGetDouble(ORDER_PRICE_OPEN):h_price); h_request.order=l_ticket; h_request.sl=h_SL; h_request.tp=h_TP; h_request.type_time=(ENUM_ORDER_TYPE_TIME)OrderGetInteger(ORDER_TYPE_TIME); h_request.expiration=Expiration; h_request.action=TRADE_ACTION_MODIFY; bool h_res=OrderSend(h_request,h_result); Sleep(150); if (!h_res) { Print ("Order not modify. "+h_result.comment); return(-1); } else return((int)h_result.order); } bool OrderDelete(ulong h_ticket,color clr) { MqlTradeRequest h_request={}; // структура запроса MqlTradeResult h_result={}; // request.symbol=_Symbol; h_request.order=h_ticket; // request.volume=lots; // request.price=price; // request.deviation=slippage; // request.sl=SL; // request.tp=TP; // request.comment=comment; // request.magic=Magic; // request.expiration=expiration; h_request.action=TRADE_ACTION_REMOVE; if (!OrderSend(h_request,h_result)) return(false); else return(true); }
Я надеюсь что все таки есть.
...
На примере всем известного илана.
В МТ4 доливка выполняется на уровне отсчитываемом от последнего ордера. В МТ5 для выполнения аналогии надо в истории искать последнюю транзакцию, но для этого сначала надо точно знать, что некий участок кода в МТ4 ищет именно цену последнего ордера (требуется тщательный анализ произвольно написанного кода). Тейкпрофит в МТ4 ставится от совокупной цены которая вычисляется при помощи тоже произвольно написанного кода (тоже требуется тщательный анализ).
- 2010.05.11
- Sergey Pavlov
- www.mql5.com
На примере всем известного илана.
В МТ4 доливка выполняется на уровне отсчитываемом от последнего ордера. В МТ5 для выполнения аналогии надо в истории искать последнюю транзакцию, но для этого сначала надо точно знать, что некий участок кода в МТ4 ищет именно цену последнего ордера (требуется тщательный анализ произвольно написанного кода). Тейкпрофит в МТ4 ставится от совокупной цены которая вычисляется при помощи тоже произвольно написанного кода (тоже требуется тщательный анализ).
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Кто может поделится советами и примочками для быстрого перехода с 4ки на 5ку, Велкам! Если нужно пару баксов, то я со своего кармана даю 100тку баков ($100) тому, кто реально этого заслужит в обсуждении этой темы. Достойного выберем всем сообществом, путем голосования (оплата через фриланс). Тема думаю понятна и будет полезна всем. Интересен быстрый и понятный переход с 4ки на 5рку. Не переписывать код 4ки с самого начала, а адаптировать его на 5ку путем замены переменных и добавлением нескольких строк к коду. Сам так делал, все возможно (простенький правда). Чем проще будет все сделать, тем лучше. Реальные примеры обязательны. Про вознаграждение не гоню, качайте скрин для гарантии или процитируйте первый пост!
Если подойдет, то в качестве примера на совместимость набросал из запчастей безиндикаторный советник, работает на безоткатном скачке цены, с выводком инфы по счету, общим тралом позиций, автолотом и безубытком. Опубликую в КодоБазе версию до и после конверта. Этот код на данный момент без справки и недели времени не осилю, хотелось бы научится быстро перестраиваться на 5ку. (за качество кода не пинать, набросал на скорую руку)