Скачать MetaTrader 5

пожалуйста помогите разобраться со считыванием параметров ордеров в цикле

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Anatoli
31
Anatoli  
Пожалуйста, помогите разобраться почему не считываются параметры ордеров из цикла.
Ситуация заключается в следующем : имеется некоторое количество закрытых ордеров, а открытых ордеров нет. Необходимо определить суммарный профит нескольких последних ордеров, например их сумму. Пытаюсь их просуммировать через цикл. Не получается. Внутри цикла программа почему то видит только самый первый ( по времени) из всех т. е. с индексом =0, что соответствует totalhistory()=1, хотя закрытых ордеров в примере 2 и вне цикла totalhistory()=2 .

//+------------------------------------------------------------------+
//| proba_cycle.mq4 |
//| Copyright © 2006, MetaQuotes Software Corp. |
//| https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
//-----input parameters

extern double StopLoss=20;
extern double TakeProfit=20;
extern int k=0;// для первого вхождения

double Gross_Profit;

int start()
{

double c,kz;
int ticket,i;

if (k==0)
{ ticket= OrderSend(Symbol(),OP_SELL,0.1,Bid,4,Bid+0.0030,Bid-0.0030,"", 123,0,Blue);
ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,4,Ask-0.0020,Ask+0.0020,"",123, 0,Blue);k=1; }

if(OrdersTotal()==0 )
{
OrderSelect(HistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY);
if (OrderProfit()<0)c=-1;
}

if(OrdersTotal()==0 && c==-1)
{ //Print( "HistoryTotal()+++ =",HistoryTotal());
// { OrderSelect(1,SELECT_BY_POS, MODE_HISTORY);
Print (" до цикла i=",1," OrderProfit=",OrderProfit()," HistoryTotal()=", HistoryTotal());}
// { OrderSelect(0,SELECT_BY_POS, MODE_HISTORY);
Print (" до цикла i=",0," OrderProfit=",OrderProfit()," HistoryTotal()=", HistoryTotal());}
Gross_Profit=0;
//total=HistoryTotal();
for (i=HistoryTotal()-1;i==1;i--)
{ kz=i-1;
if (OrderSelect(kz,SELECT_BY_POS, MODE_HISTORY))
Print ("из цикла kz=",kz," OrderProfit=",OrderProfit()," HistoryTotal()=", HistoryTotal());
}
}

return(0);
}





Для for(i= HistoryTotal();i==1;i--) в журнал из цикла вообще ничего не пишется :


16:52:54 probe_cycle EURUSD,M1: loaded successfully
16:52:54 probe_cycle inputs: StopLoss=20; TakeProfit=20; k=0;
16:52:54 2006.02.16 21:11 probe_cycle EURUSD,M1: open #1 sell 0.10 EURUSD at 1. 1887 sl: 1.1917 tp: 1.1857 ok
16:52:54 2006.02.16 21:11 probe_cycle EURUSD,M1: open #2 buy 0.10 EURUSD at 1.1890 sl: 1.1870 tp: 1.1910 ok
16:52:54 2006.02.17 00:50 Tester: take profit #2 at 1.1910 (1.1910 / 1.1913)




Для for(i= HistoryTotal()-1;i==1;i--) видит только ордер с индексом 0 :

17:10:03 probe_cycle EURUSD,M1: loaded successfully
17:10:03 probe_cycle inputs: StopLoss=20; TakeProfit=20; k=0;
17:10:03 2006.02.16 21:11 probe_cycle EURUSD,M1: open #1 sell 0.10 EURUSD at 1. 1887 sl: 1.1917 tp: 1.1857 ok
17:10:03 2006.02.16 21:11 probe_cycle EURUSD,M1: open #2 buy 0.10 EURUSD at 1.1890 sl: 1.1870 tp: 1.1910 ok
17:10:03 2006.02.17 00:50 Tester: take profit #2 at 1.1910 (1.1910 / 1.1913)
17:10:03 2006.02.17 16:18 probe_cycle EURUSD,M1: из цикла kz=0 OrderProfit=20 HistoryTotal()=2
17:10:03 2006.02.17 16:18 probe_cycle EURUSD,M1: из цикла kz=0 OrderProfit=20 HistoryTotal()=2
17:10:03 2006.02.17 16:18 probe_cycle EURUSD,M1: из цикла kz=0 OrderProfit=20 HistoryTotal()=2
17:10:03 2006.02.17 16:18 probe_cycle EURUSD,M1: из цикла kz=0 OrderProfit=20 HistoryTotal()=2

И.т.д.

В чем может заключаться ошибка? Заранее признателен за помощь.
Rashid Umarov
Админ
12162
Rashid Umarov  
Что же ты накосячил? в цикле вместо
for (i=HistoryTotal()-1;i==1;i--)

надо
for (i=HistoryTotal()-1;i>=0;i--)


а это вообще выкинуть
kz=i-1;
Anatoli
31
Anatoli  
Rosh:
Что же ты накосячил? в цикле вместо
for (i=HistoryTotal()-1;i==1;i--)

надо
for (i=HistoryTotal()-1;i>=0;i--)


а это вообще выкинуть
kz=i-1;
Rashid Umarov
Админ
12162
Rashid Umarov  
?!!
Anatoli
31
Anatoli  
Большое спасибо Rosh! Все встало на нужные места. На автопилоте писал граничное значение конца цикла for (i=HistoryTotal();i==1;i--) , вместо условия его продолжения.
for (i=HistoryTotal();i>=1;i--)Вроде и описание оператора цикла раньше глядел, но видно случай именно тот, когда смотришь в книгу, а видишь фигу……
А тут посмотрел еще раз, а там и в правду блин……. не граничное значение, а черным по белому написано :
Cycle operator for
Expression1 describes the cycle initialization. Expression2 is the conditional test for the cycle termination. If it is true, the loop body for operator will be executed. The cycle repeats until Expression2 becomes false. If it is false, the cycle will be terminated, and the control will be given to the next operator[/i]. Expression3 is calculated after each iteration.
for (Expression1; Expression2; Expression3)
operator;
Короче, посыпаю голову пеплом и завтра же начну строить памятник своей невнимательности. Еще раз спасибо.
Zaebali_Suki2
39
Zaebali_Suki2  

ПРИВЕТ ФОРУМНЫЕ ПИДОРАСЫ!!!
НЕ ПОРА ЛИ С УТРЕЦА,
ХУЙ СОСУНУТЬ ВАМ С ЛЕГОНЦА?
(ПОРА ПОРА)

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