| New signals service! | |
|
|||||||
| Register in Forex TSD! | |
|
Trading Systems Leaders in this forum (automated trading systems) are winning more than 3000 pips in a month (30000$ investing one lot every time). Click here to register and get more information |
|
![]() |
|
|
LinkBack | Thread Tools | Display Modes |
|
|||
|
Quote:
extern int MagicNumber = 1001; extern bool EachTickMode = False; extern double Lots = 0.01; extern int Slippage = 4; extern bool StopLossMode = True; extern int StopLoss = 70; extern bool TakeProfitMode = True; extern int TakeProfit = 300; extern bool TrailingStopMode = True; extern int TrailingStop = 25; extern double MaximumRisk =0;//0.15 extern double DecreaseFactor =3; extern int MaxOrders = 3000; extern bool UseHourTrade = False; extern int FromHourTrade = 8; extern int ToHourTrade = 18; #define SIGNAL_NONE 0 #define SIGNAL_BUY 1 #define SIGNAL_SELL 2 #define SIGNAL_CLOSEBUY 3 #define SIGNAL_CLOSESELL 4 int BarCount; int Current; bool TickCheck = False; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { BarCount = Bars; if (EachTickMode) Current = 0; else Current = 1; return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if (UseHourTrade){ if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) { Comment("Time for trade has not come else!"); return(0); } } int Order = SIGNAL_NONE; int Total, Ticket; double StopLossLevel, TakeProfitLevel; int digit = MarketInfo(Symbol(),MODE_DIGITS); if (EachTickMode && Bars != BarCount) EachTickMode = False; Total = OrdersTotal(); Order = SIGNAL_NONE; //+------------------------------------------------------------------+ //| Signal Begin | //+------------------------------------------------------------------+ double sig_buy = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 0, 0); double sig_sell = iCustom(NULL, 0, "Slope Direction Line",40, 2, 0, 1, 0); double Sg=iCustom(NULL,0,"RSIFilter_v1",5,5,0,1); if (sig_buy>0 && Sg>0) Order = SIGNAL_BUY; if (sig_sell>0 && Sg<0 ) Order = SIGNAL_SELL; //+------------------------------------------------------------------+ //| Signal End | //+------------------------------------------------------------------+ //Buy if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { if(ScanTrades() < MaxOrders) { //Check free margin if (AccountFreeMargin() < (1000 * Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } StopLossLevel = Ask - StopLoss * Point; TakeProfitLevel = Ask + TakeProfit * Point; Ticket = OrderSend(Symbol(), OP_BUY, LotsOptimized(), NormalizeDouble(Ask,digit), Slippage, NormalizeDouble(StopLossLevel,digit), NormalizeDouble(TakeProfitLevel,digit), "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue); if(Ticket > 0) { if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) Print("BUY order opened : ", OrderOpenPrice()); else Print("Error opening BUY order : ", GetLastError()); } if (EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } } //Sell if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { if(ScanTrades() < MaxOrders) { //Check free margin if (AccountFreeMargin() < (1000 * Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } StopLossLevel = Bid + StopLoss * Point; TakeProfitLevel = Bid - TakeProfit * Point; Ticket = OrderSend(Symbol(), OP_SELL, LotsOptimized(), NormalizeDouble(Bid,digit), Slippage, NormalizeDouble(StopLossLevel,digit), NormalizeDouble(TakeProfitLevel,digit), "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink); if(Ticket > 0) { if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) Print("SELL order opened : ", OrderOpenPrice()); else Print("Error opening SELL order : ", GetLastError()); } if (EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } } //Check position for (int i = 0; i < Total; i ++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) { if(OrderType() == OP_BUY && OrderMagicNumber()==MagicNumber ) { //Close if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen); if (EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } //Trailing stop if(TrailingStopMode && TrailingStop > 0) { if(Bid - OrderOpenPrice() > Point * TrailingStop) { if(OrderStopLoss() < Bid - Point * TrailingStop) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen); if (!EachTickMode) BarCount = Bars; return(0); } } } } else { if(OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber) { //Close if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange); if (EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } //Trailing stop if (TrailingStopMode && TrailingStop > 0) { if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) { if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange); if (!EachTickMode) BarCount = Bars; return(0); } } } }} } } if (!EachTickMode) BarCount = Bars; return(0); } int ScanTrades() { int total = OrdersTotal(); int numords = 0; for(int cnt=0; cnt<total; cnt++) { OrderSelect(cnt, SELECT_BY_POS); if(OrderSymbol() == Symbol() && OrderType()<=OP_SELLSTOP && OrderMagicNumber() == MagicNumber) numords++; } return(numords); } //bool ExistPositions() { // for (int i=0; i<OrdersTotal(); i++) { // if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { // if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { // return(True); // } // } // } // return(false); //} double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //---- select lot size if(MaximumRisk>0)lot=NormalizeDouble(Lots*AccountF reeMargin()*MaximumRisk/1000.0,1); //---- calcuulate number of losses orders without a break if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==fals e) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue; //---- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //---- return lot size if(lot<0.1) lot=0.1; return(lot); } //+------------------------------------------------------------------+ |
|
||||
|
I'm doing a backtest now only with the RSIFilter, I do use the RSIMixFilter few posts ago in this thread, I published that indicator, and I do get BUYS and SELLS, so the logic to do the orders BUY and SELL are ok, the issue is with your iCustom signals...
RSIMixFilter, is not in this thread, sorry, it's here ASK Quote:
Last edited by IN10TION; 06-10-2008 at 08:12 AM. |
|
||||
|
I did some backtesting, EURUSD H1 from April 2007 till now, with this RSIMixFilter only...
Has to be 90% modelling quality, don't know why it doesn't show. Quote:
Last edited by IN10TION; 06-10-2008 at 08:25 AM. |
|
|||
|
Quote:
double Sg=iCustom(NULL,0,"RSIFilter_v1",5,5,0,1); if ( Sg>0) Order = SIGNAL_BUY; if (Sg<0 ) Order = SIGNAL_SELL; |
|
|||
|
Quote:
FerruFx
__________________
THE HEART of FOREX & THE PROBABILITY METER - Trade with 100% confidence and ... Stress Less!!! Coding services: Experts Advisors, indicators, alerts, etc ... more info by PM NEW: video presentation of the Probability Meter ... 24hrs action on the website |
![]() |
| Bookmarks |
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| How to code this? | iscuba11 | Metatrader 4 mql 4 - Development course | 1 | 08-03-2007 04:22 PM |