Untitled
unknown
plain_text
9 months ago
60 kB
11
Indexable
Using elsystem.collections;
using elsystem.io;
using elsystem.DrawingObjects;
Inputs:
do_output( false ),
directory( "C:\owncloud\sts_intraday\" ),
limit_object_number( false ),
allow_objects_after_x_bars( 1000 ),
Chart_Prefix( "stch_shrt_2" ),
manage_trades_with_STS( false ),
use_wider_dvt_patch( 2 ),
use_exit_stop_patch( 1 ),
use_updated_sts_drawing( true ),
file_prefix( "" ),
buy_next_bar_market_EOD( 0 ),
___Limit_Entries___( "" ),
ues_limit_entries( 0 ),
limit_entry_percent_padding( 0 ),
___Cash_Management___( "" ),
use_cash( true ),
RoundToNShares( 2 ),
PercentCompounding( 0 ),
StartCapital( 10000 ),
buy_on_close( 1 ),
round_to_big_point_for_stops( 0 ),
___Profit_Targets___( "" ),
use_percent_targets( 0 ),
percent_target( 5.5 ),
use_points_targets( 0 ),
points_target( 10 ),
percent_shares_for_target( 100 ),
use_targets_after_x_bars( 6 ),
___Stop_Settings___( "" ),
use_stop_for_exit( 1 ),
stop_padding_percent( 0.7 ),
___Reentry_Settings___( "" ),
allow_up_candle_reentry_on_close( 1 ),
percent_above_for_reentry( 0.3 ),
require_up_candle( 1 ),
allow_trending_reentry( 0 ),
___Index_Reentry___( "" ),
do_index_reentry( 0 ),
num_bars_back_for_high( 100 ),
percent_decline_for_reentry( 25 ),
____Wider_DVT___( "" ),
use_wider_DVT_for_first_2( 0 ),
____Second_DVT_Settings___( "" ),
prevent_second_DVT_under_ATR( false ),
display_only_second( false ),
display_both_with_hand_off( false ),
use_debug( true ),
____MA_Deluxe_1_Settings___( "" ),
MA_1_Price( C ),
MA_1_Type( 8 ),
MA_1_Length( 26 ),
____MA_Deluxe_2_Settings___( "" ),
MA_2_Price( C ),
MA_2_Type( 8 ),
MA_2_Length( 15 ),
____MA_Deluxe_3_Settings___( "" ),
MA_3_Price( C ),
MA_3_Type( 8 ),
MA_3_Length( 14 ),
____MA_Deluxe_4_Settings___( "" ),
MA_4_Price( C ),
MA_4_Type( 8 ),
MA_4_Length( 58 ),
___DVS_Indicator_Settings___( "" ),
disable_bear( true ),
use_override_label( true ),
disable_starting( false ),
override_label( "STS" ),
overide_string_momo( "STS MOMO" ),
overide_string_oversold( "STS OVERSOLD" ),
override_label_2( "2vt" ),
text_color_short( magenta ),
line_color_short( "magenta" ),
text_color_long( white ),
line_color_long( "white" ),
line_color_default_long( "yellow" ),
int default_long_weight( 0.5 ),
first_dvt_color( green ),
second_dvt_color( cyan ),
first_dvt_color_line( "green" ),
second_dvt_color_line( "cyan" ),
attention_color( magenta ),
attention_line_color( "magenta" ),
display_decimals( 2 ),
use_auto_adjustment_for_decimals( false ),
zero_decimal_price( 500 ),
one_decimal_price( 100 ),
two_decimal_price( 20 ),
round_to_nearest_five( false ),
display_price_on_text( true ),
use_MACD_for_confirmation( false ),
FastLength( 12 ),
SlowLength( 26 );
Vars:
GlobalDictionary GD(null),
num_long_dvts(0),
color_val(0),
color_val_2(0),
color_val_3(0),
color_val_4(0),
override_string(""),
price_string(""),
ID(-1),
Offset( 0 ),
MyMACD(0),
ATR_inversion_bar(0),
MACD_inversion_bar(0),
force_start(false),
DTpoint myDTPoint(null),
VerticalLine myVLine(null),
TrendLine myTrendLine1(null),
num_decimals(0),
last_text_price(0),
Intrabarpersist has_drawn_second(false),
did_oversold(false),
app_type(0),
app_optimizing(0),
last_tp(0),
nshares(0),
stop_drawing(false),
TickSize(0),
numberOfTicks(0),
NearestTick(0),
NearestValidPrice(0),
mpos(0),
id_2(0),
num_long_dvts_3(0),
did_reentry(false);
method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args )
begin
if getappinfo(aiOptimizing) < 1 then begin
GD = GlobalDictionary.Create(false,"IES");
end;
end;
Method string get_price_string(double tracked_price)
Begin
num_decimals = display_decimals;
If use_auto_adjustment_for_decimals then begin
If tracked_price <= two_decimal_price then begin
num_decimals = 2;
End else if tracked_price <= zero_decimal_price then begin
num_decimals = 1;
End else begin
num_decimals = 0;
end;
End;
If round_to_nearest_five = true then begin
price_string = numtostr(ceiling(round((tracked_price),display_decimals)/5)*5,num_decimals);
End else begin
price_string = numtostr(round((tracked_price),display_decimals),num_decimals);
end;
Return price_string;
end;
method bool can_draw()
Begin
commentarycl("Can Draw Function");
commentarycl("mpos: ", mpos);
commentarycl("num_long_dvts: ", num_long_dvts);
//limit_object_number(false),
//allow_drawing_objects_last_x_days(750),
if (mpos = 1 or num_long_dvts = 1 or did_reentry) And
app_type <> 2 and app_optimizing <> 1 and
(limit_object_number = false or
Currentbar > allow_objects_after_x_bars ) then Begin
return true;
end;
return false;
end;
var:
temp_id(0),
last_str(""),
second_last_str(""),
last_price(0.0),
last_bar(0);
method int draw_text(string label, float price_point)
begin
commentarycl("label: ", label);
commentarycl("price_point: ", price_point.ToString());
//commentarycl("Draw Text function called");
if (display_only_second = false and (display_both_with_hand_off and has_drawn_second=false))
or (display_only_second = false and display_both_with_hand_off = false) then begin
//don't run if radar screen, no strat logic should be here
if can_draw() then begin
temp_id = Text_New(Date[0], Time[0], price_point, label);
Text_SetColor(temp_id, attention_color);
//commentarycl("Drew Text");
//commentarycl("temp_id: ", temp_id);
end;
end else Begin
temp_id = -1;
end;
if(second_last_str <> last_str) then begin
second_last_str = last_str;
end;
last_str = label;
last_price = price_point;
last_bar = currentbar;
return temp_id;
end;
method void draw_vertical_line(string line_color, int line_weight) Begin
if app_type <> 2 and app_optimizing <> 1 and (mpos = 0 or mpos[1] = 0) then begin
myDTPoint = DTPoint.create(BarDateTime, 0);
myVLine = VerticalLine.create(myDTPoint);
myVline.Color = elsystem.drawing.Color.FromName(line_color);
myVline.Weight = line_weight;
DrawingObjects.Add(myVLine);
end;
end;
Method void draw_DVT(double dvt_price, double num_dvts, double num_dvts_pre, double last_tp, string line_color)
Begin
commentarycl("Drawing DVT_Price: ", dvt_price);
commentarycl("num_dvts: ", num_dvts);
commentarycl("num_dvts_pre: ", num_dvts_pre);
commentarycl("last_tp: ", last_tp);
commentarycl("has_drawn_second: ", has_drawn_second);
commentarycl("num_long_dvts_3: ", num_long_dvts_3);
if myTrendLine1 <> Null then begin
commentarycl("Trendline is not null");
If num_dvts_pre = 1 then begin
myTrendLine1.Color = elsystem.drawing.Color.FromName(first_dvt_color_line);
end;
If num_dvts_pre = 2 then begin
myTrendLine1.Color = elsystem.drawing.Color.FromName(second_dvt_color_line);
end;
if num_dvts_pre > 2 then Begin
myTrendLine1.Color = elsystem.drawing.Color.FromName(line_color);
end;
end;
//don't run if radar screen, no strat logic should be here
if can_draw() then begin
commentarycl("Can Draw Passed");
If num_dvts_pre <> num_dvts or (mpos = 0) then begin
commentarycl("Creating new DVT");
myTrendLine1 = TrendLine.Create(DTPoint.Create(BarDateTime[1], dvt_price), DTPoint.Create(BarDateTime[0], dvt_price));
myTrendLine1.Persist = True;
myTrendline1.ExtRight = false;
myTrendLine1.Style = 2;
myTrendLine1.Color = elsystem.drawing.Color.FromName(attention_line_color);
//myTrendLine1.SetStartPoint(DTPoint.Create(BarDateTime[2], dvt_price));
//myTrendLine1.SetEndPoint(DTPoint.Create(BarDateTime[0], dvt_price));
DrawingObjects.Add(myTrendLine1);
end else begin
if myTrendLine1 <> Null then begin
If last_tp = dvt_price then begin
myTrendLine1.SetEndPoint(DTPoint.Create(BarDateTime[0], dvt_price));
end;
end;
end;
end;
end;
input:
___Wider_ATR___( "" ),
display_other_ATRS( true ),
limit_wider_using_200( 1 ),
wider_atr_length( 155 ),
above_200_for_x_bars( 75 ),
below_200_for_x_bars( 13 ),
___ATR_SETTINGS___( "" ),
use_atr( true ),
Length( 13 ),
Multi( 0.6 ),
percent_above_for_trigger( 0 ),
percent_off_atr( 0.9 ),
percent_below_atr( 1.9 ),
percent_above_atr( 0.2 ),
update_DVT_if_X_percent_above_ATR( true ),
percent_above_DVT_for_update( 2.3 ),
use_dynamic_percent_for_update( false ),
use_true_range_for_calc( true ),
use_bar_range_for_calc( false ),
average_length( 100 ),
dynamic_factor( 1 ),
update_DVT_if_X_percent_below_ATR( true ),
percent_below_DVT_for_update( 4.6 ),
points_padding( 0 ),
percent_padding( 0 );
var:
atrs(0),
stph(0),
stpl(0);
Method void CalcATR()
begin
if use_atr then begin
atrs=ATRtrailingstop2(c, c, length, multi, stph, stpl);
end;
end;
input:
___ATR_SETTINGS____3( "" ),
use_atr_3( true ),
show_second_dvt( true ),
Length_3( 35 ),
Multi_3( 0.75 ),
percent_above_DVT_for_update_3( 1.2 );
var:
atrs_3(0),
stph_3(0),
stpl_3(0);
Method void CalcATR_3()
begin
if use_atr_3 then begin
atrs_3=ATRtrailingstop2(c,c,length_3,multi_3,stph_3,stpl_3);
end;
end;
input:
___ATR_SETTINGS____4( "" ),
use_atr_4( true ),
Length_4( 34 ),
Multi_4( 4.5 ),
percent_below_atr_4( 0 );
var:
atrs_4(0),
stph_4(0),
stpl_4(0);
Method void CalcATR_4()
begin
if use_atr_4 then begin
atrs_4=ATRtrailingstop2(c,c,length_4,multi_4,stph_4,stpl_4);
end;
end;
vars:
last_tracked(0),
above_200_ma(0),
num_above_200_ma(0),
num_below_200_ma(0),
above_200_ok(true);
method void Plot_ATRS()
Begin
if limit_wider_using_200 = 1 then Begin
above_200_ma = average(c, wider_atr_length);
if c > above_200_ma then Begin
num_above_200_ma = num_above_200_ma + 1;
num_below_200_ma = 0;
end;
if c < above_200_ma then Begin
num_below_200_ma = num_below_200_ma + 1;
num_above_200_ma = 0;
end;
if num_above_200_ma > above_200_for_x_bars then Begin
above_200_ok = true;
end;
if num_below_200_ma > below_200_for_x_bars then Begin
above_200_ok = false;
end;
end;
//commentarycl("above_200_ok: ", above_200_ok);
//commentarycl("num_above_200_ma: ", num_above_200_ma);
If BarNumber > Length then begin
//if atrs=-1 then plot1(stph,"Short Stop");
//if atrs=1 and (atrs_3 <> 1 or display_other_ATRS = false) then plot2(stpl,"Long Stop");
end;
if display_other_ATRS and above_200_ok then begin
If BarNumber > Length_3 then begin
//if atrs_3=1 then plot6(stpl_3,"Long Stop 3");
if stpl_3 <> 0 and atrs_3 = 1 and show_second_dvt and stop_drawing = false then begin
if last_tracked < stpl_3 * (1-(percent_above_DVT_for_update_3/100)) then begin
last_tracked = stpl_3;
if round_to_big_point_for_stops = 1 then Begin
TickSize = MinMove / PriceScale * BigPointValue;
NumberOfTicks = last_tracked / TickSize;
NearestTick = Round(NumberOfTicks, 0);
last_tracked = NearestTick * TickSize;
end;
num_long_dvts_3 = num_long_dvts_3 + 1;
end;
override_string = override_label_2 + ": " + get_price_string(last_tracked);
//commentarycl("OVER RIDE STRING%%%%%%%%: ",override_string);
if num_long_dvts_3 <> num_long_dvts_3[1] then begin
if last_tracked > 0 then begin
//don't run if radar screen, no strat logic should be here
if can_draw() then begin
//id_2 = Text_New(Date[0], Time[0], last_tracked, override_string);
last_bar = currentbar;
end;
end;
end;
end;
end;
end;
commentarycl("atrs_3:", atrs_3);
commentarycl("stpl_3:", stpl_3);
if atrs_3 = -1 then Begin
last_tracked = 0;
end;
if atrs_3 = -1 and num_long_dvts_3 > 0 and use_wider_dvt_patch = 1 then Begin
last_tracked = last_tracked[1];
commentarycl("Setting Last Tracked: ", last_tracked);
end;
end;
vars:
current_low_track(0),
previous_low_track(0),
current_high_track(0),
previous_high_track(0);
Method void calc_low_for_trailing()
Begin
MyMACD = macd(c, fastlength, slowlength);
If atrs <> atrs[1] then begin
ATR_inversion_bar = currentbar;
end;
If (mymacd > 0 and mymacd[1] < 0) or
(mymacd < 0 and mymacd[1] > 0) then begin
macd_inversion_bar = currentbar;
end;
If color_val = -1 and
(
color_val[1] = 1 or
l < current_low_track
)
then begin
if use_atr and stpl <> 0 then begin
If percent_off_atr < ((c - stpl) / stpl)*100 and atrs=1 then begin
current_low_track = stpl * (1-(percent_below_atr/100));
end else begin
current_low_track = low;
end;
end else begin
current_low_track = low;
end;
end;
If color_val = -1 and color_val[1] = 1
then begin
previous_high_track = current_high_track[1];
end;
If color_val = 1 and
(
color_val[1] = -1 or
h > current_high_track
)
then begin
if use_atr and stph <> 0 then begin
If percent_off_atr > ((stph - c) / stph)*100 and atrs=-1 then begin
current_high_track = stph * (1+(percent_above_atr/100));
end else begin
current_high_track = high;
end;
end else begin
current_high_track = low;
end;
end;
If color_val = 1 and color_val[1] = -1
then begin
previous_high_track = current_high_track[1];
end;
end;
inputs:
use_stoch_agreement( 0 ),
stoch_agreement_length( 34 ),
stoch_agreement_level( 76 );
vars:
has_been_red(false),
has_been_red_twice(false),
stop_padding(0),
last_stop_drawn(0),
DTPoint myDTPoint1(null),
DTPoint myDTPoint2(null),
text_color(red),
continuing_to_draw_long(false),
continuing_to_draw_short(false),
last_stop_low(0),
last_stop_high(0),
drawing_low(false),
drawing_high(false),
force_start_price(0),
first_bear_bar(0),
num_short_dvts(0),
first_short_dvts_id(0),
second_short_dvts_id(0),
first_long_dvts_id(0),
second_long_dvts_id(0),
tracked_range(0);
method void update_colors()
Begin
//don't run if radar screen, no strat logic should be here
if app_type <> 2 and app_optimizing <> 1 and id[1] > 0 then begin
If num_long_dvts[1] = 1 and display_only_second = false and display_both_with_hand_off=false then begin
Text_SetColor(ID[1], first_dvt_color);
end;
If num_long_dvts[1] = 2 and display_only_second = false and display_both_with_hand_off=false then begin
Text_SetColor(ID[1], second_dvt_color);
end;
If num_long_dvts[1] > 2 and display_only_second = false and display_both_with_hand_off=false then begin
Text_SetColor(ID[1], text_color_long);
end;
end;
end;
Method void place_trailing_stops()
Begin
update_colors();
If points_padding > 0 then begin
stop_padding = points_padding;
end;
If has_been_red and color_val[1] = 1 and color_val = -1 and
(use_stoch_agreement = 0 or fastk(stoch_agreement_length) < stoch_agreement_level)
then begin
has_been_red_twice = true;
end;
If color_val = -1 and (use_stoch_agreement = 0 or fastk(stoch_agreement_length) < stoch_agreement_level) then begin
has_been_red = true;
end;
has_been_red = true;
If continuing_to_draw_short and c < last_tracked then begin
num_long_dvts = 0;
if mpos = 0 then begin
num_long_dvts_3 = 0;
end;
has_drawn_second = false;
end;
If continuing_to_draw_long then begin
num_short_dvts = 0;
end;
If use_true_range_for_calc then begin
tracked_range = average(TrueRange, average_length);
end;
If use_bar_range_for_calc then begin
tracked_range = average(high-low, average_length);
end;
If percent_padding > 0 then begin
stop_padding = current_low_track * points_padding/100;
end;
if color_val <> color_val[1] then begin
continuing_to_draw_short = false;
continuing_to_draw_long = false;
end;
//commentarycl("atrs_4: ", atrs_4);
//commentarycl("use_atr_4: ", use_atr_4);
//commentarycl("atrs: ", atrs);
if atrs_4 = 1 and use_atr_4 and atrs <> 1 then Begin
//commentarycl("Setting CLT to : ", stpl_4);
current_low_track = stpl_4 * (1-(percent_below_atr_4/100));
end;
If ((color_val = 1 and has_been_red) or force_start or (c > force_start_price and force_start_price > 0)) and stop_drawing = false then begin
if prevent_second_DVT_under_ATR = false or atrs = 1 or num_long_dvts <> 1 then begin
if ((disable_starting = false or (current_low_track - stop_padding > last_stop_drawn))
And (use_atr = false or (atrs = 1 and c > h[currentbar - ATR_inversion_bar] * (1 + percent_above_for_trigger/100)))
And (use_MACD_for_confirmation = false or (MyMACD > 0 and c > h[currentbar - macd_inversion_bar])))
or continuing_to_draw_long = true
Or force_start
or (c > force_start_price and force_start_price > 0) then begin
If update_DVT_if_X_percent_above_ATR then begin
{
dynamic_factor(1),}
If use_dynamic_percent_for_update = false then begin
If current_low_track - points_padding < stpl * (1-(percent_above_DVT_for_update/100)) then begin
current_low_track = stpl * (1-(percent_below_atr/100));
continuing_to_draw_long = false;
force_start_price = 0;
end;
End else begin
If current_low_track - points_padding < stpl * (1 - ((tracked_range/c)*dynamic_factor)) then begin
current_low_track = stpl * (1-((tracked_range/c)*dynamic_factor));
continuing_to_draw_long = false;
force_start_price = 0;
end;
end;
end;
NearestValidPrice = current_low_track - stop_padding * (1 - stop_padding_percent/100);
if round_to_big_point_for_stops = 1 then Begin
TickSize = MinMove / PriceScale * BigPointValue;
NumberOfTicks = (current_low_track - stop_padding * (1 - stop_padding_percent/100)) / TickSize;
NearestTick = Round(NumberOfTicks, 0);
NearestValidPrice = NearestTick * TickSize;
end;
override_string = override_label + ": " + get_price_string(NearestValidPrice* (1 - stop_padding_percent/100));
If (continuing_to_draw_long = false and override_string <> override_string[1]) then begin
If ((disable_starting = false or (NearestValidPrice > last_stop_drawn))
And (use_atr = false or (atrs = 1 and c > h[currentbar - ATR_inversion_bar] * (1 + percent_above_for_trigger/100)))
And (use_MACD_for_confirmation = false or (MyMACD > 0 and c > h[currentbar - macd_inversion_bar])))
and last_stop_drawn = NearestValidPrice and num_long_dvts = 0 then begin
draw_vertical_line(line_color_default_long, default_long_weight);
end;
if num_long_dvts = 0 and mpos = 0 then Begin
num_long_dvts_3 = 0;
end;
num_long_dvts = num_long_dvts + 1;
num_short_dvts = 0;
last_text_price = NearestValidPrice;
commentarycl("Setting Text");
commentarycl("num_long_dvts_3: ", num_long_dvts_3);
commentarycl("NearestValidPrice: ", NearestValidPrice* (1 - stop_padding_percent/100));
if num_long_dvts_3 = 0 then begin
commentarycl("Drawing Text");
if did_oversold then Begin
//id = draw_text(overide_string_oversold + ": " + price_string, NearestValidPrice* (1 - stop_padding_percent/100));
end else if color_val <> color_val[1] then begin
//id = draw_text(overide_string_momo + ": " + price_string, NearestValidPrice* (1 - stop_padding_percent/100));
end else Begin
//id = draw_text(override_string, NearestValidPrice* (1 - stop_padding_percent/100));
end;
end;
//commentarycl("Text ID: ", id);
end;
if num_long_dvts = 1 and num_long_dvts[1] = 0 and force_start = false then Begin
draw_vertical_line(line_color_default_long, default_long_weight);
end;
//draw_DVT(NearestValidPrice, num_long_dvts, num_long_dvts[1], last_text_price, line_color_long);
continuing_to_draw_long = true;
continuing_to_draw_short = false;
drawing_low = false;
drawing_high = true;
first_bear_bar = 0;
end;
end;
last_stop_drawn = NearestValidPrice;
last_stop_low = NearestValidPrice;
end;
If color_val = -1 and has_been_red and (c < force_start_price or force_start_price = 0) then begin
if ((disable_starting = false or (current_high_track + stop_padding < last_stop_high))
And (use_atr = false or (atrs = -1 and c < l[currentbar - ATR_inversion_bar]))
And (use_MACD_for_confirmation = false or (MyMACD < 0 and c < l[currentbar - macd_inversion_bar]))
And l < last_stop_low)
or continuing_to_draw_short = true or (drawing_low and (current_high_track + stop_padding < last_stop_high)) then begin
If update_DVT_if_X_percent_below_ATR then begin
If current_high_track + points_padding > stph * (1+(percent_below_DVT_for_update/100)) then begin
current_high_track = stph * (1+(percent_above_atr/100));
continuing_to_draw_short = false;
end;
end;
force_start_price = 0;
//don't run if radar screen, no strat logic should be here
if app_type<> 2 and app_optimizing <> 1 then begin
//myTrendLine1 = TrendLine.Create(DTPoint.Create(BarDateTime[0],current_high_track + stop_padding),DTPoint.Create(BarDateTime[1],current_high_track + stop_padding));
//myTrendLine1.Persist = False;
//myTrendline1.ExtRight = False;
//myTrendLine1.Style = 2;
//myTrendLine1.Color = elsystem.drawing.Color.FromName(line_color_short);
end;
If round_to_nearest_five = true then begin
price_string = numtostr(ceiling(round((current_high_track + stop_padding),display_decimals)/5)*5,display_decimals);
End else begin
price_string = numtostr(round((current_high_track + stop_padding),display_decimals),display_decimals);
end;
override_string = override_label + ": " + price_string;
If continuing_to_draw_short = false and disable_bear = false and last_stop_high > current_high_track + stop_padding and override_string <> override_string[1] then begin
if mpos = 0 then begin
num_long_dvts_3 = 0;
end;
num_long_dvts = 0;
has_drawn_second = false;
num_short_dvts = num_short_dvts + 1;
//id = draw_text(override_string, current_high_track + stop_padding);
If num_short_dvts = 1 then begin
first_short_dvts_id = id;
end;
If num_short_dvts = 2 then begin
second_short_dvts_id = id;
end;
end;
//don't run if radar screen, no strat logic should be here
if disable_bear = false and app_type <> 2 and app_optimizing <> 1 then begin
//DrawingObjects.Add(myTrendLine1);
end;
continuing_to_draw_long = false;
continuing_to_draw_short = true;
drawing_low = true;
drawing_high = false;
end;
last_stop_high = current_high_track + stop_padding;
end;
If (last_tracked > 0 and c < last_tracked and above_200_ok) or ((last_tracked = 0 or above_200_ok = false) and c < last_text_price) then begin
If first_bear_bar = 0 then begin
first_bear_bar = currentbar;
end;
num_long_dvts = 0;
if mpos = 0 then begin
num_long_dvts_3 = 0;
end;
end;
If mpos = 1 and color_val = -1 and (use_stoch_agreement = 0 or fastk(stoch_agreement_length) < stoch_agreement_level) then begin
If percent_padding > 0 then begin
stop_padding = previous_low_track * points_padding/100;
end;
end;
end;
inputs:
int Moving_Average_Type( 8 ),
int MACD_FastLength( 9 ), { the shorter of the two exponential moving average
lengths used to calculate the MACD value, in bars }
int MACD_SlowLength( 26 ), { the longer of the two exponential moving average
lengths used to calculate the MACD value, in bars }
int MACD_MACDLength( 8 ), { the number of bars over which to exponentially average
the MACD value }
MACD_Adap_EFF_Length( 3 ),
MACD_Adap_Fast_Length( 3 ),
MACD_Adap_Slow_Length( 3 );
variables:
double entryMACD( 0 ),
double entryMACDAvg( 0 ),
double entrymacd_val( 0 );
Method void calc_BPT_MACDi()
begin
entryMACD = MACD( Close, MACD_FastLength, MACD_SlowLength ) ;
entrymacd_val = entryMACD;
switch(Moving_Average_Type) begin
Case 1:
entryMACDAvg = Average(entrymacd_val, MACD_MACDLength);
Case 2:
entryMACDAvg = XAverage(entrymacd_val, MACD_MACDLength);
Case 3:
entryMACDAvg = WAverage(entrymacd_val, MACD_MACDLength);
Case 4:
entryMACDAvg = TriAverage(entrymacd_val, MACD_MACDLength);
Case 5:
entryMACDAvg = AdaptiveMovAvg(entrymacd_val, MACD_Adap_EFF_Length, MACD_Adap_Fast_Length, MACD_Adap_Slow_Length);
Case 6:
entryMACDAvg = bptHMA(entrymacd_val, MACD_MACDLength);
Case 7:
entryMACDAvg = bptEHMA(entrymacd_val, MACD_MACDLength);
Case 8:
entryMACDAvg = bptEOHMA(entrymacd_val, MACD_MACDLength);
end;
end;
inputs:
____Agressive_Oversold_Entry___( "" ),
use_aggressive_oversold_entry( true ),
sma_length( 62 ),
sma_length_2_for_close( 9 ),
num_bars_below_sma( 32 ),
percent_candle_body( 15 ),
size_of_candle( 0.7 ),
oversold_vertical_color( "white" ),
int aggressive_vertical_weight( .5 );
vars:
num_days_below(0),
sma_val(0),
sma_2_val(0);
Method void check_inversion()
Begin
did_oversold = false;
sma_val = average(c, sma_length);
sma_2_val = average(c, sma_length_2_for_close);
If c < sma_val then begin
num_days_below = num_days_below + 1;
End else begin
num_days_below = 0;
end;
If h-l <> 0 and c <> 0 then begin
If (c > sma_val or c > sma_2_val) and
num_days_below[1] >= num_bars_below_sma and
(C - O)/(H - L) > percent_candle_body * .01 and
(H - L)/C > size_of_candle * .01 and
color_val_2 = 1 and color_val_2[1] = -1 and
entrymacd_val > entryMACDAvg and (entrymacd_val[1] < entryMACDAvg[1] or entrymacd_val[2] < entryMACDAvg[2])
and use_aggressive_oversold_entry
then begin
draw_vertical_line(oversold_vertical_color, aggressive_vertical_weight);
force_start = true;
force_start_price = c;
did_oversold = true;
commentarycl("Did Oversold");
end;
end;
end;
inputs: ____ABC_PULLBACK___( "" ),
use_ABC_pullback( true ),
long_MA_filter( 310 ),
percent_above_long_MA( 0 ),
c_wave_min_length( 3 ),
ABC_vertical_color( "cyan" ),
int ABC_weight( 0.5 ),
num_bars_to_keep_ABC_alive( 36 ),
allow_new_ABC_without_crossing_ATR( true );
vars:
counter(0),
tracked_changes(0),
long_ma_val(0),
c_wave_length(0),
bars_tracked_at_four(0),
did_abc(false);
Method void how_many_color_changes()
Begin
long_ma_val = average(c, long_MA_filter);
if first_bear_bar > 0 then begin
If color_val_3 <> color_val_3[1] then begin
tracked_changes = tracked_changes + 1;
end;
If tracked_changes = 3 then begin
c_wave_length = c_wave_length + 1;
end;
End else begin
tracked_changes = 1;
c_wave_length = 0;
end;
If atrs = 1 then begin
did_abc = false;
end;
If tracked_changes = 4 then begin
bars_tracked_at_four = bars_tracked_at_four + 1;
End else begin
bars_tracked_at_four = 0;
end;
If tracked_changes = 4 and use_ABC_pullback and
C > long_ma_val * (1 + (percent_above_long_MA *.01))
And c_wave_length >= c_wave_min_length
And (bars_tracked_at_four <= num_bars_to_keep_ABC_alive)
And (allow_new_ABC_without_crossing_ATR or did_abc = false)
then begin
draw_vertical_line(ABC_vertical_color, ABC_weight);
num_long_dvts = 0;
num_long_dvts_3 = 0;
has_drawn_second = false;
force_start = true;
force_start_price = c;
did_abc = true;
end;
end;
inputs: ____ABC_PULLBACK_2___( "" ),
use_ABC_pullback_2( true ),
long_MA_filter_2( 350 ),
percent_above_long_MA_2( 1.9 ),
c_wave_min_length_2( 13 ),
ABC_vertical_color_2( "pink" ),
int ABC_weight_2( 0.5 ),
num_bars_to_keep_ABC_alive_2( 53 ),
allow_new_ABC_without_crossing_ATR_2( true );
vars:
counter_2(0),
tracked_changes_2(0),
long_ma_val_2(0),
c_wave_length_2(0),
bars_tracked_at_four_2(0),
did_abc_2(false);
Method void how_many_color_changes_2()
Begin
long_ma_val_2 = average(c, long_MA_filter_2);
if first_bear_bar > 0 then begin
If color_val_4 <> color_val_4[1] then begin
tracked_changes_2 = tracked_changes_2 + 1;
end;
If tracked_changes = 3 then begin
c_wave_length_2 = c_wave_length_2 + 1;
end;
End else begin
tracked_changes_2 = 1;
c_wave_length_2 = 0;
end;
If atrs = 1 then begin
did_abc_2 = false;
end;
If tracked_changes_2 = 4 then begin
bars_tracked_at_four_2 = bars_tracked_at_four_2 + 1;
End else begin
bars_tracked_at_four_2 = 0;
end;
If tracked_changes_2 = 4 and use_ABC_pullback_2 and
C > long_ma_val_2 * (1 + (percent_above_long_MA_2 *.01))
And c_wave_length_2 >= c_wave_min_length_2
And (bars_tracked_at_four_2 <= num_bars_to_keep_ABC_alive_2)
And (allow_new_ABC_without_crossing_ATR_2 or did_abc_2 = false)
then begin
draw_vertical_line(ABC_vertical_color_2, ABC_weight);
num_long_dvts = 0;
num_long_dvts_3 = 0;
has_drawn_second = false;
force_start = true;
force_start_price = c;
did_abc_2 = true;
end;
end;
method void debug()
Begin
if true then begin
{commentarycl("____Second_DVT_Settings___(): ", ____Second_DVT_Settings___);
commentarycl("prevent_second_DVT_under_ATR: ", prevent_second_DVT_under_ATR);
commentarycl("display_only_second: ", display_only_second);
commentarycl("display_both_with_hand_off: ", display_both_with_hand_off);
commentarycl("____MA_Deluxe_1_Settings___: ",____MA_Deluxe_1_Settings___);
commentarycl("MA_1_Price: ", MA_1_Price);
commentarycl("MA_1_Type: ", MA_1_Type);
commentarycl("MA_1_Length: ", MA_1_Length);
commentarycl("Use_MA_1_Smoothing: ", false);
commentarycl("MA_1_Smoothing: ", false);
commentarycl("MA_1_Percent_smoothing: ", false);
commentarycl("use_whipsaw_filter_MA_1: ", false);
commentarycl("use_whipsaw_smoothing_MA_1: ", false);
commentarycl("whipsaw_smoothing_MA_1: ", false);
commentarycl("whipsaw_smoothing_MA_1_percent: ", false);
commentarycl("use_reversal_date_for_smoothing: ", false);
commentarycl("display_ma1_reversal: ", false);
commentarycl("use_num_bars_confirmation: ", false);
commentarycl("num_bars_green: ", false);
commentarycl("num_bars_red: ", false);
commentarycl("____MA_Deluxe_2_Settings___: ", ____MA_Deluxe_2_Settings___);
commentarycl("MA_2_Price: ", MA_2_Price);
commentarycl("MA_2_Type: ", MA_2_Type);
commentarycl("MA_2_Length: ", MA_2_Length);
commentarycl("MA_2_Disable_Color: ", false);
commentarycl("Use_MA_2_Smoothing: ", false);
commentarycl("MA_2_Smoothing: ", false);
commentarycl("MA_2_Percent_smoothing: ", false);
commentarycl("use_whipsaw_filter_MA_2: ", false);
commentarycl("use_whipsaw_smoothing_MA_2: ", false);
commentarycl("whipsaw_smoothing_MA_2: ", false);
commentarycl("whipsaw_smoothing_MA_2_percent: ", false);
commentarycl("use_reversal_date_for_smoothing_2: ", false);
commentarycl("display_ma2_reversal: ", false);
commentarycl("use_num_bars_confirmation_2: ", false);
commentarycl("num_bars_green_2: ", false);
commentarycl("num_bars_red_2: ", false);
commentarycl("____MA_Deluxe_3_Settings___: ", ____MA_Deluxe_3_Settings___);
commentarycl("MA_3_Price: ", MA_3_Price);
commentarycl("MA_3_Type: ", MA_3_Type);
commentarycl("MA_3_Length: ", MA_3_Length);
commentarycl("MA_3_Disable_Color: ", false);
commentarycl("Use_MA_3_Smoothing: ", false);
commentarycl("MA_3_Smoothing: ", false);
commentarycl("MA_3_Percent_smoothing: ", false);
commentarycl("use_whipsaw_filter_MA_3: ", false);
commentarycl("use_whipsaw_smoothing_MA_3: ", false);
commentarycl("whipsaw_smoothing_MA_3: ", false);
commentarycl("whipsaw_smoothing_MA_3_percent: ", false);
commentarycl("use_reversal_date_for_smoothing_3: ", false);
commentarycl("display_ma3_reversal: ", false);
commentarycl("use_num_bars_confirmation_3: ", false);
commentarycl("num_bars_green_3: ", false);
commentarycl("num_bars_red_3: ", false);
commentarycl("____MA_Deluxe_4_Settings___: ", ____MA_Deluxe_4_Settings___);
commentarycl("MA_4_Price: ", MA_4_Price);
commentarycl("MA_4_Type: ", MA_4_Type);
commentarycl("MA_4_Length: ", MA_4_Length);
commentarycl("MA_4_Disable_Color: ",false);
commentarycl("Use_MA_4_Smoothing: ",false);
commentarycl("MA_4_Smoothing: ",false);
commentarycl("MA_4_Percent_smoothing: ",false);
commentarycl("use_whipsaw_filter_MA_4: ",false);
commentarycl("use_whipsaw_smoothing_MA_4: ",false);
commentarycl("whipsaw_smoothing_MA_4: ",false);
commentarycl("whipsaw_smoothing_MA_4_percent: ",false);
commentarycl("use_reversal_date_for_smoothing_4: ",false);
commentarycl("display_ma4_reversal: ",false);
commentarycl("use_num_bars_confirmation_4: ",false);
commentarycl("num_bars_green_4: ",false);
commentarycl("num_bars_red_4: ",false);
commentarycl("___DVS_Indicator_Settings___: ",___DVS_Indicator_Settings___);
commentarycl("disable_bear: ",disable_bear);
commentarycl("use_override_label: ",use_override_label);
commentarycl("disable_starting: ",disable_starting);
commentarycl("override_label: ",override_label);
commentarycl("override_label_2: ",override_label_2);
commentarycl("text_color_short: ",text_color_short);
commentarycl("line_color_short: ",line_color_short);
commentarycl("text_color_long: ",text_color_long);
commentarycl("line_color_long: ",line_color_long);
commentarycl("line_color_default_long: ",line_color_default_long);
commentarycl("int default_long_weight: ",default_long_weight);
commentarycl("first_dvt_color: ",first_dvt_color);
commentarycl("second_dvt_color: ",second_dvt_color);
commentarycl("first_dvt_color_line: ",first_dvt_color_line);
commentarycl("second_dvt_color_line: ",second_dvt_color_line);
commentarycl("attention_color: ", attention_color);
commentarycl("attention_line_color: ", attention_line_color);
commentarycl("display_decimals: ", display_decimals);
commentarycl("use_auto_adjustment_for_decimals: ", use_auto_adjustment_for_decimals);
commentarycl("zero_decimal_price: ", zero_decimal_price);
commentarycl("one_decimal_price: ", one_decimal_price);
commentarycl("two_decimal_price: ", two_decimal_price);
commentarycl("round_to_nearest_five: ", round_to_nearest_five);
commentarycl("display_price_on_text: ", display_price_on_text);
commentarycl("use_MACD_for_confirmation: ", use_MACD_for_confirmation);
commentarycl("FastLength: ", FastLength);
commentarycl("SlowLength: ", SlowLength);
commentarycl("___ATR_SETTINGS___: ", ___ATR_SETTINGS___);
commentarycl("display_other_ATRS: ", display_other_ATRS);
commentarycl("use_atr: ", use_atr);
commentarycl("HighPrice: ", C);
commentarycl("LowPrice: ", c);
commentarycl("Length: ", Length);
commentarycl("Multi: ", Multi);
commentarycl("percent_above_for_trigger: ", percent_above_for_trigger);
commentarycl("percent_off_atr: ", percent_off_atr);
commentarycl("percent_below_atr: ", percent_below_atr);
commentarycl("percent_above_atr: ", percent_above_atr);
commentarycl("update_DVT_if_X_percent_above_ATR: ", update_DVT_if_X_percent_above_ATR);
commentarycl("percent_above_DVT_for_update: ", percent_above_DVT_for_update);
commentarycl("use_dynamic_percent_for_update: ", use_dynamic_percent_for_update);
commentarycl("use_true_range_for_calc: ", use_true_range_for_calc);
commentarycl("use_bar_range_for_calc: ", use_bar_range_for_calc);
commentarycl("average_length: ", average_length);
commentarycl("dynamic_factor: ", dynamic_factor);
commentarycl("update_DVT_if_X_percent_below_ATR: ", update_DVT_if_X_percent_below_ATR);
commentarycl("percent_below_DVT_for_update: ", percent_below_DVT_for_update);
commentarycl("ChartColor: ", false);
commentarycl("points_padding: ", points_padding);
commentarycl("percent_padding: ", percent_padding);
commentarycl("___ATR_SETTINGS____2: ", false);
commentarycl("use_atr_2: ", false);
commentarycl("HighPrice_2: ", C);
commentarycl("LowPrice_2: ", c);
commentarycl("Length_2: ", 14);
commentarycl("Multi_2: ", 2);
commentarycl("percent_above_for_trigger_2: ", false);
commentarycl("percent_off_atr_2: ", false);
commentarycl("percent_below_atr_2: ", false);
commentarycl("percent_above_atr_2: ", false);
commentarycl("update_DVT_if_X_percent_above_ATR_2: ", false);
commentarycl("percent_above_DVT_for_update_2: ", false);
commentarycl("use_dynamic_percent_for_update_2: ", false);
commentarycl("use_true_range_for_calc_2: ", false);
commentarycl("use_bar_range_for_calc_2: ", false);
commentarycl("average_length_2: ", false);
commentarycl("dynamic_factor_2: ", false);
commentarycl("update_DVT_if_X_percent_below_ATR_2: ", false);
commentarycl("percent_below_DVT_for_update_2: ", false);
commentarycl("points_padding_2: ", false);
commentarycl("percent_padding_2: ", false);
commentarycl("___ATR_SETTINGS____3: ", ___ATR_SETTINGS____3);
commentarycl("use_atr_3: ", use_atr_3);
commentarycl("show_second_dvt: ", show_second_dvt);
commentarycl("HighPrice_3: ", c);
commentarycl("LowPrice_3: ", c);
commentarycl("Length_3: ", Length_3);
commentarycl("Multi_3: ", Multi_3);
commentarycl("percent_above_for_trigger_3: ", false);
commentarycl("percent_off_atr_3: ", false);
commentarycl("percent_below_atr_3: ", false);
commentarycl("percent_above_atr_3: ", false);
commentarycl("update_DVT_if_X_percent_above_ATR_3: ", false);
commentarycl("percent_above_DVT_for_update_3: ", percent_above_DVT_for_update_3);
commentarycl("use_dynamic_percent_for_update_3: ", false);
commentarycl("use_true_range_for_calc_3: ", false);
commentarycl("use_bar_range_for_calc_3: ", false);
commentarycl("average_length_3: ", false);
commentarycl("dynamic_factor_3: ", false);
commentarycl("update_DVT_if_X_percent_below_ATR_3: ", false);
commentarycl("percent_below_DVT_for_update_3: ", false);
commentarycl("points_padding_3: ", false);
commentarycl("percent_padding_3: ", false);
commentarycl("use_stoch_agreement: ", use_stoch_agreement);
commentarycl("stoch_agreement_length: ", stoch_agreement_length);
commentarycl("stoch_agreement_level: ", stoch_agreement_level);
commentarycl("int Moving_Average_Type: ", Moving_Average_Type);
commentarycl("int MACD_FastLength: ", MACD_FastLength);
commentarycl("int MACD_SlowLength: ", MACD_SlowLength);
commentarycl("int MACD_MACDLength: ", MACD_MACDLength);
commentarycl("MACD_Adap_EFF_Length: ", MACD_Adap_EFF_Length);
commentarycl("MACD_Adap_Fast_Length: ", MACD_Adap_Fast_Length);
commentarycl("MACD_Adap_Slow_Length: ", MACD_Adap_Slow_Length);
commentarycl("___ATR_SETTINGS____4: ", ___ATR_SETTINGS____4);
commentarycl("use_atr_4: ", use_atr_4);
commentarycl("use_atr_4_for_dvt: ",false);
commentarycl("HighPrice_4: ", c);
commentarycl("LowPrice_4: ", c);
commentarycl("Length_4: ", Length_4);
commentarycl("Multi_4: ", Multi_4);
commentarycl("percent_above_for_trigger_4: ", false);
commentarycl("percent_off_atr_4: ", false);
commentarycl("percent_below_atr_4: ", percent_below_atr_4);
commentarycl("percent_above_atr_4: ", false);
commentarycl("update_DVT_if_X_percent_above_ATR_4: ", false);
commentarycl("percent_above_DVT_for_update_4: ", false);
commentarycl("use_dynamic_percent_for_update_4: ", false);
commentarycl("use_true_range_for_calc_4: ", false);
commentarycl("use_bar_range_for_calc_4: ", false);
commentarycl("average_length_4: ", false);
commentarycl("dynamic_factor_4: ", false);
commentarycl("update_DVT_if_X_percent_below_ATR_4: ", false);
commentarycl("percent_below_DVT_for_update_4: ", false);
commentarycl("points_padding_4: ", false);
commentarycl("percent_padding_4: ", false);
commentarycl("____Agressive_Oversold_Entry___: ", ____Agressive_Oversold_Entry___);
commentarycl("use_aggressive_oversold_entry: ", use_aggressive_oversold_entry);
commentarycl("sma_length: ", sma_length);
commentarycl("sma_length_2_for_close: ", sma_length_2_for_close);
commentarycl("num_bars_below_sma: ", num_bars_below_sma);
commentarycl("percent_candle_body: ", percent_candle_body);
commentarycl("size_of_candle: ", size_of_candle);
commentarycl("oversold_vertical_color: ", oversold_vertical_color);
commentarycl("int aggressive_vertical_weight: ", aggressive_vertical_weight);
commentarycl("____ABC_PULLBACK___: ", ____ABC_PULLBACK___);
commentarycl("use_ABC_pullback: ", use_ABC_pullback);
commentarycl("long_MA_filter: ", long_MA_filter);
commentarycl("percent_above_long_MA: ", percent_above_long_MA);
commentarycl("c_wave_min_length: ", c_wave_min_length);
commentarycl("ABC_vertical_color: ", ABC_vertical_color);
commentarycl("int ABC_weight: ", ABC_weight);
commentarycl("num_bars_to_keep_ABC_alive: ", num_bars_to_keep_ABC_alive);
commentarycl("use_arrow_instead: ", false);
commentarycl("allow_new_ABC_without_crossing_ATR: ", allow_new_ABC_without_crossing_ATR);
commentarycl("____ABC_PULLBACK_2___: ", ____ABC_PULLBACK_2___);
commentarycl("use_ABC_pullback_2: ", use_ABC_pullback_2);
commentarycl("long_MA_filter_2: ", long_MA_filter_2);
commentarycl("percent_above_long_MA_2: ", percent_above_long_MA_2);
commentarycl("c_wave_min_length_2: ", c_wave_min_length_2);
commentarycl("ABC_vertical_color_2: ", ABC_vertical_color_2);
commentarycl("int ABC_weight_2: ", ABC_weight_2);
commentarycl("num_bars_to_keep_ABC_alive_2: ", num_bars_to_keep_ABC_alive_2);
commentarycl("use_arrow_instead_2: ", false);
commentarycl("allow_new_ABC_without_crossing_ATR_2: ", allow_new_ABC_without_crossing_ATR_2);}
end;
end;
var: StreamWriter myFile(null),
date_str(""),
inversion_str(""),
r_date_str(""),
status(""),
num_bull_sequential(0),
demark_count(0),
num_bear_sequential(0),
inversion_bar(0),
chart_group("file"),
a_active(0),
var0(0),
Ribbon_color_val(0),
file_name(""),
BOC(0);
vars: exit_stop_price_out(0),
exit_stop_price_previous(0),
num_sts_out(0),
mpos_out(0),
changed_stops(0);
method void write_file()
begin
if do_output then begin
mpos_out = marketposition;
If BarType <= 1 then Var0 = ABSVALUE( VOLUME + OPENINT );
If BarType > 1 then Var0 = ABSVALUE( VOLUME );
a_active = 0;
If HIGHEST(Var0, 20) <> 0 then begin
Condition2 = Var0 = NTHMINLIST( 1, Var0, Var0[ 1], Var0[ 2], Var0[ 3], Var0[ 4], Var0[ 5], Var0[ 6], Var0[ 7], Var0[ 8], Var0[ 9], Var0[ 10], Var0[ 11], Var0[ 12], Var0[ 13], Var0[ 14], Var0[ 15], Var0[ 16], Var0[ 17], Var0[ 18], Var0[ 19]);
Condition3 = Var0 = NTHMINLIST( 2, Var0, Var0[ 1], Var0[ 2], Var0[ 3], Var0[ 4], Var0[ 5], Var0[ 6], Var0[ 7], Var0[ 8], Var0[ 9], Var0[ 10], Var0[ 11], Var0[ 12], Var0[ 13], Var0[ 14], Var0[ 15], Var0[ 16], Var0[ 17], Var0[ 18], Var0[ 19]);
If Condition2 OR Condition3 then begin
If LOW = LOWEST( LOW , 20) then begin
a_active = -1;
end;
If HIGH = HIGHEST( HIGH , 20) then begin
a_active = 1;
end;
end;
end;
if mpos_out = 0 then Begin
num_sts_out = 0;
end;
if (num_long_dvts = 1 and num_long_dvts[1] = 0) Or
did_reentry then Begin
commentarycl("Setting Num_STS_Out");
num_sts_out = 1;
end;
if mpos_out = 1 and mpos_out[1] = 1 and exit_stop_price_out <> exit_stop_price_out[1] then Begin
num_sts_out = num_sts_out + 1;
end;
commentarycl("num_long_dvts: ", num_long_dvts);
commentarycl("num_long_dvts[1]: ", num_long_dvts[1]);
commentarycl("mpos_out: ", mpos_out);
commentarycl("mpos_out[1]: ", mpos_out[1]);
commentarycl("Setting num_sts_out: ", num_sts_out);
If c > c[4] then begin
num_bull_sequential = num_bull_sequential + 1;
demark_count = num_bull_sequential;
end else begin
num_bull_sequential = 0;
end;
If c < c[4] then begin
num_bear_sequential = num_bear_sequential + 1;
demark_count = -1 * num_bear_sequential;
end else begin
num_bear_sequential = 0;
end;
if(num_long_dvts = 0 and num_long_dvts[1] > 0) then Begin
inversion_bar = currentbar-1;
end;
if num_long_dvts = 1 and num_long_dvts[1] = 0 then Begin
inversion_bar = currentbar;
end;
inversion_str = Bardatetime[Barssinceentry].ToString();
date_str = Bardatetime[currentbar - last_bar].ToString();
r_date_str = Bardatetime.ToString();
if marketposition = 0 then begin
status = "Flat";
end else Begin
status = "Long";
end;
file_name = directory + file_prefix + symbol + "_" + Bartype.ToString() + "_" + Barinterval.ToString() + "_" + chart_group + "_data.csv";
//commentarycl("Attempting to write file");
//commentarycl("Writing file");
if currentbar = 1 then begin
myFile = StreamWriter.Create(file_name);
end else Begin
myFile = StreamWriter.Create(file_name, true);
end;
if myFile <> null then begin
commentarycl("Date Str: ", date_str);
commentarycl("{'STS':'" + numtostr(exit_stop_price_out, 4) +
"','prev_STS':'" + Numtostr(exit_stop_price_previous, 4) +
"','date': '" + date_str +
"','r_date': '" + r_date_str +
"','i_date': '" + inversion_str +
"','status':'" + status +
"','group':'" + chart_group +
"','atrs':'" + numtostr(atrs,0) +
"','demark':'" + numtostr(demark_count,0) +
"','num_STS':'" + numtostr(changed_stops, 0) +
"','o':'" + numtostr(open,2) +
"','h':'" + numtostr(high,2) +
"','l':'" + numtostr(low,2) +
"','c':'" + numtostr(close,2) +
"','a':'" + numtostr(a_active,0) +
"','r1':'" + numtostr(value11,6) +
"','r2':'" + numtostr(value12,6) +
"','r3':'" + numtostr(value13,6) +
"','r4':'" + numtostr(value14,6) +
"','rD':'" + numtostr(value9,6) +
"','rC':'" + numtostr(Ribbon_color_val,0) +
"','EP':'" + numtostr(entryprice,2) +
"','TZ':'" + numtostr(Sess1endtime,0) +
"','BOC':'" + numtostr(BOC,0) +"'}");
myFile.WriteLine("{'STS':'" + numtostr(exit_stop_price_out, 4) +
"','prev_STS':'" + Numtostr(exit_stop_price_previous, 4) +
"','date': '" + date_str +
"','r_date': '" + r_date_str +
"','i_date': '" + inversion_str +
"','status':'" + status +
"','group':'" + chart_group +
"','atrs':'" + numtostr(atrs,0) +
"','demark':'" + numtostr(demark_count,0) +
"','num_STS':'" + numtostr(changed_stops, 0) +
"','o':'" + numtostr(open,2) +
"','h':'" + numtostr(high,2) +
"','l':'" + numtostr(low,2) +
"','c':'" + numtostr(close,2) +
"','a':'" + numtostr(a_active,0) +
"','r1':'" + numtostr(value11,6) +
"','r2':'" + numtostr(value12,6) +
"','r3':'" + numtostr(value13,6) +
"','r4':'" + numtostr(value14,6) +
"','rD':'" + numtostr(value9,6) +
"','rC':'" + numtostr(Ribbon_color_val,0) +
"','EP':'" + numtostr(entryprice,2) +
"','TZ':'" + numtostr(Sess1endtime,0) +
"','BOC':'" + numtostr(BOC,0) +"'}");
end;
myFile.Close();
end;
end;
vars:
TrendLine myDTTrendLine(null),
bars_since_bear(0),
exit_stop_price(0),
shares_to_buy(0),
wider_dvt(0),
trying_to_enter(false),
limit_entry_price(0);
if bpt_valid_license_DVT then begin
//if true then begin
debug();
app_type = GetAppInfo(aiApplicationType);
app_optimizing = GetAppInfo(Aioptimizing);
NShares = RoundToNShares*(Intportion((StartCapital + PercentCompounding*.01*netprofit)/(C*RoundToNShares)));
if mpos = 0 then begin
shares_to_buy = nshares;
id_2 = -1;
temp_id = -1;
myTrendLine1 = null;
changed_stops = 0;
end else Begin
shares_to_buy = nshares / 2;
end;
force_start = false;
mpos = marketposition;
BOC = 0;
if mpos = 0 then begin
did_reentry = false;
end;
if stop_drawing[0] and stop_drawing[1] then Begin
stop_drawing = false;
end;
if mpos = 0 and mpos[1] = 1 then Begin
//stop_drawing = true;
end;
if mpos = 0 then begin
num_long_dvts_3 = 0;
end;
//commentarycl("stop_drawing: ", stop_drawing);
//commentarycl("stop_drawing[30]: ", stop_drawing[30]);
//commentarycl("stop_drawing[31]: ", stop_drawing[31]);
//commentarycl("has_been_red: ", has_been_red);
commentarycl("exit_stop_price[1]: ", exit_stop_price[1]);
commentarycl("Above for Reentry: ", exit_stop_price[1] * (1 + percent_above_for_reentry/100));
commentarycl("C: ", c);
commentarycl("Price check passed: ", c > exit_stop_price[1] * (1 + percent_above_for_reentry/100));
if mpos = 0 and mpos[1] = 1 and l < exit_stop_price[1] and c > exit_stop_price[1] * (1 + percent_above_for_reentry/100)
and allow_up_candle_reentry_on_close = 1
and (require_up_candle = 0 or c > o ) then Begin
if use_cash then begin
if buy_on_close = 0 then begin
buy ("stop reentry market") NShares shares next bar market;
BOC = 2;
end else Begin
buy ("stop reentry") NShares shares this bar on close;
BOC = 1;
end;
end else Begin
if buy_on_close = 0 then begin
buy ("stop reentry ma nc") next bar market;
BOC = 2;
end else Begin
buy ("stop reentry nc") this bar on close;
BOC = 1;
end;
end;
num_long_dvts = 1;
force_start = true;
did_reentry = true;
end;
if did_reentry[1] = true then Begin
num_long_dvts = 1;
end;
Value1 = bptMaDeluxe2(
MA_1_Price,
MA_1_Type,
MA_1_Length,
false,
0,
0,
false,
false,
false,
0,
0.1,
false,
false,
false,
3,
3,
color_val);
Value2 = bptMaDeluxe2(
MA_2_Price,
MA_2_Type,
MA_2_Length,
false,
0,
0,
false,
false,
false,
0,
0.1,
false,
false,
false,
3,
3,
color_val_2);
Value3 = bptMaDeluxe2(
MA_3_Price,
MA_3_Type,
MA_3_Length,
false,
0,
0,
false,
false,
false,
0,
0.1,
false,
false,
false,
3,
3,
color_val_3);
Value4 = bptMaDeluxe2(
MA_4_Price,
MA_4_Type,
MA_4_Length,
false,
0,
0,
false,
false,
false,
0,
0.1,
false,
false,
false,
3,
3,
color_val_4);
CalcATR();
CalcATR_3();
CalcATR_4();
Plot_ATRS();
calc_low_for_trailing();
calc_BPT_MACDi();
check_inversion();
how_many_color_changes();
how_many_color_changes_2();
place_trailing_stops();
//commentarycl("Last Tracked Price: ", last_tracked);
inputs: reentry_vertical_color( "cyan" ),
reentry_line_weight( .5 ),
trending_reentry_vertical_color( "cyan" ),
trending_reentry_line_weight( .5 );
vars: isLastBarOfDay(false);
// Check if the current bar's time is equal to the session end time
if Time = sessionEndTime(1, Regularsession) then begin
isLastBarOfDay = true;
end else begin
isLastBarOfDay = false;
end;
if mpos = 0 and do_index_reentry = 1 and use_cash = false then Begin
if c < highest(h, num_bars_back_for_high) * (1 - (percent_decline_for_reentry/100)) then Begin
if buy_on_close = 0 or (buy_next_bar_market_EOD = 1 and isLastBarOfDay) then begin
if use_cash then begin
buy ("reentry ma") shares_to_buy shares next bar market;
end else Begin
buy ("reentry ma nc") next bar market;
end;
BOC = 4;
end else Begin
if use_cash then begin
buy ("reentry") shares_to_buy shares this bar on close;
end else Begin
buy ("reentry nc") this bar on close;
end;
BOC = 3;
end;
num_sts_out = 1;
draw_vertical_line(reentry_vertical_color, reentry_line_weight);
did_reentry = true;
end;
end;
if num_long_dvts = 1 and num_long_dvts[1] = 0 and manage_trades_with_STS = false then Begin
changed_stops = 0;
if ues_limit_entries = 1 then Begin
trying_to_enter = true;
limit_entry_price = high * (1 + limit_entry_percent_padding/100);
end else begin
if use_cash then begin
if buy_on_close = 0 or (buy_next_bar_market_EOD = 1 and isLastBarOfDay) then begin
if use_cash then begin
buy shares_to_buy shares next bar market;
end else Begin
buy next bar market;
end;
BOC = 2;
end else begin
if use_cash then begin
buy shares_to_buy shares this bar on close;
end else Begin
buy this bar on close;
end;
BOC = 1;
end;
end else Begin
if buy_on_close = 0 or (buy_next_bar_market_EOD = 1 and isLastBarOfDay) then begin
if use_cash then begin
buy shares_to_buy shares next bar market;
end else Begin
buy next bar market;
end;
BOC = 2;
end else begin
if use_cash then begin
buy shares_to_buy shares this bar on close;
end else Begin
buy this bar on close;
end;
BOC = 1;
end;
end;
end;
end;
if trying_to_enter then Begin
buy ("limit entry") next bar at limit_entry_price stop;
end;
if (mpos = 0 and mpos[1] = 1) or mpos = 1 then Begin
trying_to_enter = false;
end;
if use_wider_DVT_for_first_2 = 1 then Begin
if last_tracked > 0 and last_tracked < last_text_price then begin
wider_dvt = last_tracked;
end;
if last_text_price > 0 and (last_text_price < last_tracked or last_tracked = 0) then Begin
wider_dvt = last_text_price;
end;
if (num_long_dvts = 2 or num_long_dvts = 0) and wider_dvt[1] < wider_dvt then Begin
wider_dvt = wider_dvt[1];
end;
if num_long_dvts = 0 and num_long_dvts[1] = 2 and c > wider_dvt then begin
num_long_dvts = 2;
end;
end;
//commentarycl("last_tracked: ", last_tracked);
//commentarycl("last_text_price: ", last_text_price);
//commentarycl("num_long_dvts: ", num_long_dvts);
//commentarycl("did_reentry: ", did_reentry);
//commentarycl("wider_dvt: ", wider_dvt);
//commentarycl("mpos: ", mpos);
//commentarycl("num_long_dvts: ", num_long_dvts);
//commentarycl("num_long_dvts[1]: ", num_long_dvts[1]);
//commentarycl("allow_trending_reentry: ", allow_trending_reentry);
if mpos = 0 and num_long_dvts > num_long_dvts[1] and allow_trending_reentry = 1 and trying_to_enter = false then Begin
if buy_on_close = 0 or (buy_next_bar_market_EOD = 1 and isLastBarOfDay) then begin
if use_cash then begin
buy ("trend reentry market") shares_to_buy shares next bar market;
end else Begin
buy ("trend reentry mrktnc") next bar market;
end;
BOC = 2;
changed_stops = 0;
end else Begin
if use_cash then begin
buy ("trending reentry") shares_to_buy shares this bar on close;
end else Begin
buy ("trending reentry nc") this bar on close;
end;
BOC = 1;
changed_stops = 0;
end;
draw_vertical_line(trending_reentry_vertical_color, reentry_line_weight);
end;
commentarycl("last_tracked: ", last_tracked);
commentarycl("last_text_price: ", last_text_price);
commentarycl("wider_dvt: ", wider_dvt);
If (last_tracked > 0 and above_200_ok) then begin
commentarycl("Setting above 200");
exit_stop_price = last_tracked * (1 - stop_padding_percent/100);
end;
if (last_tracked = 0 or above_200_ok = false) then begin
commentarycl("Setting below 200");
if atrs_3 = 1 and num_long_dvts_3 > 0 and use_wider_dvt_patch > 0 then begin
exit_stop_price = last_tracked * (1 - stop_padding_percent/100);
end else begin
exit_stop_price = last_text_price * (1 - stop_padding_percent/100);
end;
end;
if use_wider_DVT_for_first_2 = 1 then Begin
exit_stop_price = wider_dvt * (1 - stop_padding_percent/100);
end;
if use_stop_for_exit =0 then begin
if num_long_dvts = 0 and num_long_dvts[1] > 0 then Begin
sell this bar on close;
end;
end else Begin
commentarycl("Trying to set stop price");
commentarycl("exit_stop_price: ", exit_stop_price);
commentarycl("num_long_dvts: ", num_long_dvts);
commentarycl("num_long_dvts_3: ", num_long_dvts_3);
if atrs = -1 and c < exit_stop_price and use_exit_stop_patch = 1 then Begin
exit_stop_price = exit_stop_price[1];
end;
if ((did_reentry = false or num_long_dvts > 0) and (manage_trades_with_STS = false or mpos[1] = 1) and c > exit_stop_price) Or
(mpos = 1 and use_wider_dvt_patch > 0 and c > exit_stop_price) then begin
commentarycl("exit_stop_price: ", exit_stop_price);
if round_to_big_point_for_stops = 1 then Begin
TickSize = MinMove / PriceScale * BigPointValue;
NumberOfTicks = exit_stop_price / TickSize;
NearestTick = Round(NumberOfTicks, 0);
NearestValidPrice = NearestTick * TickSize;
sell ("stop exit BP") next bar at NearestValidPrice stop;
if NearestValidPrice <> NearestValidPrice[1] or changed_stops = 0 then Begin
changed_stops = changed_stops + 1;
end;
draw_DVT(NearestValidPrice, changed_stops, changed_stops[1], NearestValidPrice, "White");
exit_stop_price_out = NearestValidPrice;
end else begin
sell ("stop exit") next bar at exit_stop_price stop;
if exit_stop_price <> exit_stop_price[1] or changed_stops = 0 then Begin
changed_stops = changed_stops + 1;
end;
draw_DVT(exit_stop_price, changed_stops, changed_stops[1], exit_stop_price[1], "White");
exit_stop_price_out = exit_stop_price;
commentarycl("Set Stop Exit at: ", exit_stop_price);
end;
end;
end;
if mpos = 1 then Begin
if Barssinceentry >= use_targets_after_x_bars then Begin
if use_percent_targets = 1 then Begin
sell ("percent target") Currentshares * percent_shares_for_target/100 shares next bar at Entryprice * (1 + (percent_target/100)) limit;
end;
if use_points_targets = 1 then Begin
sell ("points target") Currentshares * percent_shares_for_target/100 shares next bar at entryprice + points_target limit;
end;
end;
end;
if exit_stop_price_out <> exit_stop_price_out[1] and can_draw() then Begin
commentarycl("Drawing STS text");
if num_long_dvts_3 = 0 and exit_stop_price_out <> exit_stop_price_out[1] then begin
//commentarycl("Setting Exit Stop Label");
//commentarycl("exit_stop_price_out: ", exit_stop_price_out);
commentarycl("Drawing STS");
id = draw_text( "STS: " +numtostr(exit_stop_price_out, 2), exit_stop_price_out);
end;
if num_long_dvts_3 > 0 and exit_stop_price_out <> exit_stop_price_out[1] then begin
//commentarycl("Setting Exit Stop Label");
//commentarycl("exit_stop_price_out: ", exit_stop_price_out);
commentarycl("Drawing 2vt");
id_2 = draw_text( "2vt: " +numtostr(exit_stop_price_out, 2), exit_stop_price_out);
Text_setcolor(id_2, White);
end;
end;
if mpos = 0 and trying_to_enter and c < exit_stop_price_out then Begin
trying_to_enter = false;
end;
if mpos = 0 then Begin
exit_stop_price_previous = 0;
end;
if mpos = 1 and exit_stop_price_previous <> exit_stop_price_out then Begin
exit_stop_price_previous = exit_stop_price_out;
end;
//commentarycl("mpos[1]: ", mpos[1]);
//commentarycl("manage_trades_with_STS: ", manage_trades_with_STS);
if getappinfo(aiOptimizing) < 1 then begin
if manage_trades_with_STS and mpos > 0 and num_long_dvts > 0 then Begin
GD.Items["sts_active_"+Chart_Prefix+symbol] = true astype bool;
end else Begin
GD.Items["sts_active_"+Chart_Prefix+symbol] = false astype bool;
end;
end;
end;
//if getappinfo(aiOptimizing) < 1 and (mod(CurrentTime, 10) = 0 or Barstatus(1) = 2) then begin
if getappinfo(aiOptimizing) < 1 then begin
write_file();
end;Editor is loading...
Leave a Comment