Как кодировать? - страница 23

 
islandrock:
этот код не заставляет каждую сделку, которую открывает мой советник, истекать через 12 часов с момента открытия...

Времяистечения ордера работает только для отложенных ордеров. Если OrderSend() имеет значение OP_BUY или OP_SELL, вам необходимо установить время действия ордера в коде. Вот один простой пример.

int OrderTime;

OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask+TakeProfit*Point,"timetest",16384,0,Green)

OrderTime=TimeCurrent();

int total = OrdersTotal();

for(int cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if((OrderType() <= OP_SELL) && (OrderSymbol() == Symbol()) )

{

if(OrderType()==OP_BUY && TimeCurrent()-OrderTime>(12*60)*60)

{

OrderClose(OrderTicket(),LotsOptimized(),Bid,3,Violet);

}

}

}

Wackena

 

код не работает правильно

Я использовал его для отправки по электронной почте статуса моего счета каждый час. однако после того, как я скомпилировал и загрузил его. он прекрасно отправил это письмо на следующий час в минуту № 59, как и должно быть, а затем он больше не отправлял его. что я делаю не так? он выглядит идеально?

Мне не нужно это в минуту #59, мне нужно это каждый час!!!

bool mail;

int start()

{

if (Minute()>=59 && !mail){

SendMail("Account Status","Account Balance is="+DoubleToStr(AccountBalance(),2)+"_Account Equity is="+DoubleToStr(AccountEquity(),2)+

"_Прибыль счета="+DoubleToStr(AccountProfit(),2)+"_Маржа счета="+DoubleToStr(AccountMargin(),2)+

"_Account Free Margin is="+DoubleToStr(AccountFreeMargin(),2));

mail=true;

}

 

возможно, вам просто нужно поставить mail = false в какой-то момент или просто убрать этот тест на переменную mail, потому что, конечно, текущий код будет отправлять только 1 письмо.

 

Какой тест на переменную mail?... я не понимаю, пожалуйста, объясните...

Как насчет того, что сразу после mail=true я ставлю

if (minute()<=58 && !mail)

mail= false;

Как думаете, это может сработать?...

Я думаю, что это неправильно закодировано

 

Я думаю, вы можете поставить

if (minute()<=58 && mail) // будьте внимательны, не !mail, а mail

mail = false;

и это должно быть, но за пределами вашего первого if, так что не после mail = true; а после }

Возможно, есть лучшие способы написать это, но это должно сработать.

 

попробую.

Спасибо, попробую... сообщу вам через два часа.

 

отлично работает.... или, по крайней мере, похоже на то.

 

нужна помощь с этой частью кода

может ли кто-нибудь подсказать мне, как правильно написать это? я пытаюсь выделить открытые сделки на покупку и продажу по отдельности...

т.е.: если открытый bid > 2.

если open ask >2

Остальное я понял, просто не могу правильно написать эту часть.

Я знаю, что это просто, но я вырываю свои волосы.

 

кого-нибудь?

Кто-нибудь? Может, это был плохой вопрос?

 

if(Open[0] > 2){ //открытая ставка

//ваш код

}

if(Open[0]+(Ask-Bid) > 2){ //открыть запрос

//ваш код

}

в зависимости от вашего брокера, бэктестинг открытого запроса может не работать