TURTLE TRADING MT4 indicator conversion to prorealtime
Forums › ProRealTime English forum › ProBuilder support › TURTLE TRADING MT4 indicator conversion to prorealtime
- This topic has 6 replies, 4 voices, and was last updated 4 years ago by Vonasi.
-
-
09/26/2019 at 5:50 PM #108622
Original Turtle Rules:
To trade exactly like the turtles did, you need to set up two indicators representing the main and the failsafe system.
- Set up the main indicator with TradePeriod = 20 and StopPeriod = 10 (A.k.a S1)
- Set up the failsafe indicator with TradePeriod = 55 and StopPeriod = 20 using a different color. (A.k.a S2)
The entry strategy using S1 is as follows
- Buy 20-day breakouts using S1 only if last signaled trade was a loss.
- Sell 20-day breakouts using S1 only if last signaled trade was a loss.
- If last signaled trade by S1 was a win, you shouldn’t trade -Irregardless of the direction or if you traded last signal it or not-
The entry strategy using S2 is as follows:
- Buy 55-day breakouts only if you ignored last S1 signal and the market is rallying without you
- Sell 55-day breakouts only if you ignored last S1 signal and the market is pluging without you
The turtles had a progressive position sizing approach that boosted their winnings. Once a trading decision has been made you should…
- Enter the market with 2% risk. Place stop-loss 2ATR from the opening price.
- If the position moves in your favor 1/2ATR, enter the market again with 2% risk and trail all stop-losses 2ATR from current price.
- If the position moves in your favor 1/2ATR, enter the market again with 2% risk and trail all stop-losses 2ATR from current price.
- If the position moves in your favor 1/2ATR, enter the market again with 2% risk and trail all stop-losses 2ATR from current price.
- Stop adding to positions when 4 positions have been taken. (*** And see money management rule below)
The exit strategy is performed using the dotted line of the indicator:
- Exit longs taken using S1 when price action closes below a 10-day low
- Exit shorts taken using S1 when price action closes above a 10-day high
- Exit longs taken using S2 when price action closes below a 20-day low
- Exit shorts taken using S2 when price action closes avove a 20-day high
The turtles had very strict money management too. Initial position risk was 2%, but it decreased according to the current drawdown.
- If the account had a 10% drawdown, the risk for each trade should decrease a 20%
- If the account had a 20% drawdown, the risk for each trade should decrease a 40%.
- If the account had a 30% drawdown, the risk for each trade should decrease a 60%.
- So, if the account had a N% drawdown, the risk for each trade should decrease N*2%.
Can this be converted to PROREALCODE.
Thank you in advance
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170//+------------------------------------------------------------------+//| TheTurtleTradingChannel.mq4//| Copyright © Pointzero-indicator.com//+------------------------------------------------------------------+#property copyright "Copyright © Pointzero-indicator.com"#property link "http://www.pointzero-indicator.com"//---- indicator settings#property indicator_chart_window#property indicator_buffers 6#property indicator_color1 DodgerBlue#property indicator_color2 Red#property indicator_color3 DarkSlateGray#property indicator_color4 DarkSlateGray#property indicator_color5 DodgerBlue#property indicator_color6 Red#property indicator_width1 3#property indicator_width2 3#property indicator_width3 1#property indicator_width4 1#property indicator_width5 1#property indicator_width6 1#property indicator_style3 STYLE_DOT#property indicator_style4 STYLE_DOT#property indicator_style5 STYLE_DOT#property indicator_style6 STYLE_DOT//---- indicator parametersextern int TradePeriod = 20; // Donchian channel period for trading signalsextern int StopPeriod = 10; // Donchian channel period for exit signalsextern bool Strict = false; // Apply strict entry parameters like the Turtles didextern bool DisplayAlerts = false; // You know...//---- indicator buffersdouble ExtMapBuffer1[];double ExtMapBuffer2[];double ExtMapBuffer3[];double ExtMapBuffer4[];double ExtMapBuffer5[];double ExtMapBuffer6[];double TrendDirection[];//---- internalstatic datetime TimeStamp;static int AlertCount = 1;//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init(){// One more invisible buffer to store trend directionIndicatorBuffers(7);// Drawing settingsSetIndexStyle(0,DRAW_LINE);SetIndexStyle(1,DRAW_LINE);SetIndexStyle(2,DRAW_LINE);SetIndexStyle(3,DRAW_LINE);SetIndexStyle(4,DRAW_ARROW); SetIndexArrow(4,159);SetIndexStyle(5,DRAW_ARROW); SetIndexArrow(5,159);IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));// Name and labelsIndicatorShortName("Turtle Channel ("+ TradePeriod +"-"+ StopPeriod +")");SetIndexLabel(0,"Upper line");SetIndexLabel(1,"Lower line");SetIndexLabel(2,"Longs Stop line");SetIndexLabel(3,"Shorts Stop line");// SetIndexBuffer(4, "Bullish trend change");// SetIndexBuffer(5, "Bearish trend change");// BuffersSetIndexBuffer(0,ExtMapBuffer1);SetIndexBuffer(1,ExtMapBuffer2);SetIndexBuffer(2,ExtMapBuffer3); // Stop level for longsSetIndexBuffer(3,ExtMapBuffer4); // Stop level for shortsSetIndexBuffer(4,ExtMapBuffer5);SetIndexBuffer(5,ExtMapBuffer6);SetIndexBuffer(6,TrendDirection);Comment("Copyright © http://www.pointzero-indicator.com");return(0);}//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start(){// More vars here too...int start = 0;int limit;int counted_bars = IndicatorCounted();// check for possible errorsif(counted_bars < 0)return(-1);// Only check theselimit = Bars - 1 - counted_bars;if(counted_bars==0) limit-=1+1;// Check the signal foreach barfor(int i = limit; i >= start; i--){// Highs and lowsdouble rhigh = iHigh(Symbol(),Period(),iHighest(Symbol(), Period(), MODE_HIGH, TradePeriod,i+1));double rlow = iLow(Symbol(),Period(),iLowest(Symbol(), Period(), MODE_LOW, TradePeriod, i+1));double shigh = iHigh(Symbol(),Period(),iHighest(Symbol(), Period(), MODE_HIGH, StopPeriod,i+1));double slow = iLow(Symbol(),Period(),iLowest(Symbol(), Period(), MODE_LOW, StopPeriod, i+1));// Candle valuedouble CLOSE = iClose(Symbol(),0, i);double HIGH = iHigh(Symbol(),0, i);double LOW = iLow(Symbol(),0, i);// Default behavior is to preserve the trendTrendDirection[i] = TrendDirection[i+1];// It might be recalculating bar zeroExtMapBuffer1[i] = EMPTY_VALUE;ExtMapBuffer2[i] = EMPTY_VALUE;ExtMapBuffer3[i] = EMPTY_VALUE;ExtMapBuffer4[i] = EMPTY_VALUE;ExtMapBuffer5[i] = EMPTY_VALUE;ExtMapBuffer6[i] = EMPTY_VALUE;// Change to uptrendif(((CLOSE > rhigh && i > 0) || (HIGH > rhigh && Strict == true)) && TrendDirection[i+1] != OP_BUY){TrendDirection[i] = OP_BUY;ExtMapBuffer5[i] = rlow;// Change to downtrend} else if(((CLOSE < rlow && i > 0) || (LOW < rlow && Strict == true)) && TrendDirection[i+1] != OP_SELL) {TrendDirection[i] = OP_SELL;ExtMapBuffer6[i] = rhigh;}// Draw linesif(TrendDirection[i] == OP_BUY){ExtMapBuffer1[i] = rlow;ExtMapBuffer3[i] = slow;// Draw lines} else if(TrendDirection[i] == OP_SELL) {ExtMapBuffer2[i] = rhigh;ExtMapBuffer4[i] = shigh;}}// Alertif(TimeStamp != Time[0] && DisplayAlerts == true){if(TrendDirection[1] == OP_SELL && TrendDirection[2] == OP_BUY && AlertCount == 0){Alert("[Turtle Trading "+ TradePeriod +"-"+ StopPeriod +"]["+ Symbol() +"] SELL");} else if (TrendDirection[1] == OP_BUY && TrendDirection[2] == OP_SELL && AlertCount == 0) {Alert("[Turtle Trading "+ TradePeriod +"-"+ StopPeriod +"]["+ Symbol() +"] BUY");}TimeStamp = Time[0];AlertCount = 0;}// Bye Byereturn(0);}09/27/2019 at 8:54 AM #10864809/27/2019 at 9:47 AM #10865409/27/2019 at 11:58 AM #108669Here it is:
12345678910111213141516171819202122232425262728293031323334353637TradePeriod = 20 // Donchian channel period for trading signalsStopPeriod = 10 // Donchian channel period for exit signalsStrict = 0 // Apply strict entry parameters like the Turtles didrhigh = Highest[TradePeriod](high)[1]rlow = Lowest[TradePeriod](low)[1]shigh = Highest[StopPeriod](high)[1]slow = Lowest[StopPeriod](low)[1]// Change to uptrendif(((CLOSE > rhigh ) or (HIGH > rhigh and Strict =1)) and TrendDirection[1] <> 1) thenTrendDirection = 1//ExtMapBuffer5 = rlow// Change to downtrendelsif(((CLOSE < rlow ) or (LOW < rlow and Strict = 1)) and TrendDirection[1] <> -1) thenTrendDirection = -1//ExtMapBuffer6 = rhighendif// Draw linesif(TrendDirection = 1) thentradingline = rlowexitline = slowr=30g=144b=255// Draw lineselsif(TrendDirection = -1) thentradingline = rhighexitline = shighr=255g=0b=0endifreturn tradingline coloured(r,g,b) style(line,4), exitline coloured(168,168,168) style(dottedline,1)09/27/2019 at 7:23 PM #10869212/07/2019 at 8:49 AM #114378Hello Nicolas
I have a question about your code. I do not understand the following code. Why do you write the following or clause: or (HIGH > rhigh and Strict =1). What I not understand, in this code strict is always 0, it will never go to 1. Why do we need this clause: or (HIGH > rhigh and Strict =1).
If it is possible, could you explain me the following parameter, please?
I assume variable TrendDirection is undefined, when I start the Indicator. How is this code working:
If TrendDirection[1] <> 1 then
TrendDirection = 1
endif
Thanks for your effort and help.
Turtle Indicator 20 Day High Donchian channel12345678910111213TradePeriod = 20 // Donchian channel period for trading signalsStopPeriod = 10 // Donchian channel period for exit signalsStrict = 0 // Apply strict entry parameters like the Turtles didrhigh = Highest[TradePeriod](high)[1]rlow = Lowest[TradePeriod](low)[1]shigh = Highest[StopPeriod](high)[1]slow = Lowest[StopPeriod](low)[1]// Change to uptrendif(((CLOSE > rhigh ) or (HIGH > rhigh and Strict =1)) and TrendDirection[1] <> 1) thenTrendDirection = 1//ExtMapBuffer5 = rlow12/07/2019 at 9:48 AM #114379Strict is just a setting that you can set to zero or 1 to turn off or on whether the strategy applies the strict version of the turtle rules or a looser version. The strict version includes consideration of the high and low compared to the Tradeperiod donchian channel when deciding trend direction.
Variables in ProRealCode do not need to be declared and all variables are assumed to be zero until given a different value. So at the close of the first bar of a chart TrendDirection will be zero and so an initial trend direction of 1 or -1 will be set but after that it will just flip between 1 or -1 depending what conditions are met.
-
AuthorPosts
Find exclusive trading pro-tools on