Anton Nikiforov:
Проблема в том, что когда в коде меняешь лот, профит, изменений не происходит, как было изначально, так и осталось.
Прибыль в безубыток не переносится. В общем, нужна помощь. А так в тестере вроде не плохие результаты показывает, но сыроват.
Сам боюсь не разберусь. Пишите в ЛС если готовы помочь.
А почему не хотите выложить открытый код прямо здесь? Так больше вероятности, что подскажут или укажут на ошибки.
Проблема в том, что когда в коде меняешь лот, профит, изменений не происходит, как было изначально, так и осталось.
Прибыль в безубыток не переносится. В общем, нужна помощь. А так в тестере вроде не плохие результаты показывает, но сыроват.
Сам боюсь не разберусь. Пишите в ЛС если готовы помочь.
Karputov Vladimir:
А почему не хотите выложить открытый код прямо здесь? Так больше вероятности, что подскажут или укажут на ошибки.
все сделал. Спасибо за совет.
А почему не хотите выложить открытый код прямо здесь? Так больше вероятности, что подскажут или укажут на ошибки.
//+------------------------------------------------------------------+ //| grid_6_symbols.mq4 | //| Copyright © 2015, Vladimir Hlystov | //| cmillion@narod.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2015, Vladimir Hlystov" #property link "cmillion@narod.ru" #property strict #property description "Советник выставляет сети из стоп ордеров по указанным парам" #property description "Как только суммарный профит по всем позициям превысит указанный уровень," #property description "советник закрывает все и по новой переоткрывает сети" //--- extern string Symbol1 = "XAUUSD"; //--- extern int sleep = 300; // Задержка после закрытия в секундах extern int Step = 500; // Шаг между ордерами //--- При достижении прибыли NoLoss + MinProfitNL (измеряется в пунктах) стоп-лосс переносим на цену открытия ордера плюс минус MinProfitNL extern int NoLoss=300; // Безубыток (расстояние от СЛ до цены) extern int MinProfitNL=100; // Минимальная прибыль безубытка //--- extern int Orders=20; // Кол-во отложенных extern double Lot = 0.5; extern double Profit = 100; extern int Magic = 123; //------------------------------- string val,symbol[6]; int n=0,digits[6]; double point[6]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { val=" "+AccountCurrency(); n=0; if(MarketInfo(Symbol1,MODE_TRADEALLOWED)==1&&Symbol1 != "") {symbol[n] = Symbol1; point[n] = MarketInfo(symbol[n],MODE_POINT); digits[n] = (int)MarketInfo(symbol[n],MODE_DIGITS); n++;} //--- if(n==0 && IsTesting()) {symbol[0]=Symbol(); point[n]=MarketInfo(symbol[n],MODE_POINT); digits[n]=(int)MarketInfo(symbol[n],MODE_DIGITS);n=1;} // тестер //--- Comment("Торговля по ",n," сим"); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ int S(string sym) { for(int i=0; i<6; i++) if(symbol[i] == sym) return(i); return(-1); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(!IsTesting()) ObjectsDeleteAll(); Comment(""); } //+------------------------------------------------------------------+ void OnTick() { if(n==0 || n>6) {Comment("Торги по выбранным парам запрещены"); return;} int OT,i,j,orders=0; double OSL,OOP,profit=0; double ProfitS[6]; ArrayInitialize(ProfitS,0); double MaxPrice[6],MinPrice[6]; ArrayInitialize(MaxPrice,0); ArrayInitialize(MinPrice,0); int bs[6],ss[6]; ArrayInitialize(bs,0); ArrayInitialize(ss,0); for(i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber()==Magic) { j=S(OrderSymbol()); if(j!=-1) { OT=OrderType(); ProfitS[j]+=OrderProfit()+OrderSwap()+OrderCommission(); profit+=OrderProfit()+OrderSwap()+OrderCommission(); orders++; OOP = NormalizeDouble(OrderOpenPrice(),digits[j]); OSL = NormalizeDouble(OrderStopLoss(),digits[j]); if(OT==OP_BUY) { if(MaxPrice[j]<OOP) MaxPrice[j]=OOP; if(MarketInfo(symbol[j],MODE_BID)>=NormalizeDouble(OOP+(MinProfitNL+NoLoss)*point[j],digits[j]) && OSL<NormalizeDouble(OOP+MinProfitNL*point[j],digits[j])) { if(!OrderModify(OrderTicket(),OOP,NormalizeDouble(OOP+MinProfitNL*point[j],digits[j]),OrderTakeProfit(),0,White)) Print(symbol[j]," NoLoss Error ",GetLastError()," order ",OrderTicket()," SL ",DoubleToStr(OOP+MinProfitNL*point[j],digits[j])); } } if(OT==OP_SELL) { if(MinPrice[j]>OOP || MinPrice[j]==0) MinPrice[j]=OOP; if(MarketInfo(symbol[j],MODE_ASK)<=NormalizeDouble(OOP -(MinProfitNL+NoLoss)*point[j],digits[j]) &&(OSL==0|| OSL>NormalizeDouble(OOP-MinProfitNL*point[j],digits[j]))) { if(!OrderModify(OrderTicket(),OOP,NormalizeDouble(OOP-MinProfitNL*point[j],digits[j]),OrderTakeProfit(),0,White)) Print(symbol[j]," NoLoss Error ",GetLastError()," order ",OrderTicket()," SL ",DoubleToStr(OOP+MinProfitNL*point[j],digits[j])); } } if(OT==OP_BUYSTOP) { if(MaxPrice[j]<OOP) MaxPrice[j]=OOP; bs[j]++; } if(OT==OP_SELLSTOP) { if(MinPrice[j]>OOP || MinPrice[j]==0) MinPrice[j]=OOP; ss[j]++; } } } } } if(sleep>0 && orders==0) { for(i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderMagicNumber()==Magic) { if(S(OrderSymbol())!=-1) if(TimeCurrent()-OrderCloseTime()<sleep) return; break; } } } } double price; for(i=0; i<n; i++) { if(bs[i]<Orders) { if(MaxPrice[i]==0) price=NormalizeDouble(MarketInfo(symbol[i],MODE_ASK)+Step*point[i],digits[i]); else price=NormalizeDouble(MaxPrice[i]+Step*point[i],digits[i]); if(price<NormalizeDouble(MarketInfo(symbol[i],MODE_ASK)+MarketInfo(symbol[i],MODE_STOPLEVEL)*point[i],digits[i])) price=NormalizeDouble(MarketInfo(symbol[i],MODE_ASK)+MarketInfo(symbol[i],MODE_STOPLEVEL)*point[i],digits[i]); if(OrderSend(symbol[i],OP_BUYSTOP,Lot,price,30,0,0,"GRID ",Magic,0,CLR_NONE)==-1) Comment("OrderSend ",symbol[i]," Error ",GetLastError()); } //--- if(ss[i]<Orders) { if(MinPrice[i]==0) price=NormalizeDouble(MarketInfo(symbol[i],MODE_BID)-Step*point[i],digits[i]); else price=NormalizeDouble(MinPrice[i]-Step*point[i],digits[i]); if(price>NormalizeDouble(MarketInfo(symbol[i],MODE_BID)-MarketInfo(symbol[i],MODE_STOPLEVEL)*point[i],digits[i])) price=NormalizeDouble(MarketInfo(symbol[i],MODE_BID)-MarketInfo(symbol[i],MODE_STOPLEVEL)*point[i],digits[i]); if(OrderSend(symbol[i],OP_SELLSTOP,Lot,price,30,0,0,"GRID ",Magic,0,CLR_NONE)==-1) Comment("OrderSend ",symbol[i]," Error ",GetLastError()); } RefreshRates(); } //--- if(profit>Profit) DeleteAllOrders(); //--- DrawLABEL("Balance",StringConcatenate("Balance ",DoubleToStr(AccountBalance(),2),val),5,35,Lime); DrawLABEL("Equity",StringConcatenate("Equity ",DoubleToStr(AccountEquity(),2),val),5,55,Lime); DrawLABEL("FreeMargin",StringConcatenate("FreeMargin ",DoubleToStr(AccountFreeMargin(),2),val),5,75,Lime); for(i=0; i<n; i++) DrawLABEL(StringConcatenate("Profit ",symbol[i]),StringConcatenate("Profit ",symbol[i]," ",DoubleToStr(ProfitS[i],2),val),5,100+20*i,Color(ProfitS[i]<0,clrRed,clrLime)); DrawLABEL("Profit ",StringConcatenate("Profit ",DoubleToStr(profit,2)," (close ",DoubleToStr(Profit,2),")"),5,105+20*n,Color(profit<0,clrRed,clrLime)); return; } //------------------------------- color Color(bool P,color a,color b) { if(P) return(a); else return(b); } //------------------------------------------------------------------ void DrawLABEL(string name,string Name,int x,int y,color clr) { if(ObjectFind(name)==-1) { ObjectCreate(name,OBJ_LABEL,0,0,0); ObjectSet(name,OBJPROP_CORNER,1); ObjectSet(name,OBJPROP_XDISTANCE,x); ObjectSet(name,OBJPROP_YDISTANCE,y); } ObjectSetText(name,Name,12,"Arial",clr); } //-------------------------------------------------------------------- void DeleteAllOrders() { bool error=true; int i,j,nn=0; while(true) { if(!IsDemo()) { int ret=MessageBox("Закрыть все ордера","Демо версия",MB_YESNO|MB_TOPMOST); if(ret==IDNO) return; } for(i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderMagicNumber()==Magic) { j=S(OrderSymbol()); if(j!=-1) { int OT=OrderType(); int Ticket=OrderTicket(); if(OT==OP_BUY) { error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(symbol[j],MODE_BID),digits[j]),50,clrNONE); } if(OT==OP_SELL) { error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(symbol[j],MODE_ASK),digits[j]),50,clrNONE); } if(OT>1) if(!OrderDelete(Ticket)) Comment("Ордер ",Ticket," ошибка удаления ",GetLastError()); //--- if(!error) { int err=GetLastError(); if(err<2) continue; if(err==129) { Comment("Неправильная цена ",TimeToStr(TimeCurrent(),TIME_SECONDS)); Sleep(500); RefreshRates(); continue; } if(err==146) { j++; if(IsTradeContextBusy()) Sleep(500); RefreshRates(); continue; } } } } } } int k=0; for(j= 0; j<OrdersTotal(); j++) { if(OrderSelect(j,SELECT_BY_POS)) { if(OrderMagicNumber()==Magic) { if(S(OrderSymbol())!=-1) k++; } } } if(k==0) break; nn++; if(nn>10) break; Sleep(500); RefreshRates(); } } //-------------------------------вот так лот меняется, в бу вроде переводится. Только он мультивалютный, в тестере не будет работать как надо
Maxim Dmitrievsky:
вот так лот меняется, в бу вроде переводится. Только он мультивалютный, в тестере не будет работать как надо
вот так лот меняется, в бу вроде переводится. Только он мультивалютный, в тестере не будет работать как надо
а как его переделать под зоито?)
Maxim Dmitrievsky:
Только он мультивалютный, в тестере не будет работать как надо
Только он мультивалютный, в тестере не будет работать как надо
если это не индикаторый сеточник,то его можно потестировать в мт5 через эту библиотеку https://www.mql5.com/ru/code/16006
MT4Orders
- голосов: 14
- 2016.08.05
- fxsaber
- www.mql5.com
Параллельное использование ордерных систем MetaTrader 4 и MetaTrader 5.
Anton Nikiforov:
а не работает разве? так то ничего переделывать не надо, просто поменять входные параметры с учетом его волатильности
а как его переделать под зоито?)
ivanivan_11:
не разбирался пока в вашей библиотеке, но вещч, безусловно, полезная )
если это не индикаторый сеточник,то его можно потестировать в мт5 через эту библиотеку https://www.mql5.com/ru/code/16006
Сеточник обычно сливает, за ним следить надо постоянно. Аккуратнее.
Sergey Mitrofanov:
Сеточник обычно сливает, за ним следить надо постоянно. Аккуратнее.
Сеточник обычно сливает, за ним следить надо постоянно. Аккуратнее.
Спасибо, учту.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Проблема в том, что когда в коде меняешь лот, профит, изменений не происходит, как было изначально, так и осталось.
Прибыль в безубыток не переносится. В общем, нужна помощь. А так в тестере вроде не плохие результаты показывает, но сыроват.
Сам боюсь не разберусь. Пишите в ЛС если готовы помочь. Сеточник с просторов инета...