Dukascopy Support Board
http://www.dukascopy.com/swiss/english/forex/jforex/forum/

подскажите решение
http://www.dukascopy.com/swiss/english/forex/jforex/forum/viewtopic.php?f=175&t=56480
Page 1 of 1

Author:  Nikolas1986 [ Thu 03 May, 2018, 13:02 ]
Post subject:  подскажите решение

пример проблемного блока, который работает на историческом тестере но не работает в реальном времени ( на демо). по идеи он должен ограничивать колличество одновременно открытых позиций , ( что бы стратегия не строчила их как автомат) не более 2 открытых позиций в текущий момент, одна шортовая и одна лонговая позиция. Т.е., если у нас уже есть одна открытая шортовая сделка, то этот группа блоков должна разрешить открыть только одну и только лонговую позицию ( и наоборот). если же у нас уже есть 2 (шорт+ лонг) открытые сделки, то открытие новых не возможно до тех пор пока одна из открытых не будет закрыта.
В реале же , это комбинаця блоков может открыть и 3 и более сделок.
Проблема как мне видиться кроется в том, что когда ты запускаешь его на тестере то открытие и закрытие сделок происходит виртуально и мгновенно, поэтому после поступления тика который устраивает всем критериям стратегии, происходит открытие сделки (мгновенно), после этого в стратегию поступают новые данные и т.д...
Однако в режиме реального времени после срабатывания стратегии происходит отправка ордера на покупку или продажу, ордер отправляется на сервер и там ждет своего исполнения, после чего информация об открытой сделке возвращается обратно к нам и только потом может быть считана и принята во внимание стратегией. На демо счтете это время может быть по моим наблюдения !заметным!,
как мне кажется именно это и происходит в первых блоках "if" где сравнивается колличество открытых позиций с нулем, и если оно равно 0, то это позволяет безприпятственно пройти дальше к блоку "openmarket".
ОДНАКО с момента отправки стратегией ордера на покупку или продажу и до открытия ордера, в стратегию поступают другие тики. а т.к. "positionviewer" еще не видит открытых позиций, то этот же блок "if" опять решает что колличество открытых позиций по прежнему равно 0, и опять разрешает "openmarket"у отправить запрос на новый ордер. в теории колличество таких открытых ордеров может быть равно колличеству тиков которые поступят в стратегию в период с момента отправки первого ордера и до получения иноформации о том что ордер открыт. на моей практике это обычно бывало 2-3-4 лишних ордера.
После того как инфа об открытии ордера вернется, и будет считана,этот набор блоков начинает работать так как нужно. надеюсь вы уловили суть.

Подскажите решение плиз, я много перепробовал вариантов но пока безрезультатно.

в идеале как мне видется нужно написать какой то костыль который после каждого отправленного ордера будет какое то время выжидать (5-10сек). т.к. в режиме реального времени но только на реальном счете, эти задержки (по открытию позиции) еще длиннее!!

не исключаю, что я в чем то ошибся, тогда плиз укажите мне на ошибку. БОЛЬШОЕ СПАСИБО заранее!

P.S. Обратите внимание , что, при старте стратегии нужно выставить параметр "start_strategy_time" на 1-2 минуты позже чем текущее время, для того что бы стартегия запустилась, в противном случаи " last_tick_bid" будет сравниваться с еще не поступившим значением "historical_candle- candle_open", вызывая тем самым ошибку и останавливая работу стратегии"
Image
Image

Attachments:
Безымянный1.png [192.37 KiB]
Downloaded 1453 times
Безымянный.png [227 KiB]
Downloaded 1497 times
mistake_03_05_2018.vfs [46.22 KiB]
Downloaded 817 times

Author:  vadim_berezhnoj [ Mon 14 May, 2018, 15:02 ]
Post subject:  Re: подскажите решение

Добрый день.

Скоректированная логика в прикрепленном файле.

Attachments:
mistake_fixed.vfs [38.67 KiB]
Downloaded 808 times

  Page 1 of 1