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
Personal Information

First Name
michael

Last Name
jefferson

Country
United States
Trading Information

Vendor
No


Muliple Output Functions Easy Language
tradingbigboy replied to tradingbigboy's topic in Automated Trading
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 
Muliple Output Functions Easy Language
tradingbigboy replied to tradingbigboy's topic in Automated Trading
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 
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

Muliple Output Functions Easy Language
tradingbigboy replied to tradingbigboy's topic in Automated Trading
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 = (shift1) 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 = ",shift1," shift  extdepth = ",shiftextDepth," 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=shiftback; value4=Currentbarvalue3; // 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 = (shift1) 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= shiftback; Value4 = Currentbar  value3; //res=highMapBuffer[shiftback]; 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 
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 multitimeframe 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