//+------------------------------------------------------------------+ //| FT_BillWillams_Trader.mq4 | //| FORTRADER.RU | //| http://FORTRADER.RU | //+------------------------------------------------------------------+ #property copyright "FORTRADER.RU" #property link "http://FORTRADER.RU" extern string FT1="------Íàñòðîéêè ôðàêòàëà:----------"; extern int CountBarsFractal=5;//êîëè÷åñòâî áàðîâ èç êîòîðûõ ñîñòîèò ôðàêòàë extern int ClassicFractal=1; //âêëþ÷åíèå âûêëþ÷åíèå êëàññè÷åñêîãî ïàòòåðíà extern int MaxDistance=1000;//âêëþ÷åíèå êîíòðîëÿ ðàññòîÿíèÿ îò çåëåíîé ëèíèè äî òî÷êè âõîäà extern string FT2="------Íàñòðîéêè òèïà ïðîáîÿ ôðàêòàëà:----------"; extern int indent=1; //êîëè÷åñòâî ïóíêòîâ äëÿ îòñòóïà îò ìàêñèìóìà è ìèíèìóìà extern int TypeEntry=2; //òèï âõîäà ïîñëå ïðîáîÿ ôðàêòàëà 1 - íà òåêóùåì áàðå 2 - íà áàðå çàêðûòèÿ 3 íà îòêàòå ê òî÷êå âõîäà ïîñëå ïðîáîÿ extern int RedContol=1; //êîíòðîëèðîâàòü íàõîäèòñÿ ëè ïðîáîéíàÿ öåíà âûøå íèæå óðîâíÿ êðàñíîé ëèíèè extern string FT3="------Íàñòðîéêè àëëèãàòîðà:----------"; extern int jaw_period=13; // - Ïåðèîä óñðåäíåíèÿ ñèíåé ëèíèè (÷åëþñòè àëëèãàòîðà). extern int jaw_shift=8; // - Ñìåùåíèå ñèíåé ëèíèè îòíîñèòåëüíî ãðàôèêà öåíû. extern int teeth_period=8; // - Ïåðèîä óñðåäíåíèÿ êðàñíîé ëèíèè (çóáîâ àëëèãàòîðà). extern int teeth_shift=5; // - Ñìåùåíèå êðàñíîé ëèíèè îòíîñèòåëüíî ãðàôèêà öåíû. extern int lips_period=5; // - Ïåðèîä óñðåäíåíèÿ çåëåíîé ëèíèè (ãóá àëëèãàòîðà). extern int lips_shift=3; // - Ñìåùåíèå çåëåíîé ëèíèè îòíîñèòåëüíî ãðàôèêà öåíû. extern int ma_method=0; //- îò 0 äî 3 ìåòîä óñðåäíåíèÿ. Ìîæåò áûòü ëþáûì èç çíà÷åíèé ìåòîäîâ ñêîëüçÿùåãî ñðåäíåãî (Moving Average). extern int applied_price=4; // - îò 0 äî 6 - Èñïîëüçóåìàÿ öåíà. Ìîæåò áûòü ëþáîé èç öåíîâûõ êîíñòàíò. extern string FT4="-------Íàñòðîéêè êîíòðîëÿ òðåíäà ïî àëëèãàòîðó:----------"; extern int TrendAligControl=0; // âêëþ÷åíèå êîíòðîëÿ òðåíäà ïî àëèãàòîðó extern int jaw_teeth_distense=10; //ðàçíèöà ìåæäó çåëåíîé è êðàñíîé extern int teeth_lips_distense=10;//ðàçíèöà ìåæäó êðàñíîé è ñèíèåé extern string FT5="-------Íàñòðîéêè êîíòðîëÿ çàêðûòèÿ ñäåëêè:----------"; extern int CloseDropTeeth=2; //Âêëþ÷åíèå çàêðûòèÿ ñäåëêè ïðè êîñàíèè èëè ïðîáîå ÷åëþñòè. 0 - îòêëþ÷åíèå 1 - ïî êàñàíèþ 2 ïî çàêðûòèþ áàðà extern int CloseReversSignal=2;//Âêëþ÷åíèå çàêðûòèÿ ñäåëêè ïðè 1- îáðàçîâàíèè îáðàòíîãî ôðàêòàëà 2 - ïðè ñðàáàòûâàíèè îáðàòíîãî ôðàêòàëà 0 âûêëþ÷åíî extern string FT6="-------Íàñòðîéêè ñîïðîâîæäåíèÿ StopLoss ñäåëêè:----------"; extern int TrailingGragus=1; //Âêëþ÷åíèå òðåéëèíã ñòîïà ïî öåíîâîìó ãðàäóñó íàêëîíà, åñëè ñèëüíûé óãîë òî òðåéëèíã ïî çåëåíîé, åñëè ìàëûé óãîë òî òðåéëèíã ïî êðàñíîé extern int smaperugol=5; extern int raznica=5; extern string FT7="-------Íàñòðîéêè StopLoss è TakeProfit èáüåìà ñäåëêè:----------"; extern double StopLoss=50; extern double TakeProfit=50; extern double Lots=0.1; int start() { ClassicFractal(); return(0); } double oldopb,opb,ops,oldops, otkatb,otkats; int fractalnew,vpravovlevo,numsredbar,colish; int ClassicFractal() { int buy,sell;double sl,tp; //óïðàâëåíèå ïîçàìè ClassicFractalPosManager(); buy=0;sell=0; for(int i=0;i<OrdersTotal();i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderType()==OP_BUY ){buy=1;} if(OrderType()==OP_SELL ){sell=1;} } //íàéäåì ñêîüëêî ñìîòðåòü âïðàâî è â ëåâî vpravovlevo=(CountBarsFractal-1)/2; numsredbar=(CountBarsFractal-vpravovlevo); colish=numsredbar-1; /*----------------------------------------ÏÎÊÓÏÊÀ------------------------------------------*/ //íàéäåì ôðàêòàë íà ïîêóïêó if(High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,numsredbar+1)] && High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,1)] && (RedContol(Close[1],0)==true && RedContol==1)) { opb=NormalizeDouble(High[numsredbar]+indent*Point,4); } //ïðîâåðêà âõîäà íà êàñàíèè èëè ïî çàêðûòèþ áàðà if(buy==0&& ((Ask>opb && TypeEntry==1 ) || (Close[1]>opb && TypeEntry==2)) && opb!=oldopb && MaxDistance(opb)==true && opb>0 && ((RedContol(Close[1],0)==true && RedContol==1) || RedContol==0) && ((TrendAligControl(0)==true && TrendAligControl==1) || TrendAligControl==0)) {oldopb=opb; sl=NormalizeDouble(Ask-StopLoss*Point,4); tp=NormalizeDouble(Ask+TakeProfit*Point,4); OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"FORTRADER.RU",16384,10,Green); } /*------------------------------------------ÏÐÎÄÀÆÀ----------------------------------------*/ //íàéäåì ôðàêòàë íà ïðîäàæó if(Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,numsredbar+1)] && Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,0)] && (RedContol(Close[1],1)==true && RedContol==1) ) { ops=NormalizeDouble(Low[numsredbar]-indent*Point,4); } //ïðîâåðêà âõîäà íà êàñàíèè èëè ïî çàêðûòèþ áàðà if(sell==0&& ( (Bid<ops && TypeEntry==1) || (Close[1]<ops && TypeEntry==2)) && oldops!=ops && MaxDistance(ops)==true && ((RedContol(Close[1],1)==true && RedContol==1) ||RedContol==0) && ((TrendAligControl(1)==true && TrendAligControl==1) || TrendAligControl==0)) { oldops=ops; sl=NormalizeDouble(Bid+StopLoss*Point,4); tp=NormalizeDouble(Bid-TakeProfit*Point,4); OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,"FORTRADER.RU",16384,10,Green); } return(0); } bool MaxDistance(double entryprice) { double lips=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,1); if(MathAbs(entryprice-lips)<MaxDistance*Point){return(true);} return(false); } bool RedContol(double entryprice,int type) { double teeth=iMA(NULL,0,teeth_period,teeth_shift,ma_method,applied_price,1); if(entryprice>teeth && type==0){return(true);} if(entryprice<teeth && type==1){return(true);} return(false); } bool TrendAligControl(int type) { double teeth=iMA(NULL,0,teeth_period,teeth_shift,ma_method,applied_price,1); double lips=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,1); double jaw=iMA(NULL,0,jaw_period,jaw_shift,ma_method,applied_price,1); if(type==0 && lips-teeth>teeth_lips_distense*Point && teeth-jaw>jaw_teeth_distense*Point ){return(true);} if(type==1 && teeth-lips>teeth_lips_distense*Point && jaw-teeth>jaw_teeth_distense*Point ){return(true);} return(false); } int ClassicFractalPosManager() {int i,buy,sell; double jaw=iMA(NULL,0,jaw_period,jaw_shift,ma_method,applied_price,1); double teeth=iMA(NULL,0,teeth_period,teeth_shift,ma_method,applied_price,1); double lips=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,1); double lipsl=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,2); double sma=iMA(NULL,0,smaperugol,0,MODE_SMA,PRICE_CLOSE,1); double smal=iMA(NULL,0,smaperugol,0,MODE_SMA,PRICE_CLOSE,2); buy=0;sell=0; for( i=0;i<OrdersTotal();i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderType()==OP_BUY ){buy=1;} if(OrderType()==OP_SELL ){sell=1;} } for( i=1; i<=OrdersTotal(); i++) { if (OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && ((CloseDropTeeth==1 && Bid<=jaw ) || (CloseDropTeeth==2 && Close[1]<=jaw ))) { OrderClose(OrderTicket(),Lots,Bid,3,Violet); return(0); } } if (OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && ((CloseReversSignal==1 && Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,numsredbar+1)] && Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,0)] ) ||(CloseReversSignal==2 && sell==1 ))) { OrderClose(OrderTicket(),Lots,Bid,3,Violet); return(0); } } if (OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && TrailingGragus==1 && lips-lipsl>sma-smal && OrderProfit()>0) { if(OrderStopLoss()<lips) { OrderModify(OrderTicket(),OrderOpenPrice(),lips,OrderTakeProfit(),0,White); return(0); } } } if (OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && TrailingGragus==1 && lips-lipsl<=sma-smal && OrderProfit()>0) { if(OrderStopLoss()<teeth || lips>teeth) { OrderModify(OrderTicket(),OrderOpenPrice(),teeth,OrderTakeProfit(),0,White); return(0); } } } if (OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_SELL && ((CloseDropTeeth==1 && Ask>=jaw ) || (CloseDropTeeth==2 && Close[1]>=jaw ))) { OrderClose(OrderTicket(),Lots,Ask,3,Violet); return(0); } } if (OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_SELL && ((CloseReversSignal==1 && High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,numsredbar+1)] && High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,1)]) || (CloseReversSignal==2 && buy==1 ))) { OrderClose(OrderTicket(),Lots,Ask,3,Violet); return(0); } } if (OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_SELL && TrailingGragus==1 && lipsl-lips<smal-sma && OrderProfit()>0) { if(OrderStopLoss()>lips) { OrderModify(OrderTicket(),OrderOpenPrice(),lips,OrderTakeProfit(),0,White); return(0); } } } if (OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_SELL && TrailingGragus==1 && lipsl-lips>smal-sma && OrderProfit()>0) { if(OrderStopLoss()>teeth || lips<teeth) { OrderModify(OrderTicket(),OrderOpenPrice(),teeth,OrderTakeProfit(),0,White); return(0); } } } } }
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Indicator Curves created:
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
Other Features: