Максимальный торговый (расчетный) баланс за несколько прошедших дней. Функция

 

Необходимо получить максимальный баланс за несколько последних дней.

Действующая функция AccountBalance возвращает только баланс на текущую дату.

Я же хочу рассчитать торговый баланс на основе закрытых сделок (баланс от торговых операций), без поступлений и снятий.

Не работал раньше с закрытыми сделками и функциями времени.

Может кто уже решил этот вопрос - спасибо за комментарии.

Как код скорректировать, чтобы он показывал верные результаты.

double GetMaksBalans(string sy="", int op=-1, int mn=-1)

{

double p1=0, p2=0, p3=0, p4=0, p5=0, p6=0, p7=0, p8=0, p9=0, p10=0, p11=0, p12=0, p13=0, p14=0, p15=0,

p16=0, p17=0, p18=0, p19=0, p20=0, p21=0, p22=0, p23=0, p24=0, p25=0, p26=0, p27=0, p28=0, p29=0, p30=0;

double Bal_1=0, Bal_2=0, Bal_3=0, Bal_4=0, Bal_5=0, Bal_6=0, Bal_7=0, Bal_8=0, Bal_9=0, Bal_10=0, Bal_11=0, Bal_12=0, Bal_13=0, Bal_14=0, Bal_15=0,

Bal_16=0, Bal_17=0, Bal_18=0, Bal_19=0, Bal_20=0, Bal_21=0, Bal_22=0, Bal_23=0, Bal_24=0, Bal_25=0, Bal_26=0, Bal_27=0, Bal_28=0, Bal_29=0, Bal_0=0;

int i, k=OrdersHistoryTotal();

int N=30;


if (sy=="0") sy=Symbol();

for (i=0; i<k; i++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (mn<0 || OrderMagicNumber()==mn) {

if (TimeCurrent()-N*24*60*60<OrderCloseTime())

{p30+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 30 дней

if (TimeCurrent()-(N-1)*24*60*60<OrderCloseTime())

{p29+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 29 дней

if (TimeCurrent()-(N-2)*24*60*60<OrderCloseTime())

{p28+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 28 дней

if (TimeCurrent()-(N-3)*24*60*60<OrderCloseTime())

{p27+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 27 дней

if (TimeCurrent()-(N-4)*24*60*60<OrderCloseTime())

{p26+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 26 дней

if (TimeCurrent()-(N-5)*24*60*60<OrderCloseTime())

{p25+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 25 дней

if (TimeCurrent()-(N-6)*24*60*60<OrderCloseTime())

{p24+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 24 дней

if (TimeCurrent()-(N-7)*24*60*60<OrderCloseTime())

{p23+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 23 дней

if (TimeCurrent()-(N-8)*24*60*60<OrderCloseTime())

{p22+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 22 дней

if (TimeCurrent()-(N-9)*24*60*60<OrderCloseTime())

{p21+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 21 дней

if (TimeCurrent()-(N-10)*24*60*60<OrderCloseTime())

{p20+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 20 дней

if (TimeCurrent()-(N-11)*24*60*60<OrderCloseTime())

{p19+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 19 дней

if (TimeCurrent()-(N-12)*24*60*60<OrderCloseTime())

{p18+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 18 дней

if (TimeCurrent()-(N-13)*24*60*60<OrderCloseTime())

{p17+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 17 дней

if (TimeCurrent()-(N-14)*24*60*60<OrderCloseTime())

{p16+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 16 дней

if (TimeCurrent()-(N-15)*24*60*60<OrderCloseTime())

{p15+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 15 дней

if (TimeCurrent()-(N-16)*24*60*60<OrderCloseTime())

{p14+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 14 дней

if (TimeCurrent()-(N-17)*24*60*60<OrderCloseTime())

{p13+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 13 дней

if (TimeCurrent()-(N-18)*24*60*60<OrderCloseTime())

{p12+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 12 дней

if (TimeCurrent()-(N-19)*24*60*60<OrderCloseTime())

{p11+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 11 дней

if (TimeCurrent()-(N-20)*24*60*60<OrderCloseTime())

{p10+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 10 дней

if (TimeCurrent()-(N-21)*24*60*60<OrderCloseTime())

{p9+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 9 дней

if (TimeCurrent()-(N-22)*24*60*60<OrderCloseTime())

{p8+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 8 дней

if (TimeCurrent()-(N-23)*24*60*60<OrderCloseTime())

{p7+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 7 дней

if (TimeCurrent()-(N-24)*24*60*60<OrderCloseTime())

{p6+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 6 дней

if (TimeCurrent()-(N-25)*24*60*60<OrderCloseTime())

{p5+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 5 дней

if (TimeCurrent()-(N-26)*24*60*60<OrderCloseTime())

{p4+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 4 дней

if (TimeCurrent()-(N-27)*24*60*60<OrderCloseTime())

{p3+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 3 дней

if (TimeCurrent()-(N-28)*24*60*60<OrderCloseTime())

{p2+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 2 дней

if (TimeCurrent()-(N-29)*24*60*60<OrderCloseTime())

{p1+=OrderProfit()+OrderCommission()+OrderSwap();} // прибыль за 1 дней

}

}

}

}

}

Max_Balans_30 = AccountBalance ();

Bal_0 = AccountBalance () - p1; GlobalVariableSet("Balans01", AccountBalance () - p1);

Bal_1 = AccountBalance () - p2; GlobalVariableSet("Balans02", AccountBalance () - p2);

Bal_2 = AccountBalance () - p3; GlobalVariableSet("Balans03", AccountBalance () - p3);

Bal_3 = AccountBalance () - p4; GlobalVariableSet("Balans04", AccountBalance () - p4);

Bal_4 = AccountBalance () - p5; GlobalVariableSet("Balans05", AccountBalance () - p5);

Bal_5 = AccountBalance () - p6; GlobalVariableSet("Balans06", AccountBalance () - p6);

Bal_6 = AccountBalance () - p7; GlobalVariableSet("Balans07", AccountBalance () - p7);

Bal_7 = AccountBalance () - p8; GlobalVariableSet("Balans08", AccountBalance () - p8);

Bal_8 = AccountBalance () - p9; GlobalVariableSet("Balans09", AccountBalance () - p9);

Bal_9 = AccountBalance () - p10; GlobalVariableSet("Balans10", AccountBalance () - p10);

Bal_10 = AccountBalance () - p11; GlobalVariableSet("Balans11", AccountBalance () - p11);

Bal_11 = AccountBalance () - p12; GlobalVariableSet("Balans12", AccountBalance () - p12);

Bal_12 = AccountBalance () - p13; GlobalVariableSet("Balans13", AccountBalance () - p13);

Bal_13 = AccountBalance () - p14; GlobalVariableSet("Balans14", AccountBalance () - p14);

Bal_14 = AccountBalance () - p15; GlobalVariableSet("Balans15", AccountBalance () - p15);

Bal_15 = AccountBalance () - p16; GlobalVariableSet("Balans16", AccountBalance () - p16);

Bal_16 = AccountBalance () - p17; GlobalVariableSet("Balans17", AccountBalance () - p17);

Bal_17 = AccountBalance () - p18; GlobalVariableSet("Balans18", AccountBalance () - p18);

Bal_18 = AccountBalance () - p19; GlobalVariableSet("Balans19", AccountBalance () - p19);

Bal_19 = AccountBalance () - p20; GlobalVariableSet("Balans20", AccountBalance () - p20);

Bal_20 = AccountBalance () - p21; GlobalVariableSet("Balans21", AccountBalance () - p21);

Bal_21 = AccountBalance () - p22; GlobalVariableSet("Balans22", AccountBalance () - p22);

Bal_22 = AccountBalance () - p23; GlobalVariableSet("Balans23", AccountBalance () - p23);

Bal_23 = AccountBalance () - p24; GlobalVariableSet("Balans24", AccountBalance () - p24);

Bal_24 = AccountBalance () - p25; GlobalVariableSet("Balans25", AccountBalance () - p25);

Bal_25 = AccountBalance () - p26; GlobalVariableSet("Balans26", AccountBalance () - p26);

Bal_26 = AccountBalance () - p27; GlobalVariableSet("Balans27", AccountBalance () - p27);

Bal_27 = AccountBalance () - p28; GlobalVariableSet("Balans28", AccountBalance () - p28);

Bal_28 = AccountBalance () - p29; GlobalVariableSet("Balans29", AccountBalance () - p29);

Bal_29 = AccountBalance () - p30; GlobalVariableSet("Balans30", AccountBalance () - p30);



if (Bal_28 > Max_Balans_30) Max_Balans_30 = Bal_28;

if (Bal_28 > Max_Balans_30) Max_Balans_30 = Bal_28;

if (Bal_27 > Max_Balans_30) Max_Balans_30 = Bal_27;

if (Bal_26 > Max_Balans_30) Max_Balans_30 = Bal_26;

if (Bal_25 > Max_Balans_30) Max_Balans_30 = Bal_25;

if (Bal_24 > Max_Balans_30) Max_Balans_30 = Bal_24;

if (Bal_23 > Max_Balans_30) Max_Balans_30 = Bal_23;

if (Bal_22 > Max_Balans_30) Max_Balans_30 = Bal_22;

if (Bal_21 > Max_Balans_30) Max_Balans_30 = Bal_21;

if (Bal_20 > Max_Balans_30) Max_Balans_30 = Bal_20;

if (Bal_19 > Max_Balans_30) Max_Balans_30 = Bal_19;

if (Bal_18 > Max_Balans_30) Max_Balans_30 = Bal_18;

if (Bal_17 > Max_Balans_30) Max_Balans_30 = Bal_17;

if (Bal_16 > Max_Balans_30) Max_Balans_30 = Bal_16;

if (Bal_15 > Max_Balans_30) Max_Balans_30 = Bal_15;

if (Bal_14 > Max_Balans_30) Max_Balans_30 = Bal_14;

if (Bal_13 > Max_Balans_30) Max_Balans_30 = Bal_13;

if (Bal_12 > Max_Balans_30) Max_Balans_30 = Bal_12;

if (Bal_11 > Max_Balans_30) Max_Balans_30 = Bal_11;

if (Bal_10 > Max_Balans_30) Max_Balans_30 = Bal_10;

if (Bal_9 > Max_Balans_30) Max_Balans_30 = Bal_9;

if (Bal_8 > Max_Balans_30) Max_Balans_30 = Bal_8;

if (Bal_7 > Max_Balans_30) Max_Balans_30 = Bal_7;

if (Bal_6 > Max_Balans_30) Max_Balans_30 = Bal_6;

if (Bal_5 > Max_Balans_30) Max_Balans_30 = Bal_5;

if (Bal_4 > Max_Balans_30) Max_Balans_30 = Bal_4;

if (Bal_3 > Max_Balans_30) Max_Balans_30 = Bal_3;

if (Bal_2 > Max_Balans_30) Max_Balans_30 = Bal_2;

if (Bal_1 > Max_Balans_30) Max_Balans_30 = Bal_1;

if (Bal_0 > Max_Balans_30) Max_Balans_30 = Bal_0;


GlobalVariableSet("Max_Balans_30",Max_Balans_30);

return(Max_Balans_30);


}

 
Finbest:

Необходимо получить максимальный баланс за несколько последних дней.

Действующая функция AccountBalance возвращает только баланс на текущую дату.

Я же хочу рассчитать торговый баланс на основе закрытых сделок (баланс от торговых операций), без поступлений и снятий.

Не работал раньше с закрытыми сделками и функциями времени.

Может кто уже решил этот вопрос - спасибо за комментарии.

Как код скорректировать, чтобы он показывал верные результаты.


Здесь, глянь.
 

Спасибо, видимо ошибка в работе с датой времени.

Интересная исходная строка:

d0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));

Попробую отредактировать и переписать.

 

о боже, скоко быдлокода...

Один выложил, а второй это в цитате дублирует, так и весь форум засрать недолго