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

//+------------------------------------------------------------------+
//| proba_cycle.mq4 |
//| Copyright © 2006, MetaQuotes Software Corp. |
//| http://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
Админ
6600
Rashid Umarov 2006.03.28 16:55  
Что же ты накосячил? в цикле вместо
for (i=HistoryTotal()-1;i==1;i--)

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


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

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


а это вообще выкинуть
kz=i-1;
Rashid Umarov
Админ
6600
Rashid Umarov 2006.03.29 09:53  
?!!
Anatoli
31
Anatoli 2006.03.29 10:11  
Большое спасибо 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 2012.08.14 05:18  

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

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