OP
Junior Member
Joined: Aug 2016
Posts: 65
|
jcl, thanks for your input. I analyzed the error further and found, that the dayHigh(int zone,int day) is the problem, in particular the call of: int morning = timeOffset(zone,day,StartMarket/100,StartMarket%100); The first time the dayHigh function is called, the timeOffset is wrong, after that it calculated it correct. Here is the script to demonstrate that: the result of the script below looks like that (please watch for the morning value). before DH = mydayHigh(ET,0)evening 0, morning 1, StarMarket 830,timeOffset(zone,day,StartMarket/100,StartMarket mod 100) 1, zone: -5, vHH 1.178200, day 0 before dh_1 = mydayHigh(ET,0)evening 0, morning 24, StarMarket 830,timeOffset(zone,day,StartMarket/100,StartMarket mod 100) 24, zone: -5, vHH 1.179920, day 0 before 2nd time: DH = mydayHigh(ET,0)evening 0, morning 24, StarMarket 830,timeOffset(zone,day,StartMarket/100,StartMarket mod 100) 24, zone: -5, vHH 1.179920, day 0
#include <profile.c>
int g_count;
int skipWeekend(int day)
{
int d = dow(0)-day;
while(d < 0) d += 7;
if(d == SATURDAY) day += 1;
if(d == SUNDAY) day += 2;
return day;
}
var mydayHigh(int zone,int day)
{
if(is(INITRUN)) return 0;
day = skipWeekend(day);
int evening = timeOffset(zone,day,EndMarket/100,EndMarket%100);
int morning = timeOffset(zone,day,StartMarket/100,StartMarket%100);
print(TO_LOG, "evening %d, morning %d, StarMarket %d,timeOffset(zone,day,StartMarket/100,StartMarket mod 100) %d, zone: %d", evening, morning, StartMarket,timeOffset(zone,day,StartMarket/100,StartMarket%100), zone);
if(evening >= morning) {
print(TO_LOG,", evening >= morning %d",evening >= morning);
return priceHigh(evening);}
var vHH = 0;
for(g_count = evening; g_count <= morning; g_count++)
vHH = max(vHH,priceHigh(g_count));
print(TO_LOG, ", vHH %f, day %d", vHH, day);
return vHH;
}
var mydayLow(int zone,int day)
{
if(is(INITRUN)) return 0;
day = skipWeekend(day);
int evening = timeOffset(zone,day,EndMarket/100,EndMarket%100);
int morning = timeOffset(zone,day,StartMarket/100,StartMarket%100);
if(evening >= morning) return priceLow(evening);
var vLL = 999999;
for(g_count = evening; g_count <= morning; g_count++)
vLL = min(vLL,priceLow(g_count));
return vLL;
}
int debug = 1;
double DH , DL, atr_avg;
function run()
{
set(LOGFILE);
BarPeriod =5;
LookBack = 100;//40*24+1;
UnstablePeriod=10;
Hedge = 0;
//Stop = 15 * PIP;
//Trail = 10 * PIP;
Spread=0.0;
Lots=100;
StartDate = 20150101;
EndDate = 20150202;
///////////////////////////////////////////////////////////////////////////////////////////////////////
int marketstart = 930;
int marketend=1600;
vars Price = series(priceClose());
StartMarket = 830; // open_range_start
EndMarket = 1030; // end
static int cur_day = 0 ,is_new_day = 1;
static bool is_after_or;
bool is_week_day=ldow(ET,0) <= FRIDAY;
vars crosses = series(0);
/// EVERY RUN
// asset("APPL");
TimeFrame=24;
atr_avg = ATR(1);//(0.05 *((ATR(1) + ATR(2))/2));
TimeFrame=1;
/////////////////// / N E W - D A Y //////////////////////////////////////////////////////
if ( is_week_day && ldow(ET,0) != cur_day){ // new day
cur_day = ldow(ET,0);
is_new_day = 1;
is_after_or = false;
}
////////////////////// Market Open range/////////////////////////////////////////////////////////////////////////////////
if( !is_after_or and ltod(ET,0) > EndMarket and Bar > LookBack ) {
print (TO_LOG, "\nbefore DH = mydayHigh(ET,0)");
DH = mydayHigh(ET,0);
DL = mydayLow(ET,0);
print (TO_LOG, "\nbefore dh_1 = mydayHigh(ET,0)");
double dh_1 = mydayHigh(ET,0);
print (TO_LOG, "\nbefore 2nd time: DH = mydayHigh(ET,0)");
DH = mydayHigh(ET,0);
is_new_day = 0;
is_after_or = true;
string msg_text = strf( "\n*** Debug INSIDE market open range: Bar Date %s \nDH: %f,dh_1 %f, DL: %f, dayLow(ET,0) %f, ,StartMarket %d, EndMarket %d ",
datetime(), DH,dh_1 ,DL, dayLow(ET,0), StartMarket, EndMarket );
if( debug ) print(TO_LOG,msg_text);
}
}
|