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.
PeterBrazel
Members-
Content Count
54 -
Joined
-
Last visited
Personal Information
-
First Name
TradersLaboratory.com
-
Last Name
User
-
City
Kialla
-
Country
Australia
-
Gender
Male
-
Occupation
Retired
Trading Information
-
Vendor
No
-
Favorite Markets
EC
-
Trading Years
10
-
Trading Platform
MultiCharts/TS
-
Broker
Mirus
-
Maybe the Government should take back control of the money supply. This is the only way that reform could begin. Right now it is the Central Banks that control Government policy and that policy offers bankers protection against their own greed and incompetence. The result is runaway inflation,unemployment and as already discussed currency devaluation. The only two Presidents of the US who tried to take control of the money supply were assassinated which either directly or indirectly resulted in "business as usual". The Govt continues to blame traders for all the financial woes and want to legislate against traders who are all "bad guys" for causing all this financial strife. Will those who believe anything the Government says please raise their hands!!! In the meantime turn off the tv buy Gold and grow your own vegetables
-
Help Me Understand Who is in Control?
PeterBrazel replied to mikeynero's topic in Technical Analysis
A man with a watch knows what time it is. A man with two watches is never quite sure. Rising prices on a smaller time frame provide an opportunity to sell on a higher time frame where the trend is down etc etc. It is not so much whether the buyers and sellers are in control so much as it is whether you are in control of yourself and your strategy and even then understanding that your strategy is based upon probabilities. -
oops thought I was posting this to the coders forum
-
I recently had a contractor produce a function which is an adjusted swing high swing low function that returns bars that meet certain criteria. I require this to be used on tick charts and the function will be called to extract the bar reference run some simple math calculations and plot the results as text on the chart. I require these calculations to be completed on each bar in realtime as the market progresses. On receiving the function and inserting it into my code I discovered that the values were not updating. My query resulted in the following response from my contractor. "There is a known issue in TradeStation with the LastBarOnChart function. If two bars have the same time, it will run the program from the first time that time is hit, so the last pivot may not show up. This issue only occurs with tick charts and when the time is the same as the time from the previous bar." This is the first time I have heard of any limitations of this kind and I need to have my calculations updating bar by bar. Can somebody verify that this limitation exists and advise if there is a workaround?
-
Thank you for the advice re coding in general. I have changed the terminology of the code to something more meaningful and re-examined what the two different pieces of code were ttrying to achieve, married the two together and achieved a result that looks acceptable to me. Yes there are lots of colours but I find these meaningful. To explain the attached screenshot a rising MACD between the BB's is cyan, above the BB's is blue. A falling MACD between the bands is Magenta and below is red. The BB's change from red to green only when the BB's are expanding. The zero line crossing can be toggled on or off. The zero line changes colour depending on the MACD being above or below.
-
Thanks for your response. I guess this is what happens when you take someone elses code, in this case two different authors code and then try to marry them together and then to make changes. The only outstanding issue with my code is that I am trying to have the Bollinger Bands change [in this case from yellow to a green] colour when the bands are expanding. If they are not expanding then just leave them a yellow color. I agree that using Values 1 through 5 is ambiguous and I should look at changing the code. Value 5 at this point is // Band Width Indicator if Use.XAvg then value5 = XAverage(value1,BBavg) else Value5 = averagefc(value1,BBavg) ; Then later on in the code I am using this to change the color: If Value5>Value5[1] then SetPlotColor[1](3,Expanding); If Value5>Value5[1] then SetPlotColor[1](4,Expanding); /////// plot3(value2,"bband+"); plot4(value3,"bband-"); end; I do need to get an understanding of the code that I took from the site first. I then need to reconstruct this whole thing so that the naming conventions are meaningful to me as you suggest. Cheers
-
Thanks Tams The BB's are not always expanding when the plot changes color. I have attached a screenshot of what I am looking at.
-
I have taken a MACDBB Indicator [posted here] and the MACD band expansion indicator [posted here, made a few changes of my own but am now trying to marry the two of these together. Specifically I want the BB's to change color when they are expanding. I have done this but they do not look quite right so I have miscalculated somewhere. If somebody could take a look at this code it would be greatly apprciated. Thanks [LegacyColorValue = false]; { ************************************************** ******************* MACD-BB MACD Bolinger Banded Last Updated 8/30/2007 Added Up/Down Color to MACD ************************************************** *********************} Input: Use.XAvg(False), PlotCross(True), FastMA( 5), {12 default} SlowMA( 13), { 26 default} price( myprice), PlotBBands(true), SDev( 1.5), { 1.5 default} PlotBBAvg(false), BBavg( 10), { 10 default} Plot0Line(true), UpColor(cyan), UpAbove(darkgreen), DnColor(Magenta), DnBelow(darkred), Shadow(Yellow), Expanding(Green); Vars: BWI(0); value1 = MACD(price,FastMA,SlowMA); value2 = BollingerBand(MACD(price,FastMA,SlowMA),BBavg,SDev); //Upper Band value3 = BollingerBand(MACD(price,FastMA,SlowMA),BBavg,-SDev) ; //Lower Band // Band Width Indicator if Use.XAvg then value5 = XAverage(value1,BBavg) else Value5 = averagefc(value1,BBavg) ; {value5 = Average(value1,BBavg) ; } if value1 > value1[1] and value1 > value2 then begin // Plot1[1](Plot1[1],"MACD",UpAbove); Plot1(value1,"MACD",UpAbove); end else begin if value1 > value1[1] then begin // Plot1[1](Plot1[1],"MACD",UpColor); Plot1(value1,"MACD",UpColor); end else begin if value1 < value1[1] and value1 < value3 then begin // Plot1[1](Plot1[1],"MACD",DnBelow); Plot1(value1,"MACD",DnBelow); end else begin if value1 < value1[1] then begin // Plot1[1](Plot1[1],"MACD",DnColor); Plot1(value1,"MACD",DnColor); end; end; end; end; if Plot0Line = true then begin if value1 < 0 then SetPlotColor(2,Red) else SetPlotColor(2,Blue); Plot2(0,"ZeroLine"); end; if PlotBBands = true then begin //////// If Value5>Value5[1] then SetPlotColor[1](3,Expanding); If Value5>Value5[1] then SetPlotColor[1](4,Expanding); /////// plot3(value2,"bband+"); plot4(value3,"bband-"); end; if PlotBBAvg = true then begin Plot5(value5,"avg"); end; Plot6(value1,"MDShadow"); If PlotCross then begin If Value1[1]<0 and Value1>0 then Plot7(Value1,"CrossUp") else NoPlot(7); If Value1[1]>0 and Value1<0 then Plot8(Value1,"CrossDn") else NoPlot(8); end;
-
Let the chips fall. This is not a Dubai thing. This is a global thing. Greed in everything left completely unchecked for decades. Short term [re election] focused Gov't policies. Gov'ts around the globe have been printing money like its going out of fashion. "Quantitive Easing" ...what a joke. Bailing out Banks and large businesses....gee what happened to Capitalism. The banks have stopped lending money and have, instead invested in the stock market. Unemployment at record highs in most countries. Lying cheating, vertically integrating, dominating greedy Public Companies too numerous to name. One bad fundamental number after another. And now we have Dubai. Its just another detonator. Things need to get worse before any of us can hope that they will get any better. Capitalism has a self cleaning mechanism. Do not consider that the feeble attempts to restrict it will be of any benefit to us. But maybe its different this time. These comments from a cynical old man.
-
I want both the Long Entry and the Short entry price level to be displayed based on a breach of the H or L of a prior bar by x ticks.It all seems to work when I apply the indicatlor until the next bar is formed. It then leaves a trail of the LE and SE for each bar. So your comments about resetting so that only the current bar displays the text is valid. How I achieve it seems to be the issue. If I make the changes you suggest then nothing at all displays. The counter itself with the risk detail works OK but not the LE and the SE. So I am in a spot over this right now. Of course I took the counter from the TS forum and I have quite a bit of stuff that I would like to add to it but all that I want to add has to be treated in this manner. My trades are entered manually on a seperate platform so I want to always have the information readily available to me.
-
Tams, The code that produces the text works fine except that it does not clear when a new bar begins. Attached is a screenshot of the code plotting the first time exactly as it should. I will review your posts tomorrow as there is some small adjustment following your logic that should provide my answer. Thank you for your assistance.
-
Tams, You are a gentleman. When I followed your instructions nothing plotted at all. I believe I understand conceptually what you are saying. Here is the complete code thus far. {===================================================================== NAME: BarCountdownTimer TYPE: Indicator AUTHOR: Bill Conley (AKA Kahuna) - Timer Counter Peter Brazel - Risk, Bossilator and other features. OUTPUT: This countdown timer works on Intrabar, Tick or Volume charts. It displays the Time, Ticks or Volume remaining in a bar as text to the right of the last bar and a user defined portion of the way up the chart (VertTextPct input). It provides an option to display remaining bar as a percent of the bar interval size. It changes color from Normal Color (NormColor input) to Alert Color (AlertColor input) when the bar reaches the Alert level percent (AlertPct input). A TS alert is also triggered which the trader can chose to enable via the TS Alerts tab. This alerts the trader as the bar is ending. INPUTS: VertTextPct - Percent of chart window height at which to display timer (Default: 80) NormColor - Color for normal (non-alert) text display (Default: yellow) AlertColor - Color for alert text display (Default: red) AlertPct - Alert when this percentage of the bar remains (Default: 10), DispMode - Display mode option: 1=Percentage, 2=Time/Ticks/Volume (Default: 2) COMMENTS: For use with intrabar, tick and share bar charts only. For Volume (Sharebar) charts, make sure Volume is set to "Trade Vol" and for Tick charts set volume to "Tick Count" for proper operation of indicator. RELEASE NOTES: V. 1.0 10/08/09 Initial Version == Inputs & Variables =================================================} inputs: RiskDisplaySettings(""), EntryBar(1), //Risk Calc Entry Bar 1=1 bar back Dec(4), Mult(10000), //Multiplier to convert ticks to $ RiskOffset(1), // E.G. 1 Tick above the high to enter long TextOff(1), TruncateTxt(2), //Numbers to display for swings. Default=3 e.g. 1.3456 will display 456 LETxt("LE :"), SETxt("SE :"), HiColor(Cyan), LoColor(Magenta), CounterSettings(""), VertTextPct(80{0-100}), RightOffset(1), NormColor(yellow), AlertColor(red), AlertPct(10{0-100}), DispMode(2 {1=Pct,2=Time/Ticks/Vol}) ; vars: TickSize( MinMove / PriceScale ), { IntrabarPersist Bar_Number( 0 ), IntrabarPersist Bar_Ticks ( 0 ),} HiE(0), LoE(0), Risk(0), TxtOff(0), TextID(0), txt(""), ATxt(""), Htxt(-1), LTxt(-1), R1T(-1), TicksLeft(0), color(0), TTrun(0), EB(0), {Timer} { Text Object Vars } TxtStr(""), // Text String AlertStr(""), // Alert Text String TxtID(text_new(date,time,close, " ")), // Text Object Reference { Time/Ticks/Vol Vars } dtEndTime(0), // EndTime for Bar dtTimeLeft(0), // Time Left in Bar dtBarTime(0), // Total Time in Bar BarLeftPct(0), // Percent of Bar Remaining BarLeftAmt(0), // Bar Remaining in Ticks/Vol { Constants } cDispPct(1), // Option to display Percentages cDispRaw(2), // Option to display Time/Tick/Vol Values cMinDayInv(1/1440), // One Min portion of day Pad(" ") // Pad to right of text display ; // Other Calcs TTrun=TruncateTxt; HiE=High[EB]+(RiskOffset*TickSize); LoE=Low[EB]-(RiskOffset*TickSize); TxtOff=(TextOff*TickSize); Risk=(HiE-LoE)*Mult; {HL*Mult;} EB = EntryBar; {== Timer Initialization ===================================================} once begin // Check for valid chart if BarType <> 0 and BarType <> 1 then RaiseRuntimeError( "Countdown Timer is only supported on Intrabar, Tick or Volume Charts"); // Check for valid input values if DispMode <> 1 and DispMode <> 2 then RaiseRuntimeError("The DispMode input must be set to 1 or 2"); if VertTextPct > 100 or VertTextPct < 0 then RaiseRuntimeError("The VertTextPct input must be set between 0 and 100"); if AlertPct > 100 or AlertPct < 0 then RaiseRuntimeError("The AlertPct input must be set between 0 and 100"); // Chart Specific Init if BarType = 1 then begin // Intrabar Chart dtBarTime = cMinDayInv * BarInterval; if DispMode = cDispRaw then AlertStr = GetSymbolName+" bar has "+NumToStr(BarInterval*60*(AlertPct/100),0)+" seconds remaining" else AlertStr = GetSymbolName+" bar has "+NumToStr(AlertPct,0)+"% remaining"; end else if BarType = 0 then begin // Tick/Vol Chart if DispMode = cDispRaw then AlertStr = GetSymbolName+" bar has "+NumToStr(BarInterval*(AlertPct/100),0)+" ticks/vol remaining" else AlertStr = GetSymbolName+" bar has "+NumToStr(AlertPct,0)+"% remaining"; end; end; {== Timer Calculations ====================================================} if _LastBarOnChart then begin // Only display in real-time // Set Text Location from right of chart //Value2 = Text_FloatLocation(TxtID, VertTextPct); Value2=Text_SetLocation(TxtID, Date, CalcTime(Time,RightOffset), Close); {TextID = Text_New(Date, Time, Close, " "); Text_SetLocation(TextID, Date, CalcTime(Time,RightOffset), Close); text_SetString(TextID," < "+NumToStr(value1,0)+" R : "+NumToStr(Risk,0)+" ["+NumToStr((RiskOffset),0)+"]"+ATxt); text_SetColor(TextID,color);} //Value2=Text_SetLocation(TextID, Date, CalcTime(Time,RightOffset), Close); //-- Intra-bar (Minute) Chart Timer ------------------------- if BarType = 1 then begin // Grab Computer Time at End-of-Bar and calc end-time if BarStatus(1) = 2 then dtEndTime = ComputerDateTime + dtBarTime; // Calc Time Left and Display if dtEndTime <> 0 then begin // Calc Time Left & Pct. Left dtTimeLeft = dtEndTime - ComputerDateTime; BarLeftPct = (dtTimeLeft / dtBarTime) * 100; // Format the text if DispMode = cDispPct then TxtStr = NumToStr(BarLeftPct, 0)+"%"+Pad else if DispMode = cDispRaw then TxtStr = FormatTime("m:ss", dtTimeLeft)+" "{+Pad}; end else TxtStr = "Syncing..."+Pad; // Display Text text_setstring(TxtID," < "+ TxtStr+"R:"+NumToStr(Risk,0)+" ["+NumToStr((RiskOffset),0)+"]"+ATxt); //// Entry Text if currentbar = 1 then begin Htxt = text_new(date,time,close," "); Ltxt = text_new(date,time,close," "); end; text_SetLocation(Htxt,date,CalcTime(time,RightOffset),Close+({2*}txtOff)); text_SetString(Htxt," "+LEtxt+RightStr(NumtoStr(HiE,Dec),TTrun)); text_SetColor(Htxt,hicolor); {Ltxt = text_new(date,time,close," ");} text_SetLocation(Ltxt,date,CalcTime(time,RightOffset),Close-(txtOff)); text_SetString(Ltxt," "+SEtxt+RightStr(NumtoStr(LoE,Dec),TTrun)); text_SetColor(Ltxt,Locolor); /////// // Trigger Alert / Use Alert Color if dtEndTime <> 0 and BarLeftPct < AlertPct then begin text_SetColor(TxtID, AlertColor); Alert(AlertStr); end else text_SetColor(TxtID, NormColor); end //-- Tick/Volume Chart Timer ------------------------------- else if BarType = 0 then begin // Calc Bar Remaining BarLeftAmt = BarInterval - Ticks; BarLeftPct = (BarLeftAmt / BarInterval) * 100; // Calc Remaining value if DispMode = cDispPct then TxtStr = NumToStr(BarLeftPct, 0)+"%"+Pad else if DispMode = cDispRaw then TxtStr = NumToStr(BarLeftAmt, 0)+" "+Pad; // Display Text text_setstring(TxtID," <"+ TxtStr+"R:"+NumToStr(Risk,0)+" ["+NumToStr((RiskOffset),0)+"]"+ATxt); // LS Entry Txt if currentbar = 1 then begin Htxt = text_new(date,time,close," "); Ltxt = text_new(date,time,close," "); end; {Htxt = text_new(date,time,close," ");} text_SetLocation(Htxt,date,CalcTime(time,RightOffset),Close+({2*}txtOff)); text_SetString(Htxt," "+LEtxt+RightStr(NumtoStr(HiE,Dec),TTrun)); text_SetColor(Htxt,hicolor); {Ltxt = text_new(date,time,close," ");} text_SetLocation(Ltxt,date,CalcTime(time,RightOffset),Close-(txtOff)); text_SetString(Ltxt," "+SEtxt+RightStr(NumtoStr(LoE,Dec),TTrun)); text_SetColor(Ltxt,Locolor); // Trigger Alert / Use Alert Color if BarLeftPct < AlertPct then begin text_SetColor(TxtID, AlertColor); Alert(AlertStr); end else begin text_SetColor(TxtID, NormColor); end; end; end;
-
Thanks Tams. But this does not seem to work. When I add this nothing plots at all. Perhaps I will provide a little more of my code //-- Intra-bar (Minute) Chart Timer ------------------------- if BarType = 1 then begin // Grab Computer Time at End-of-Bar and calc end-time if BarStatus(1) = 2 then dtEndTime = ComputerDateTime + dtBarTime; // Calc Time Left and Display if dtEndTime <> 0 then begin // Calc Time Left & Pct. Left dtTimeLeft = dtEndTime - ComputerDateTime; BarLeftPct = (dtTimeLeft / dtBarTime) * 100; // Format the text if DispMode = cDispPct then TxtStr = NumToStr(BarLeftPct, 0)+"%"+Pad else if DispMode = cDispRaw then TxtStr = FormatTime("m:ss", dtTimeLeft)+" "{+Pad}; end else TxtStr = "Syncing..."+Pad; // Display Text text_setstring(TxtID," < "+ TxtStr+"R:"+NumToStr(Risk,0)+" ["+NumToStr((RiskOffset),0)+"]"+ATxt); //// Entry Text Htxt = text_new(date,time,close," "); text_SetLocation(Htxt,date,CalcTime(time,RightOffset),Close+({2*}txtOff)); text_SetString(Htxt," "+LEtxt+RightStr(NumtoStr(HiE,Dec),TTrun)); text_SetColor(Htxt,hicolor); Ltxt = text_new(date,time,close," "); text_SetLocation(Ltxt,date,CalcTime(time,RightOffset),Close-(txtOff)); text_SetString(Ltxt," "+SEtxt+RightStr(NumtoStr(LoE,Dec),TTrun)); text_SetColor(Ltxt,Locolor);
-
I have created some code that displays some calculations on the current bar and need to clear this information and start the calculation over on each new bar. I have tried this: if LastBarOnChart and BarStatus( 1 ) = 2 then but nothing displays using this statement. Here is the code that I want to reset each bar.... Ltxt = text_new(date,time,close," "); text_SetLocation(Ltxt,date,CalcTime(time,RightOffset),Close-(txtOff)); text_SetString(Ltxt," "+SEtxt+RightStr(NumtoStr(LoE,Dec),TTrun)); text_SetColor(Ltxt,Locolor); Any suggestions appreciated.