//+------------------------------------------------------------------+ //| Another Martingale.mq4 | //| Copyright © 2009, Totom Sukopratomo | //| mailto : eaforexprogramming@gmail.com | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| be my referall by register in my link and get free managed account //| for $50000 deposit in standard or $1000 in micro with //| 5% per month profit //| here is the link: //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, Totom Sukopratomo" #property link "mailto: eaforexprogramming@gmail.com" //*------USER INPUT-----* extern int MagicNumber=1; // use for identifing order extern double StartLot=0.1; // basic lot extern int StopLoss=30; // stop loss extern int TakeProfit=30; // take profit extern int TrailingStop=0; // to moving out stoploss into // profit direction. adding // number bigger than 0 will // activated this fuction extern bool MoveToBreakEvent=false; // to moving stoploss into // opening price so there // a losses can neutralize // when market moves again us extern int LockedPips=1; // small amount of pips profit // expected to be earn when // market moves again us after // move to break event funtion // is triggered out extern int RSIPeriod=9; // amount of bar to calculate // rsi price extern int UpperLevel=70; // a level to determine market // is overbought if price is touch // it extern int LowerLevel=30; // same as above but for // oversold comdition extern bool Martingale=true; // false to deactivated this feature extern double Multiplier=2.5; // previous lotsize will multiplied // with this value to get lotsize // of next order if EA getting loss extern int DeepLevel=10; // how many continue losses // will be covered by martingale // function extern int StartHour=0; // time for EA start trading extern int EndHour=20; // time for EA stop trading double pt, // custom point stoplevel, // stop level minlot, // minimal lot maxlot; // maximal lot //+------------------------------------------------------------------+ //| order counting | //+------------------------------------------------------------------+ int ordercount() // we counting our order here { int total=0; // total of our order int i; // pos of our order for(i=0; i<OrdersTotal(); i++) // looping to count our order // from pos 0 until last pos { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); // is it right our order? if(OrderSymbol()!=Symbol() || // if symbol of order didn't match OrderMagicNumber()!=MagicNumber) // with current chart symbol continue; // or the magic numb of order // didn't match with our magic // number, don't count it total++; // count if all criteria matched } return(total); // this function returned total of // our opened order } //+------------------------------------------------------------------+ //| check for losses | //+------------------------------------------------------------------+ bool checkforlosses() // we check our last closed order { // from losses here int losses=0; // total of losses int i; // pos of our order for(i=0; i<OrdersHistoryTotal(); i++) // looping to check all of our { // order history from pos 0 until // last pos OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); // is it right our order? if(OrderSymbol()!=Symbol() || // if symbol of order didn't match OrderMagicNumber()!=MagicNumber) // with current chart symbol continue; // or the magic numb of order // didn't match with our magic // number, it is not our's, just don't check it if(OrderProfit()<0) losses++; // so we count it as a losses 'cause negative profit else losses=0; // otherwise we leave it as is } if(losses>0) return(true); // if last of our order is in losses // true "value" will returned from this function return(false); // when there is no losses false will returned } //+------------------------------------------------------------------+ //| last lot | //+------------------------------------------------------------------+ double lastlot() // we will find last lot size { // order with this function double lot=0; // lot size int i; // pos of our order for(i=0; i<OrdersHistoryTotal(); i++) // looping to check all of our { // order history from pos 0 until // last pos OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); // is it right our order? if(OrderSymbol()!=Symbol() || // if symbol of order didn't match OrderMagicNumber()!=MagicNumber) // with current chart symbol continue; // or the magic numb of order // didn't match with our magic // number, it is not our's lot=OrderLots(); // last lot } return(lot); // last lot size returned } //+------------------------------------------------------------------+ //| my lot | //+------------------------------------------------------------------+ double mylot() // we calculate for next lot here { // when a loss occured or not int prec=0; // precision value double lot, // lot size minlot, // minimal size of lot maxlot, // maximal size of lot maxlotX; // maximal size of martingale lot minlot=MarketInfo(Symbol(),MODE_MINLOT); // get brokers minimal lot size maxlot=MarketInfo(Symbol(),MODE_MAXLOT); // get brokers maximal lot size if(minlot==0.01) prec=2; // get precision value if(minlot==0.1) prec=1; // get precision value maxlotX=NormalizeDouble(StartLot*MathPow(Multiplier,DeepLevel), prec); //get max. // martingale lotsize if(Martingale) // if martingale activated { if(checkforlosses()) // if last order is in losses { lot=NormalizeDouble(lastlot()*Multiplier,prec); // martingale lot } else { lot=StartLot; // normal lot } } else { lot=StartLot; // normal lot } if(lot>maxlot) return(StartLot); // if lot size is bigger than broker rules, // we change it into StartLot value if(lot>maxlotX) return(StartLot); // if lot size is bigger than martingale level, // we change it into StartLot value if(lot<minlot) return(minlot); // if lot size smaller than minlot, we change // into monlot value return(lot); // lot size returned } //+------------------------------------------------------------------+ //| get signal | //+------------------------------------------------------------------+ string getsignal() // we calculate trading signal here { double rsi=iRSI(Symbol(),0,RSIPeriod,0,0); // we use RSI to get signal if(rsi<LowerLevel) return("buy"); // buy signal returned when // oversold detected if(rsi>UpperLevel) return("sell"); // sell signal returned when // overbought detected return("wait and see"); // no signal returned } //+------------------------------------------------------------------+ //| send order | //+------------------------------------------------------------------+ int sendorder(int cmd,double lots,double prc,double sl,double tp,color warna) { return(OrderSend(Symbol(),cmd,lots,prc,2,sl,tp,"",MagicNumber,0,warna)); } //+------------------------------------------------------------------+ //| trailing stop | //+------------------------------------------------------------------+ void trailingstop() // we check our opened order to see { // posibility to move its stoploss double stoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL); // stoplevel for(int i=OrdersTotal()-1; i>=0; i--) // lets scan all order and position { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); // is this our order? if(OrderSymbol()!=Symbol() || // if symbol of order didn't match OrderMagicNumber()!=MagicNumber) // with current chart symbol continue; // or the magic numb of order // didn't match with our magic // number, it is not our's if(OrderType()==OP_BUY) // order type need to be identified { // in order price selection (bid or ask) if( MathAbs(OrderTakeProfit()-OrderStopLoss())<=2*stoplevel*pt ) break; // we calculate range between SL & TP // to avoid posible error if( Bid>=OrderStopLoss()+(StopLoss+TrailingStop)*pt ) // common price calculation { OrderModify( // moving stoploss OrderTicket(), OrderOpenPrice(), OrderStopLoss()+ TrailingStop*pt, OrderTakeProfit(), CLR_NONE); } } if(OrderType()==OP_SELL) { if( MathAbs(OrderTakeProfit()-OrderStopLoss())<=2*stoplevel*pt ) break; if( Ask<=OrderStopLoss()-(StopLoss+TrailingStop)*pt ) // common price calculation { OrderModify( // moving stoploss OrderTicket(), OrderOpenPrice(), OrderStopLoss()- TrailingStop*pt, OrderTakeProfit(), CLR_NONE); } } } } //+------------------------------------------------------------------+ //| move to break event | //+------------------------------------------------------------------+ void breakevent() // we check our opened order to see { // posibility to move its stoploss double stoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL); // stoplevel for(int i=OrdersTotal()-1; i>=0; i--) // lets scan all order and position { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); // is this our order? if(OrderSymbol()!=Symbol() || // if symbol of order didn't match OrderMagicNumber()!=MagicNumber) // with current chart symbol continue; // or the magic numb of order // didn't match with our magic // number, it is not our's if(OrderType()==OP_BUY) // order type need to be identified { // in order price selection (bid or ask) if( OrderStopLoss()>=OrderOpenPrice() // common calculation ) break; if( Bid>=OrderOpenPrice()+(stoplevel+LockedPips)*pt ) // common price calculation { OrderModify( // moving stoploss OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+ LockedPips*pt, OrderTakeProfit(), CLR_NONE); } } if(OrderType()==OP_SELL) { if( OrderStopLoss()<=OrderOpenPrice() // common calculation ) break; if( Ask<=OrderOpenPrice()-(stoplevel+LockedPips)*pt ) // common price calculation { OrderModify( // moving stoploss OrderTicket(), OrderOpenPrice(), OrderOpenPrice()- LockedPips*pt, OrderTakeProfit(), CLR_NONE); } } } } //+------------------------------------------------------------------+ //| order management | //+------------------------------------------------------------------+ int ordermanagement() // we manage our orders here { if(ordercount()==0) // when there is no opened orders { if(getsignal()=="buy") // when buy signal is appeared { if(sendorder(OP_BUY,mylot(), // we send our buy order into Ask,Ask-StopLoss*pt, // broker's server then we out Ask+TakeProfit*pt, // from this cycle to avoid Blue)>0) return(0); // errors possibility } if(getsignal()=="sell") // same procces as buy signal { if(sendorder(OP_SELL,mylot(), Bid,Bid+StopLoss*pt, Bid-TakeProfit*pt, Red)>0) return(0); } } if(TrailingStop>0) trailingstop(); // we calling trailing stop function // if TrailingStop value bigger than 0 if(MoveToBreakEvent) breakevent(); // we calling breakevent function here return(0); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- if(Digits==3 || Digits==5) pt=10*Point; // when use at broker with 5 digits else pt=Point; // pricing, this function is useful double stoplevel; // minimal pips for stop stoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL); // get broker's stoplevel if(StopLoss<=stoplevel) StopLoss=stoplevel; // we compare our StopLoss with // stoplevel and adjust it when error occured if(TakeProfit<=stoplevel) TakeProfit=stoplevel; // we compared our TakeProfit // as we compared our StopLoss //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- Comment(''); //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if(Hour()<StartHour) // when time to trade is not coming yet { // let user now Comment("\nTrade time is not coming yet.."); // and return(0); // we just stop here } if(Hour()>EndHour) // when time to trade is over { // let user know Comment("\nTrade time is over..."); // and return(0); // we just stop here } //---- Comment(""); // no comment needed ordermanagement(); // we calling order management funtion here //---- return(0); // we out of our cycle when everything done } //+------------------------------------------------------------------+
Programming - editing - modification EA, Script or Indicator for MT4 OR MT5 ---- Trading on the Forex market involves substantial risks, including complete possible loss of funds and other losses and is not suitable for all members. Client should make an independent judgments as to whether trading is appropriate for him/her in light of his/her financial condition, investment experience, risk tolerance and other factors.
Tuesday, 18 September 2012
Ayo bikin EA bersama Totom - part 6
Hasil EA .... Another Martingale....
Subscribe to:
Post Comments (Atom)
Hello Ya'll,
ReplyDeleteI've attached a list of the highest ranking forex brokers:
1. Most Recommended Forex Broker
2. eToro - $50 min. deposit.
Here is a list of the best forex tools:
1. ForexTrendy - Recommended Odds Software.
2. EA Builder - Custom Strategies Autotrading.
3. Fast FX Profit - Secret Forex Strategy.
I hope you find these lists helpful.
GPS robot [10X increase of the deposit and investor access]
ReplyDeleteI just got done with a webinar with Mark and his partner, Antony, two days ago and it was AWESOME.
During the webinar MARK and ANTONY shared their secrets to success and answered questions about their new release of the GPS Forex Robot that CAME OUT TODAY!
Forex Trendy is a sophisticated application capable of recognizing the most reliable continuation chart patterns. It scans through all the forex pairs, on all time frames and analyzes every possible breakout.
ReplyDelete