/*-----------------------------+ | | | Shared by www.Aptrafx.com | | | +------------------------------*/ //+------------------------------------------------------------------+ //| Fractal ZigZag.mq4 | //| ikovrigin | //| This expert was made from a fractal zig zag indicator created //by ikorigin expert made by bobammax use at your own risk. will work //better on higher time frames,1 hour seems to be the best // but it is your money.I'm not a //programmer. //bobammax | //+------------------------------------------------------------------+ #property copyright "ikovrigin, bobammax" #property link "" #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Green //---- input parameters extern int Level=2; //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; extern double TakeProfit = 25; extern double Lots=1; extern double TrailingStop = 10; extern double InitialStop = 20; extern int slip = 0;//exits only extern double lp = 300; extern double sp = 30; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_SECTION); SetIndexBuffer(0,ExtMapBuffer1); SetIndexEmptyValue(0,0.0); SetIndexStyle(1,DRAW_ARROW); SetIndexBuffer(1,ExtMapBuffer2); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- int PU,PD,Trend=2; PU=0; PD=0; double FU,FD,F; FU=0; FD=0; int shift = Bars-Level; int n; if (shift>Level) shift=shift-Level-1; if (counted_bars==0) while (shift>Level-1) { ExtMapBuffer1[shift]=0; F=Low[shift]; for (n=1; n<=Level; n++) { if (Low[shift+n]<Low[shift] || Low[shift-n]<Low[shift]) F=0; } if (F>0) { if (FD!=0) switch (Trend) { case 1: if (F<FD) { ExtMapBuffer1[PU]=FU; Trend=2; } break; case 2: if (F>FD) { ExtMapBuffer1[PD]=FD; Trend=1; if (PU>=PD) { FU=0; PU=0; } } break; } FD=F; PD=shift; ExtMapBuffer2[PD]=FD; } F=High[shift]; for (n=1; n<=Level; n++) { if (High[shift+n]>High[shift] || High[shift-n]>High[shift]) F=0; } if (F>0) { if (FU!=0) switch (Trend) { case 1: if (F<FU ) { ExtMapBuffer1[PU]=FU; Trend=2; if (PD>=PU) { FD=0; PD=0; } } break; case 2: if (F>FU) { ExtMapBuffer1[PD]=FD; Trend=1; } break; } FU=F; PU=shift; ExtMapBuffer2[PU]=FU; } shift--; } if (Trend==1) ExtMapBuffer1[PU]=FU; else ExtMapBuffer1[PD]=FD; //---- // order section//---------------------------- int OrderForThisSymbol=0; for(int x=0;x<OrdersTotal();x++){ OrderSelect(x, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol()) OrderForThisSymbol++; }//end for if(Trend==2&& OrderForThisSymbol==0){ //Alert("Buy order triggered for "+Symbol()+" on the "+Period()+" minute chart."); int BuyOrderTicket=OrderSend(Symbol(),OP_BUY,Lots,Ask,slip,Ask-(InitialStop*Point),Ask+(TakeProfit*Point),"Buy Order placed at "+CurTime(),0,0,Green); } if(Trend==1 && OrderForThisSymbol==0){ //Alert("Sell order triggered for "+Symbol()+" on the "+Period()+" minute chart."); int SellOrderTicket=OrderSend(Symbol(),OP_SELL,Lots,Bid,slip,Bid+(InitialStop*Point),Bid-(TakeProfit*Point),"Sell Order placed at "+CurTime(),0,0,Red); } { } // ---------------- TRAILING STOP if(TrailingStop>0) { OrderSelect(0, SELECT_BY_POS, MODE_TRADES); if((OrderType() == OP_BUY || OrderType() == OP_BUYSTOP) && (OrderSymbol()==Symbol())) { if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Point*TrailingStop,OrderTakeProfit(),0,Aqua); return(0); } } } } if((OrderType() == OP_SELL || OrderType() == OP_SELLSTOP) && (OrderSymbol()==Symbol())) { if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if(OrderStopLoss()==0.0 || OrderStopLoss()>(Ask+Point*TrailingStop)) { OrderModify(OrderTicket(),OrderOpenPrice (),Ask+Point*TrailingStop,OrderTakeProfit(),0,Aqua); return(0); } } } } } } return(0); //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar
Indicator Curves created:
Implements a curve of type DRAW_SECTION
Implements a curve of type DRAW_ARROW
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy
Other Features: