[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 622
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Еще теоретический вопрос.
Переменные при их объявлении в советнике имеют нулевое значение. Предположим, советник проработал неделю, переменные поменяли свое значение, и вот мне понадобилось внести изменения в код советинка. Я вношу изменения, перекомпилирую, запускаю торговлю. Вопрос такой: какие значения будут у глобальных переменных? Нулевые или те, что были ранее до компиляции?
При использовании функций -- те, что были до компиляции. чтобы изенить их значение, надо зайти во вкладку сервис в терминале.там во вкладку глобальные переменные и вручную изменить значения переменных на нужные вам(0)
rigonich
отлично! Наконец я получил что нужно!
Всем спасибо, и даже Тарасу! )))
МИСТИКА!!!
вот это
-----------------------------------------------------------------------------
pp_sell=(-(PriceOpenLastClosePos()-PriceCloseLastPos())*100000); // для валют с размерностью ЕВРО
Print (pp_sell);
------------------------------------------------------------------------------------
Принтует -10 , как и положено ибо последняя сделка SELL имеет профит 10
НО ЕСЛИ ВСТАВИТЬ НЕСКОЛЬЕО НИЧЕГО НЕ МЕНЯЮЩИХ УСЛОВИЙ МЕЖДУ ПРИНТОМ И переменнмыми, например вот так
----------------------------------------------------------------------------
pp_sell=(-(PriceOpenLastClosePos()-PriceCloseLastPos())*100000); // для валют с размерностью ЕВРО
if ( Hour()>=10 && Hour()<20)
{
if ( Stoch_1>Stoch_2) return(0);
else {
if (OrdersTotal()==0)
{ PlaySound("ok.wav");
if ( GetTypeLastClosePos()==1) Print (pp_sell);
}
Print("___");
}
}
return(0);
}
------------------------------------------------------------------------------------
то все работает, но принтует -9 !!!!
в чем секрет?
да вот как этот момент мне хорошо известен...
напишите плиз, кусочек с запросом тикета последней сделики из истории...а я по нему поймаю логику...
МИСТИКА!!!
вот это
-----------------------------------------------------------------------------
pp_sell=(-(PriceOpenLastClosePos()-PriceCloseLastPos())*100000); // для валют с размерностью ЕВРО
Print (pp_sell);
------------------------------------------------------------------------------------
Принтует -10 , как и положено ибо последняя сделка SELL имеет профит 10
НО ЕСЛИ ВСТАВИТЬ НЕСКОЛЬЕО НИЧЕГО НЕ МЕНЯЮЩИХ УСЛОВИЙ МЕЖДУ ПРИНТОМ И переменнмыми, например вот так
----------------------------------------------------------------------------
pp_sell=(-(PriceOpenLastClosePos()-PriceCloseLastPos())*100000); // для валют с размерностью ЕВРО
if ( Hour()>=10 && Hour()<20)
{
if ( Stoch_1>Stoch_2) return(0);
else {
if (OrdersTotal()==0)
{ PlaySound("ok.wav");
if ( GetTypeLastClosePos()==1) Print (pp_sell);
}
Print("___");
}
}
return(0);
}
------------------------------------------------------------------------------------
то все работает, но принтует -9 !!!!
в чем секрет?
Вы работаете с ненормализованными значениями типа дабл. в таких случаях неточности вычислений накапливаются и могут в конечном итоге становится значимыми. ведь это вы думаете, что вставляете НИЧЕГО НЕ МЕНЯЮЩИЕ УСЛОВИЯ, на самом деле вы заставляете компьютер производить ненужные вычисления, да и условия ваши не НИЧЕГО НЕ МЕНЯЮЩИЕ .
И вы уверены, что функции PriceOpenLastClosePos() и PriceCloseLastPos() возващают значения для одной и той же позиции?
{
начиная с if(OrderCloseTime()>time)... далее непонятно что откуда берется...ну да ладно...
тикет он принтует, но только последний. А что делать с предпоследним? я просто не вижу как из этого когда вытекает второй тикет?
первый я просто пишу Print LastClosetPoz()
взять 2й (i) ? OrderSelect(2,SELECT_BY_POS,MODE_HISTORY)....??
Print LastClosetPoz(2) ?? явная ошибка, но было бы логично :)))
пытаюсь вместо OrderTicket в строке Ticket=OrderTicket(); поставить другие параметры закрытой сделки (цены открытия закрытия стопы тейи) -не дает. принтует единицу
Вы работаете с ненормализованными значениями типа дабл. в таких случаях неточности вычислений накапливаются и могут в конечном итоге становится значимыми. ведь это вы думаете, что вставляете НИЧЕГО НЕ МЕНЯЮЩИЕ УСЛОВИЯ, на самом деле вы заставляете компьютер производить ненужные вычисления, да и условия ваши не НИЧЕГО НЕ МЕНЯЮЩИЕ .
не жирно ли для компьютера за 4 строчки накопить целых 10% погрешности??? :))))))))))) (на больших числах - меньше 10%)
1) что там копить, если закрытый ордер фиксирован, и все его параметры "не плавают"?
2) условия НИКАК не касались расчета выводимого параметра. Они были лишь шлагбаумом -пустить-не пустить...
3) и почему тогда результат не плавает в пределах работы одного советника, а плавает от одного к другому?
начиная с if(OrderCloseTime()>time)... далее непонятно что откуда берется...ну да ладно...
тикет он принтует, но только последний. А что делать с предпоследним? я просто не виду как из этого когда вытекает второй тикет?
взять 2й (i) ? OrderSelect(2,SELECT_BY_POS,MODE_HISTORY)....??
1. напишите плиз, кусочек с запросом тикета последней сделики из истории.. --ваш вопрос.
2.Чтобы найти предпоследний,надо запомнить тикет последнего(напимер, в переменной, допустим А) , еще раз запустить цикл, и "пропуcтить" этот ордер.То есть, например, изменить строчку
if(OrderSymbol()==Symbol()) на if(OrderSymbol()==Symbol()&&OrderTicket()!=A), или добавить строчку if(Ticket()!=A)continue;
И я вам уже объяснял,что индекс ордера не всегда будет совпадать с тем, каким по счету он закрыт, так как рыноные и отложенные ордера учитываются вместе, и последние не имеют цены закрытия, поэтоу для нахождения последнего закрытого ордера и перебираются в цикле все ордера, и ищется ордер, с самым большим временем закрытия.То есть последний закрытый вполне может иметь индекс, например, 3, а предпоследний --7.