Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Sergey Kamishnikov
338
Sergey Kamishnikov  

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

Действующая функция 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);


}

Alekseu Fedotov
989
Alekseu Fedotov  
Finbest:

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

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

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

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

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

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


Здесь, глянь.
Sergey Kamishnikov
338
Sergey Kamishnikov  

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

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

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

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

Alexey Navoykov
4317
Alexey Navoykov  

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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий