Jump to content

Welcome to the new Traders Laboratory! Please bear with us as we finish the migration over the next few days. If you find any issues, want to leave feedback, get in touch with us, or offer suggestions please post to the Support forum here.

tradingbigboy

Members
  • Content Count

    5
  • Joined

  • Last visited

Posts posted by tradingbigboy


  1. Hi hth,

     

    Yes I'm using at minimum 2 different time frames on a chart plus another symbol as I'm doing some divergence analysis as well. In fact for some reason one of my indies won't run with a forex and stock on the same chart so have to run that in a different chart so it gets complicated and yes I would like to figure out how to have this data wherever I need it.

     

    Perhaps it needs to be a OOEL method placed in a function?

     

    Thanks for your help!

    TBB


  2. Thank HTH,

     

    So before I go down this path, let me ask a few questions about methods. First they must be called in the analysis or strategy and the code must be placed there, yes?

     

    If so, then the analysis or strategy that seeks to utilize multiple time frames must have that time frame as a 2nd symbol on the chart, correct?

     

    OR, can a method in a different chart somehow share info with an analysis or strategy on a different chart using some type of global variables in this method, or would it end up also using the global dictionary to accomplish this??

     

    Thank you!! The easylanguage helps on the internet rarely give help to programming in the new OOP additions to easylanguage so there are almost no examples of how to do this stuff.

     

    TTB


  3. Tradewinds,

     

    So is a vector available to different windows such that an indicator's vector values are also available to a strategy? Or is this dependent on making the values of the method global dictionary values?

    Thanks,

    TBB


  4. Hi hth!

    Thank you so much for your reply. I figured out how to use the Global Dictionary to share values but need to rework this code for ZigZags as I need to reference values of it BEFORE the lastbaronchart in order to use values in strategies etc. I can take the lastbaronchart and uncomment it BUT it gets VERY expensive in computation to do this each bar and really shouldn't be calculating always from the beginning but should retain values from past calculations. I don't know how this is done in easy langauge but I'm sure you know. Yes I would love to first make it efficient THEN put it into a method as you say but I'm not a OOP guy. In fact I switched back to easy language partly because Java was killing me. I did manage to port this zigzag over correctly and thought I was golden. :( Anyway thank you so much for your help here.

     

    // ZigZag Best Algorithm
    inputs:
       extDepth(12),
       extDeviation(5),
       extBackstep(3);
    
    variables:
    int whatlookfor(0),
    int lasthighpos(0),
    int lastlowpos(0),
       double val(0.0),
       double res(0.0),
       int shift(0),
       int shiftago(0),
       int back(0),
    int j(0),
    double lastlow(0),
    double lasthigh(0),
    double curlow(0),
    double curhigh(0), 
    double instrPips(0.0001),
    double zigzagago(0),
    zigzagagobar(0),
    double zzupstartpr(0),
    zzupstartbar(0),
    double zzdnstartpr(0),
    zzdnstartbar(0), 
    IDup(0),
    IDdn(0),
    double Dnfibhighpr(0.0),
    double Dnfiblowpr(0.0),
    Dnfibstartbar(0),
    double Upfibhighpr(0.0),
    double Upfiblowpr(0.0),
    Upfibstartbar(0);	
    Arrays:
    Double lowMapBuffer[](0.0),
    Double highMapBuffer[](0.0),
    Double zigzagBuffer[](0.0);	
    
    If LastBarOnChart then Begin
    //If Currentbar=0 then Begin
       Array_SetMaxIndex(lowMapBuffer, BarNumber+1);
       Array_SetMaxIndex(highMapBuffer, BarNumber+1);
       Array_SetMaxIndex(zigzagBuffer, BarNumber+1);
       // initialize array each time through
       Value40=0;
       While Value40 <= BarNumber+1 begin
       	lowMapBuffer[Value40]=0.0;
       	highMapBuffer[Value40]=0.0;
       	zigzagBuffer[Value40]=0.0;
       	Value40=Value40+1;
       End;
    
       IDdn=0;
    zzdnstartpr=0;
    zzdnstartbar=0;
    IDup=0;
    zzupstartpr=0;
    zzupstartbar=0;
    zigzagago=0;
    zigzagagobar=0;
    instrPips= 1 Point;
    Value2 = MinMove / PriceScale;
    //print(date," ",time," instrPips = ",instrPips:0:4," minmove/pricescale = ",Value2:0:4);
    
       While TL_Exist(TL_GetFirst(1)) begin
       	value50 = TL_GetFirst(1);
       	Value51 = TL_Delete(value50);
       end;
    
    
    For shift = (1 + extDepth) to Currentbar Begin 
    	//If Currentbar = 1 then Begin
    	shiftago = Currentbar - shift;
    	///    Lows
    	val = Low[shiftago];
    //print(date[shiftago]," ",time[shiftago]," shiftago = ",shiftago," shift = ",shift," Low shiftago = ",Low[shiftago]:0:4);
    	For j = (shift-1) Downto (shift - extDepth) Begin
    		Value2 = Currentbar - j;
    		val = MinList(val, Low[Value2]);
    //If shift=13 then print(date[Value2]," ",time[Value2]," J = ",J," Shift - 1 = ",shift-1," shift - extdepth = ",shift-extDepth," val = ",val);
    	End; 
    	If (val = lastlow) then Begin
    		val = 0.0;
    	End
    	Else Begin
    		lastlow = val;
    		If (Low[shiftago] - val > extDeviation * instrPips) then Begin
    			val = 0.0;
    		End
    		Else Begin
    			For back = 1 to extBackstep Begin
    			    value3=shift-back;
    			    value4=Currentbar-value3;
    				// res=lowMapBuffer[shift - back];
    				res=lowMapBuffer[value4];
    				If res <> 0 and res > val then Begin
    					// lowMapBuffer[shift - back] = 0.0;
    			     lowMapBuffer[value4] = 0.0;
    				End;
    			End;
    		End;
    	End;		
    	If Low[shiftago] = val then Begin
    		//lowMapBuffer[shift] = val;
    		lowMapBuffer[shiftago] = val;
    	End
    	Else Begin
    		//lowMapBuffer[shift] = 0.0;
    		lowMapBuffer[shiftago] = 0.0;
    	End;
    	//   Highs now
    	val = High[shiftago];
    	For j = (shift-1) Downto (shift - extDepth) Begin
    		Value2 = Currentbar - J; 
    		val = MaxList(val, High[Value2]);
    	End; 
    	If val = lasthigh then Begin
    		val = 0.0;
    	End
    	Else Begin
    		lasthigh = val;
    		If (val - High[shiftago] > extDeviation * instrPips) then Begin
    			val = 0.0;
    		End
    		Else Begin
    			For back = 1 to extBackstep Begin
    				value3= shift-back;
    				Value4 = Currentbar - value3;
    				//res=highMapBuffer[shift-back];
    				res=highMapBuffer[value4];
    				If res <> 0 and res < val then Begin
    					//highMapBuffer[shift - back] = 0.0;
    					highMapBuffer[value4] = 0.0;
    				End;
    			End;
    		End;
    	End; 
    	If High[shiftago] = val then Begin
    		//highMapBuffer[shift] = val;
    		highMapBuffer[shiftago] = val;
    		End
    	Else Begin
    		//highMapBuffer[shift] = 0.0;
    		highMapBuffer[shiftago] = 0.0;
    	End;
    End;
    ////   FINAL CUTTING
    If whatlookfor = 0 then Begin
    	lastlow = 0;
    	lasthigh = 0;
    End
    Else Begin
    	lastlow = curlow;
    	lasthigh = curhigh;
    End;
    For shift = (1 + extDepth) to Currentbar Begin // 2nd loop through
    
    	shiftago = Currentbar - shift;
    	Switch (whatlookfor)
    	Begin
    	Case 0:  // look for peak or lawn 
    		If highMapBuffer[shiftago] <> 0 then Begin
    			lasthigh = High[shiftago];
    			lasthighpos = shiftago;
    			whatlookfor = -1;
    			zigzagBuffer[shiftago] = lasthigh;
    		End;
    		If lowMapBuffer[shiftago] <> 0 then Begin
    			lastlow = Low[shiftago];
    			lastlowpos = shiftago;
    			whatlookfor = 1;
    			zigzagBuffer[shiftago] = lastlow;
    		End;
    		Break;
    	Case 1:   // look for peak
    		If (lowMapBuffer[shiftago] <> 0 And lowMapBuffer[shiftago] < lastlow And highMapBuffer[shiftago] = 0.0) then Begin
    			zigzagBuffer[lastlowpos] = 0.0;
    			lastlowpos = shiftago;
    			lastlow = lowMapBuffer[shiftago];
    			zigzagBuffer[shiftago] = lastlow;
    		End;
    		If (highMapBuffer[shiftago] <> 0 And lowMapBuffer[shiftago] = 0.0) then Begin
    			lasthigh = highMapBuffer[shiftago];
    			lasthighpos = shiftago;
    			zigzagBuffer[shiftago] = lasthigh;
    			whatlookfor = -1;
    		End;
    		Break;	
    	Case -1:  // look for lawn
    		If (highMapBuffer[shiftago] <> 0 And highMapBuffer[shiftago] > lasthigh And lowMapBuffer[shiftago] = 0.0) then Begin
    			zigzagBuffer[lasthighpos] = 0.0;
    			lasthighpos = shiftago;
    			lasthigh = highMapBuffer[shiftago];
    			zigzagBuffer[shiftago] = lasthigh;
    		End;
    		If (lowMapBuffer[shiftago] <> 0 And highMapBuffer[shiftago] = 0.0) then Begin
    			lastlow = lowMapBuffer[shiftago];
    			lastlowpos = shiftago;
    			zigzagBuffer[shiftago] = lastlow;
    			whatlookfor = 1;
    		End;
    		Break;
    	End;  // end of case begin
    If zigzagBuffer[shiftago] <> 0.0 then Begin
    	If zigzagago > 0.0 then begin
    		If zigzagBuffer[shiftago] > zigzagago then begin  // zigzag is up
    		    IDdn=0;
    		    If zzupstartpr=0 then begin
    		    	// set begin zigzag vars
    		    	zzupstartpr = zigzagago;
    		    	zzupstartbar = zigzagagobar;
    
    		    	//  reset zzdn vars
    		    	zzdnstartpr=0;
    		    	zzdnstartbar=0;
    		    End;
    	    	If IDup <> 0 then TL_Delete(IDup);
    		    IDup = TL_New(date[zzupstartbar],time[zzupstartbar], zzupstartpr, date[shiftago], Time[shiftago], zigzagBuffer[shiftago]);
    			If IDup > 0 then Begin
    				TL_SetColor(IDup, Green);
    				TL_SetSize(IDup, 1);
    			End;
    
    
    
    		End  /// end of zigzag is up
    
    		Else Begin	// zigzag is down
    		    IDup=0;
    ;
    			If zzdnstartpr = 0 then begin
    				// set begin ZZ vars
    				zzdnstartpr = zigzagago;
    				zzdnstartbar = zigzagagobar;
    				// reset ZZUP vars
    				zzupstartpr=0;
    				zzupstartbar=0;
    			End;
    
    		    If IDdn <> 0 then TL_Delete(IDdn);
    		    IDdn = TL_New(date[zzdnstartbar],time[zzdnstartbar], zzdnstartpr, date[shiftago], Time[shiftago], zigzagBuffer[shiftago]);
    			If IDdn > 0 then begin
    				TL_SetColor(IDdn, Red);
    				TL_SetSize(IDdn, 1);
    			End;
    
    
    		End;
    	End  // endzigzagago <> 0.0
    	Else Begin  //   endzigzagago = 0.0 so this is first on chart
    		//Print("Starting zigzag");
    	End;
    //print(Date[shiftago]," ",Time[shiftago]," ","IDup = ",IDup," IDdn = ",IDdn);
    	zigzagago = zigzagBuffer[shiftago];
    	zigzagagobar = shiftago;
    End;
    //If zigzagBuffer[shiftago] <> 0.0 then Print(Date[shiftago]," ",Time[shiftago]," END - zigzagBuffer[shiftago] = ",zigzagBuffer[shiftago]:0:4," shiftago = ",shiftago);
    End;  // End of For Shift 2nd loop
    End;  // end of lastbaronchart = 1


  5. Hi All,

     

    For the pros in here, I would love for you to tell me if this is possible. I've coded an indicator using a different zigzag algorithm - not TS but the one used by MT4 and Dukas etc. It is coded perfectly and works. It does 2 passes through the data and simply operates ONLY on the lastbar of the chart.

     

    If LastBarOnChart then Begin
       Array_SetMaxIndex(lowMapBuffer, BarNumber+1);
       Array_SetMaxIndex(highMapBuffer, BarNumber+1);
       Array_SetMaxIndex(zigzagBuffer, BarNumber+1);

    etc.

     

    Now I want to make this multi-timeframe and use the zigzag values in strategies etc so am attempting to turn this into a function. I get the function finished and values are all correct. The function has the same structure as the indicator, just doesn't draw TL and stuff. Now I'm trying to get values FROM this function.

     

    The problem is most functions operate per bar from the beginning 1 pass through and spit out values like averages and other stuff. This indicator that pings the function must grab all of its values as well from the last bar on the chart. This would seem like the function must really return an array to the indy/strategy and I'm lost at how to do this.

     

    Here's the inputs I have for the zigzag function:

    inputs:
       extDepth(Numericsimple),  // 12
       extDeviation(Numericsimple),  // 5
       extBackstep(Numericsimple),   // 3
       oshift(Numericref),
       oZZupBeg(numericref),
       oZZupEnd(numericref),
       oZZdnBeg(numericref), 
       oZZdnEnd(numericref);
       Input: oZZ[n](numericarrayRef);

    I'm experimenting here trying to get something to work including a numericarryref but it is not giving values.

     

    In the function itself I have the oZZ being assigned as follows:

    oZZ[n]=zigzagBuffer[shiftago];

     

    In the indicator to test the function I have tried this:

    If LastBarOnChart then begin
    //method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args ) 
    value2 = ZZdukas(12,5,3,shift,oZZupBegval,oZZupEndval,oZZdnBegval,oZZdnEndval,oZZvalsa);
    For Value1 = 0 to 999 begin
    print("oZZvalsa[value1] = ",oZZvalsa[value1]);
    end;

    It all verfies but there is nothing but zeros in the values.

     

    Any help is appreciated!!

    TBB

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.