// TakeProfitZero.mq4 // Ñêðèïò âûñòàâëÿþùèé TP èëè SL â áåçóáûòîê (ñðåäíèé óðîâåíü äëÿ âñåõ îðäåðîâ Sell èëè Buy). #include <WinUser32.mqh> void Modify(int type, double level, bool tp) { double stop; double take; for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS)) break; if (OrderSymbol()!=Symbol()) continue; if (OrderType()==type) { if (tp) { stop=OrderStopLoss(); take=level; } else { stop=level; take=OrderTakeProfit(); } if (!OrderModify(OrderTicket(),OrderOpenPrice(),stop,take,0,CLR_NONE)) Print("LastError = ", GetLastError()); } } } void start() { double BuyLots=0; double SellLots=0; double BuyProfit=0; double SellProfit=0; for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS)) break; if (OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_BUY) { BuyLots=BuyLots+OrderLots(); BuyProfit=BuyProfit+OrderProfit()+OrderCommission()+OrderSwap(); } if (OrderType()==OP_SELL) { SellLots=SellLots+OrderLots(); SellProfit=SellProfit+OrderProfit()+OrderCommission()+OrderSwap(); } } double LotSize=MarketInfo(Symbol(),MODE_LOTSIZE); if (BuyLots>0) double BuyLevel=NormalizeDouble(Bid-(BuyProfit/(LotSize*BuyLots)),Digits); else BuyLevel=0; if (SellLots>0) double SellLevel=NormalizeDouble(Bid+(SellProfit/(LotSize*SellLots)),Digits); else SellLevel=0; double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point; if (BuyLevel==0) MessageBox("Íåò îðäåðîâ íà ïîêóïêó ","Ìîäèôèöèêàöèÿ íåâîçìîæíà",MB_OK|MB_ICONINFORMATION); else { if (BuyLevel<(Bid+StopLevel) && BuyLevel>(Bid-StopLevel)) MessageBox("Öåíà ñëèøêîì áëèçêà ê óðîâíþ áåçóáûòêà ","Ìîäèôèöèêàöèÿ íåâîçìîæíà",MB_OK|MB_ICONINFORMATION); else { string msg="Áåçóáûòîê äëÿ îðäåðîâ íà ïîêóïêó = "+DoubleToStr(BuyLevel,Digits)+" "; if (BuyLevel>Bid) { int res=MessageBox(msg,"Ìîäèôèöèðîâàòü TakeProfit â áåçóáûòîê?",MB_YESNO|MB_ICONQUESTION); if (res==6) Modify(OP_BUY,BuyLevel,true); } else { res=MessageBox(msg,"Ìîäèôèöèðîâàòü StopLoss â áåçóáûòîê?",MB_YESNO|MB_ICONQUESTION); if (res==6) Modify(OP_BUY,BuyLevel,false); } } } if (SellLevel==0) MessageBox("Íåò îðäåðîâ íà ïðîäàæó ","Ìîäèôèöèêàöèÿ íåâîçìîæíà",MB_OK|MB_ICONINFORMATION); else { if (SellLevel<(Bid+StopLevel) && SellLevel>(Bid-StopLevel)) MessageBox("Öåíà ñëèøêîì áëèçêà ê óðîâíþ áåçóáûòêà ","Ìîäèôèöèêàöèÿ íåâîçìîæíà",MB_OK|MB_ICONINFORMATION); else { msg="Áåçóáûòîê äëÿ îðäåðîâ íà ïðîäàæó = "+DoubleToStr(SellLevel,Digits)+" "; if (SellLevel<Bid) { res=MessageBox(msg,"Ìîäèôèöèðîâàòü TakeProfit â áåçóáûòîê?",MB_YESNO|MB_ICONQUESTION); if (res==6) Modify(OP_SELL,SellLevel,true); } else { res=MessageBox(msg,"Ìîäèôèöèðîâàòü StopLoss â áåçóáûòîê?",MB_YESNO|MB_ICONQUESTION); if (res==6) Modify(OP_SELL,SellLevel,false); } } } }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy
Other Features:
It opens Message Boxes to the user