I found this EA on another site and I thought a couple changes would get it to do what I wanted it to do but apparently, its a little bit tougher than that. I've been trying to wrap my head around some MQL but it just isnt happening. I thought by changing BUYLIMIT to BUYSTOP and vice versa for sells would get it how I wanted but instead, it places one instant order on symbol1.
This is what Im trying to do: First off, I don't need symbol3 but whenever I delete information pertaining to symbol3, the last section on count order gives me a bunch of errors. In a essence, I want this EA to do what it already does except with stop orders and only 2 symbols.
I want it to open an order at market price then seperate stop orders at levels defined. One bloop it has is placing 2 orders at the same price on the 1st level limit order. If this cant be changed, I can deal with that, but again, they should be stop orders.
Heres the original code:
And heres my take at it, I only changed the buy/selllimit to buy/sellstop but it messes it all up:
Any help is much appreciated. You don't have to spoonfeed me, maybe just a point in the right direction if possible.
This is what Im trying to do: First off, I don't need symbol3 but whenever I delete information pertaining to symbol3, the last section on count order gives me a bunch of errors. In a essence, I want this EA to do what it already does except with stop orders and only 2 symbols.
I want it to open an order at market price then seperate stop orders at levels defined. One bloop it has is placing 2 orders at the same price on the 1st level limit order. If this cant be changed, I can deal with that, but again, they should be stop orders.
Heres the original code:
Inserted Code
//+------------------------------------------------------------------+ //| Limit Orders Manager.mq4 | //| Copyright © 2009, TradingSytemForex | //| [url]http://www.tradingsystemforex.com[/url] | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, TradingSytemForex" #property link "[url]http://www.tradingsystemforex.com[/url]" extern string S1="---------------- Entry Settings"; extern string Symbol1="EURUSD"; extern string Symbol2="GBPUSD"; extern string Symbol3="USDCHF"; extern string S2="---------------- First Limit Order Type"; extern double Levels=3; extern double PipStep=30; extern string Symbol1OrderType="BUY"; // "BUY" for buy, "SELL" for sell extern string Symbol2OrderType="SELL"; extern string Symbol3OrderType="SELL"; extern string S3="---------------- Money Management"; extern double Symbol1Lots=0.1; extern double Symbol2Lots=0.1; extern double Symbol3Lots=0.1; extern string S4="---------------- Order Management"; extern int Symbol1StopLoss=0; extern int Symbol2StopLoss=0; extern int Symbol3StopLoss=0; extern int Symbol1TakeProfit=0; extern int Symbol2TakeProfit=0; extern int Symbol3TakeProfit=0; extern int Slippage=10; extern int Magic=0; datetime PreviousBarTime; //+------------------------------------------------------------------+ void start() { double SL,TP; int cpt,Total; double Symbol1Ask=MarketInfo(Symbol1,MODE_ASK); double Symbol1Bid=MarketInfo(Symbol1,MODE_BID); double Symbol1Point=MarketInfo(Symbol1,MODE_POINT); double Symbol1Digits=MarketInfo(Symbol1,MODE_DIGITS); double Symbol2Ask=MarketInfo(Symbol2,MODE_ASK); double Symbol2Bid=MarketInfo(Symbol2,MODE_BID); double Symbol2Point=MarketInfo(Symbol2,MODE_POINT); double Symbol2Digits=MarketInfo(Symbol2,MODE_DIGITS); double Symbol3Ask=MarketInfo(Symbol3,MODE_ASK); double Symbol3Bid=MarketInfo(Symbol3,MODE_BID); double Symbol3Point=MarketInfo(Symbol3,MODE_POINT); double Symbol3Digits=MarketInfo(Symbol3,MODE_DIGITS); //+------------------------------------------------------------------+ if(Symbol1OrderType=="BUY") { if(Symbol1StopLoss>0)SL=Symbol1Ask-Symbol1StopLoss*Symbol1Point;else SL=0; if(Symbol1TakeProfit>0)TP=Symbol1Ask+Symbol1TakeProfit*Symbol1Point;else TP=0; if(CountOrders(Symbol1,OP_BUY,Magic)<1)OrderSend(Symbol1,OP_BUY,Symbol1Lots,Symbol1Ask,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol1StopLoss>0)SL=Symbol1Ask-cpt*PipStep*Symbol1Point-Symbol1StopLoss*Symbol1Point;else SL=0; if(Symbol1TakeProfit>0)TP=Symbol1Ask-cpt*PipStep*Symbol1Point+Symbol1TakeProfit*Symbol1Point;else TP=0; if(CountOrders(Symbol1,OP_BUYLIMIT,Magic)<3)OrderSend(Symbol1,OP_BUYLIMIT,Symbol1Lots,NormalizeDouble(Symbol1Ask-cpt*PipStep*Symbol1Point,Symbol1Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } if(Symbol1OrderType=="SELL") { if(Symbol1StopLoss>0)SL=Symbol1Bid+Symbol1StopLoss*Symbol1Point;else SL=0; if(Symbol1TakeProfit>0)TP=Symbol1Bid-Symbol1TakeProfit*Symbol1Point;else TP=0; if(CountOrders(Symbol1,OP_SELL,Magic)<1)OrderSend(Symbol1,OP_SELL,Symbol1Lots,Symbol1Bid,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol1StopLoss>0)SL=Symbol1Bid+cpt*PipStep*Symbol1Point+Symbol1StopLoss*Symbol1Point;else SL=0; if(Symbol1TakeProfit>0)TP=Symbol1Bid+cpt*PipStep*Symbol1Point-Symbol1TakeProfit*Symbol1Point;else TP=0; if(CountOrders(Symbol1,OP_SELLLIMIT,Magic)<3)OrderSend(Symbol1,OP_SELLLIMIT,Symbol1Lots,NormalizeDouble(Symbol1Bid+cpt*PipStep*Symbol1Point,Symbol1Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } if(Symbol2OrderType=="BUY") { if(Symbol2StopLoss>0)SL=Symbol2Ask-Symbol2StopLoss*Symbol2Point;else SL=0; if(Symbol2TakeProfit>0)TP=Symbol2Ask+Symbol2TakeProfit*Symbol2Point;else TP=0; if(CountOrders(Symbol2,OP_BUY,Magic)<1)OrderSend(Symbol2,OP_BUY,Symbol2Lots,Symbol2Ask,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol2StopLoss>0)SL=Symbol2Ask-cpt*PipStep*Symbol2Point-Symbol2StopLoss*Symbol2Point;else SL=0; if(Symbol2TakeProfit>0)TP=Symbol2Ask-cpt*PipStep*Symbol2Point+Symbol2TakeProfit*Symbol2Point;else TP=0; if(CountOrders(Symbol2,OP_BUYLIMIT,Magic)<3)OrderSend(Symbol2,OP_BUYLIMIT,Symbol2Lots,NormalizeDouble(Symbol2Ask-cpt*PipStep*Symbol2Point,Symbol2Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } if(Symbol2OrderType=="SELL") { if(Symbol2StopLoss>0)SL=Symbol2Bid+Symbol2StopLoss*Symbol2Point;else SL=0; if(Symbol2TakeProfit>0)TP=Symbol2Bid-Symbol2TakeProfit*Symbol2Point;else TP=0; if(CountOrders(Symbol2,OP_SELL,Magic)<1)OrderSend(Symbol2,OP_SELL,Symbol2Lots,Symbol2Bid,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol2StopLoss>0)SL=Symbol2Bid+cpt*PipStep*Symbol2Point+Symbol2StopLoss*Symbol2Point;else SL=0; if(Symbol2TakeProfit>0)TP=Symbol2Bid+cpt*PipStep*Symbol2Point-Symbol2TakeProfit*Symbol2Point;else TP=0; if(CountOrders(Symbol2,OP_SELLLIMIT,Magic)<3)OrderSend(Symbol2,OP_SELLLIMIT,Symbol2Lots,NormalizeDouble(Symbol2Bid+cpt*PipStep*Symbol2Point,Symbol2Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } if(Symbol3OrderType=="BUY") { if(Symbol3StopLoss>0)SL=Symbol3Ask-Symbol3StopLoss*Symbol3Point;else SL=0; if(Symbol3TakeProfit>0)TP=Symbol3Ask+Symbol3TakeProfit*Symbol3Point;else TP=0; if(CountOrders(Symbol3,OP_BUY,Magic)<1)OrderSend(Symbol3,OP_BUY,Symbol3Lots,Symbol3Ask,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol3StopLoss>0)SL=Symbol3Ask-cpt*PipStep*Symbol3Point-Symbol3StopLoss*Symbol3Point;else SL=0; if(Symbol3TakeProfit>0)TP=Symbol3Ask-cpt*PipStep*Symbol3Point+Symbol3TakeProfit*Symbol3Point;else TP=0; if(CountOrders(Symbol3,OP_BUYLIMIT,Magic)<3)OrderSend(Symbol3,OP_BUYLIMIT,Symbol3Lots,NormalizeDouble(Symbol3Ask-cpt*PipStep*Symbol3Point,Symbol3Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } if(Symbol3OrderType=="SELL") { if(Symbol3StopLoss>0)SL=Symbol3Bid+Symbol3StopLoss*Symbol3Point;else SL=0; if(Symbol3TakeProfit>0)TP=Symbol3Bid-Symbol3TakeProfit*Symbol3Point;else TP=0; if(CountOrders(Symbol3,OP_SELL,Magic)<1)OrderSend(Symbol3,OP_SELL,Symbol3Lots,Symbol3Bid,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol3StopLoss>0)SL=Symbol3Bid+cpt*PipStep*Symbol3Point+Symbol3StopLoss*Symbol3Point;else SL=0; if(Symbol3TakeProfit>0)TP=Symbol3Bid+cpt*PipStep*Symbol3Point-Symbol3TakeProfit*Symbol3Point;else TP=0; if(CountOrders(Symbol3,OP_SELLLIMIT,Magic)<3)OrderSend(Symbol3,OP_SELLLIMIT,Symbol3Lots,NormalizeDouble(Symbol3Bid+cpt*PipStep*Symbol3Point,Symbol3Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } return(0); } //|---------count orders int CountOrders(string symbol,int Type,int Magic) { int _CountOrd; _CountOrd=0; for(int i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==symbol) { if((OrderType()==Type&&(OrderMagicNumber()==Magic)||Magic==0))_CountOrd++; } } return(_CountOrd); }
And heres my take at it, I only changed the buy/selllimit to buy/sellstop but it messes it all up:
Inserted Code
//+------------------------------------------------------------------+ //| (mod)Limit Orders Manager.mq4 | //| Copyright © 2009, TradingSytemForex | //| [url]http://www.tradingsystemforex.com[/url] | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, TradingSytemForex" #property link "[url]http://www.tradingsystemforex.com[/url]" extern string S1="---------------- Entry Settings"; extern string Symbol1="EURUSDm"; extern string Symbol2="AUDUSDm"; extern string Symbol3=""; extern string S2="---------------- First Limit Order Type"; extern double Levels=3; extern double PipStep=30; extern string Symbol1OrderType="BUY"; // "BUY" for buy, "SELL" for sell extern string Symbol2OrderType="SELL"; extern string Symbol3OrderType=""; extern string S3="---------------- Money Management"; extern double Symbol1Lots=0.01; extern double Symbol2Lots=0.01; extern double Symbol3Lots=0.0; extern string S4="---------------- Order Management"; extern int Symbol1StopLoss=0; extern int Symbol2StopLoss=0; extern int Symbol3StopLoss=0; extern int Symbol1TakeProfit=0; extern int Symbol2TakeProfit=0; extern int Symbol3TakeProfit=0; extern int Slippage=10; extern int Magic=0; datetime PreviousBarTime; //+------------------------------------------------------------------+ void start() { double SL,TP; int cpt,Total; double Symbol1Ask=MarketInfo(Symbol1,MODE_ASK); double Symbol1Bid=MarketInfo(Symbol1,MODE_BID); double Symbol1Point=MarketInfo(Symbol1,MODE_POINT); double Symbol1Digits=MarketInfo(Symbol1,MODE_DIGITS); double Symbol2Ask=MarketInfo(Symbol2,MODE_ASK); double Symbol2Bid=MarketInfo(Symbol2,MODE_BID); double Symbol2Point=MarketInfo(Symbol2,MODE_POINT); double Symbol2Digits=MarketInfo(Symbol2,MODE_DIGITS); double Symbol3Ask=MarketInfo(Symbol3,MODE_ASK); double Symbol3Bid=MarketInfo(Symbol3,MODE_BID); double Symbol3Point=MarketInfo(Symbol3,MODE_POINT); double Symbol3Digits=MarketInfo(Symbol3,MODE_DIGITS); //+------------------------------------------------------------------+ if(Symbol1OrderType=="BUY") { if(Symbol1StopLoss>0)SL=Symbol1Ask-Symbol1StopLoss*Symbol1Point;else SL=0; if(Symbol1TakeProfit>0)TP=Symbol1Ask+Symbol1TakeProfit*Symbol1Point;else TP=0; if(CountOrders(Symbol1,OP_BUY,Magic)<1)OrderSend(Symbol1,OP_BUY,Symbol1Lots,Symbol1Ask,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol1StopLoss>0)SL=Symbol1Ask-cpt*PipStep*Symbol1Point-Symbol1StopLoss*Symbol1Point;else SL=0; if(Symbol1TakeProfit>0)TP=Symbol1Ask-cpt*PipStep*Symbol1Point+Symbol1TakeProfit*Symbol1Point;else TP=0; if(CountOrders(Symbol1,OP_BUYSTOP,Magic)<3)OrderSend(Symbol1,OP_BUYSTOP,Symbol1Lots,NormalizeDouble(Symbol1Ask-cpt*PipStep*Symbol1Point,Symbol1Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } if(Symbol1OrderType=="SELL") { if(Symbol1StopLoss>0)SL=Symbol1Bid+Symbol1StopLoss*Symbol1Point;else SL=0; if(Symbol1TakeProfit>0)TP=Symbol1Bid-Symbol1TakeProfit*Symbol1Point;else TP=0; if(CountOrders(Symbol1,OP_SELL,Magic)<1)OrderSend(Symbol1,OP_SELL,Symbol1Lots,Symbol1Bid,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol1StopLoss>0)SL=Symbol1Bid+cpt*PipStep*Symbol1Point+Symbol1StopLoss*Symbol1Point;else SL=0; if(Symbol1TakeProfit>0)TP=Symbol1Bid+cpt*PipStep*Symbol1Point-Symbol1TakeProfit*Symbol1Point;else TP=0; if(CountOrders(Symbol1,OP_SELLSTOP,Magic)<3)OrderSend(Symbol1,OP_SELLSTOP,Symbol1Lots,NormalizeDouble(Symbol1Bid+cpt*PipStep*Symbol1Point,Symbol1Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } if(Symbol2OrderType=="BUY") { if(Symbol2StopLoss>0)SL=Symbol2Ask-Symbol2StopLoss*Symbol2Point;else SL=0; if(Symbol2TakeProfit>0)TP=Symbol2Ask+Symbol2TakeProfit*Symbol2Point;else TP=0; if(CountOrders(Symbol2,OP_BUY,Magic)<1)OrderSend(Symbol2,OP_BUY,Symbol2Lots,Symbol2Ask,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol2StopLoss>0)SL=Symbol2Ask-cpt*PipStep*Symbol2Point-Symbol2StopLoss*Symbol2Point;else SL=0; if(Symbol2TakeProfit>0)TP=Symbol2Ask-cpt*PipStep*Symbol2Point+Symbol2TakeProfit*Symbol2Point;else TP=0; if(CountOrders(Symbol2,OP_BUYSTOP,Magic)<3)OrderSend(Symbol2,OP_BUYSTOP,Symbol2Lots,NormalizeDouble(Symbol2Ask-cpt*PipStep*Symbol2Point,Symbol2Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } if(Symbol2OrderType=="SELL") { if(Symbol2StopLoss>0)SL=Symbol2Bid+Symbol2StopLoss*Symbol2Point;else SL=0; if(Symbol2TakeProfit>0)TP=Symbol2Bid-Symbol2TakeProfit*Symbol2Point;else TP=0; if(CountOrders(Symbol2,OP_SELL,Magic)<1)OrderSend(Symbol2,OP_SELL,Symbol2Lots,Symbol2Bid,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol2StopLoss>0)SL=Symbol2Bid+cpt*PipStep*Symbol2Point+Symbol2StopLoss*Symbol2Point;else SL=0; if(Symbol2TakeProfit>0)TP=Symbol2Bid+cpt*PipStep*Symbol2Point-Symbol2TakeProfit*Symbol2Point;else TP=0; if(CountOrders(Symbol2,OP_SELLSTOP,Magic)<3)OrderSend(Symbol2,OP_SELLSTOP,Symbol2Lots,NormalizeDouble(Symbol2Bid+cpt*PipStep*Symbol2Point,Symbol2Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } if(Symbol3OrderType=="BUY") { if(Symbol3StopLoss>0)SL=Symbol3Ask-Symbol3StopLoss*Symbol3Point;else SL=0; if(Symbol3TakeProfit>0)TP=Symbol3Ask+Symbol3TakeProfit*Symbol3Point;else TP=0; if(CountOrders(Symbol3,OP_BUY,Magic)<1)OrderSend(Symbol3,OP_BUY,Symbol3Lots,Symbol3Ask,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol3StopLoss>0)SL=Symbol3Ask-cpt*PipStep*Symbol3Point-Symbol3StopLoss*Symbol3Point;else SL=0; if(Symbol3TakeProfit>0)TP=Symbol3Ask-cpt*PipStep*Symbol3Point+Symbol3TakeProfit*Symbol3Point;else TP=0; if(CountOrders(Symbol3,OP_BUYSTOP,Magic)<3)OrderSend(Symbol3,OP_BUYSTOP,Symbol3Lots,NormalizeDouble(Symbol3Ask-cpt*PipStep*Symbol3Point,Symbol3Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } if(Symbol3OrderType=="SELL") { if(Symbol3StopLoss>0)SL=Symbol3Bid+Symbol3StopLoss*Symbol3Point;else SL=0; if(Symbol3TakeProfit>0)TP=Symbol3Bid-Symbol3TakeProfit*Symbol3Point;else TP=0; if(CountOrders(Symbol3,OP_SELL,Magic)<1)OrderSend(Symbol3,OP_SELL,Symbol3Lots,Symbol3Bid,Slippage,SL,TP,"Limit Orders Manager",Magic,0,Blue); for(cpt=1;cpt<=Levels;cpt++) { if(Symbol3StopLoss>0)SL=Symbol3Bid+cpt*PipStep*Symbol3Point+Symbol3StopLoss*Symbol3Point;else SL=0; if(Symbol3TakeProfit>0)TP=Symbol3Bid+cpt*PipStep*Symbol3Point-Symbol3TakeProfit*Symbol3Point;else TP=0; if(CountOrders(Symbol3,OP_SELLSTOP,Magic)<3)OrderSend(Symbol3,OP_SELLSTOP,Symbol3Lots,NormalizeDouble(Symbol3Bid+cpt*PipStep*Symbol3Point,Symbol3Digits),Slippage,SL,TP,"Limit Orders Manager",Magic,0); } } return(0); } //|---------count orders int CountOrders(string symbol,int Type,int Magic) { int _CountOrd; _CountOrd=0; for(int i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==symbol) { if((OrderType()==Type&&(OrderMagicNumber()==Magic)||Magic==0))_CountOrd++; } } return(_CountOrd); }
Any help is much appreciated. You don't have to spoonfeed me, maybe just a point in the right direction if possible.