Советник Buy stop Sell stop Grid в виде класса - страница 2

 

Понемногу добавляю функционал. При старте, если нет позиций и отложенных ордеров выставляются отложенные stop ордера. Описание версии закреплено в файле класса:

//+------------------------------------------------------------------+
//| 1.001:                                                           |
//|   when starting, sets Buy stop and sell stop                     |
//+------------------------------------------------------------------+

ds

 

Интересно - в функции CBuyStopSellStopGrid::RefreshRates(void) проверяется на нулевые значения аск-бид.

Это что, реально возможная ситуация ?

В целом - больше замечаний нет, код - вполне себе прозрачен и ясен.

 
George Merts:

Интересно - в функции CBuyStopSellStopGrid::RefreshRates(void) проверяется на нулевые значения аск-бид.

Это что, реально возможная ситуация ?

В целом - больше замечаний нет, код - вполне себе прозрачен и ясен.


Да, это жизнь и здесь всё возможно. А вообще проверку на нулевые значения ввёл из-за тестера (было дело примерно год назад: при старте первые т=несколько тиков тестер отдавал нули).

Понемногу добавляю функционал. В OnTradeTransaction, если появилась позиция ("DEAL_ENTRY_IN") - удаляем отложенные ордера и заново выставляем два stop отложенных ордера:

//+------------------------------------------------------------------+
//| 1.001:                                                           |
//|   when starting, sets Buy stop and sell stop                     |
//| 1.002:                                                           |
//|   OnTradeTransaction: if DEAL_ENTRY_IN delete all pending orders,|
//|   and, sets Buy stop and sell stop                               |
//+------------------------------------------------------------------+

BuyStopSellStopGrid 1.002

Пока такие недостатки:

  1. на каждом тике проверяется кол-во позиций и отложенных ордеров
  2. нет контроля выполнения торговых операций (выставление отложенных ордеров) - советник никак не обрабатывает ситуации, если отложенный ордер не выставился
  3. безразмерный набор позиций - никак не обрабатываются ситуации когда, допустим, набирали, набирали Buy позиции, а потом бац и сработала Sell позиция...
 
Vladimir Karputov:

Да, это жизнь и здесь всё возможно. А вообще проверку на нулевые значения ввёл из-за тестера (было дело примерно год назад: при старте первые т=несколько тиков тестер отдавал нули).

Понемногу добавляю функционал. В OnTradeTransaction, если появилась позиция ("DEAL_ENTRY_IN") - удаляем отложенные ордера и заново выставляем два stop отложенных ордера:


Пока такие недостатки:

  1. на каждом тике проверяется кол-во позиций и отложенных ордеров
  2. нет контроля выполнения торговых операций (выставление отложенных ордеров) - советник никак не обрабатывает ситуации, если отложенный ордер не выставился
  3. безразмерный набор позиций - никак не обрабатываются ситуации когда, допустим, набирали, набирали Buy позиции, а потом бац и сработала Sell позиция...

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

При поступлении сигнала на покупку, выше хая первой свечи выставляется сетка BUY STOP ордеров. Ниже цены закрытия SELL STOP ордера. Закрывать ордера надо, не по факту прибыли, или убытка, а по другому сигналу. При более, или менее вменяемых сигналах, такая система, будет работать всегда.

Это просто вариант, все можно сделать и по другому.

 
Ibragim Dzhanaev:
 

При более, или менее вменяемых сигналах, такая система, будет работать всегда.

Лучше бы написал - "если покупать на минимумах, а продавать на максимумах - всегда будешь в профите". 

Кто ж спорит ? Тут вся проблема - "вменяемые сигналы" найти.

 

Версия 1.003:

//+------------------------------------------------------------------+
//| 1.001:                                                           |
//|   when starting, sets Buy stop and sell stop                     |
//| 1.002:                                                           |
//|   OnTradeTransaction: if DEAL_ENTRY_IN delete all pending orders,|
//|   and, sets Buy stop and sell stop                               |
//| 1.003:                                                           |
//|   OnTradeTransaction: DEAL_ENTRY_IN                              |
//|      DEAL_TYPE_BUY => ClosePositions(POSITION_TYPE_SELL)         |
//|      DEAL_TYPE_SELL => ClosePositions(POSITION_TYPE_BUY)         |
//|   PlacesXXXX:                                                    |
//|      "RefreshRates()" is now inside the "PlacesXXXX"             |
//|   OnTradeTransaction:                                            |
//|      a "while" loop for "PlacesXXXX"                             |
//+------------------------------------------------------------------+

  • теперь при открытии позиции ВСЕ противоположные позиции закрываются.
  • получение текущих цен перенесено внутрь функций PlacesBuy и PlacesSell - это защита от гепа и проскальзываний.
  • в OnTradeTransaction отложенные ордера размещаются в цикле while - так сказать долбим сервер до победного конца :) - не самое лучшее решение, но пока останется.

Собственно теперь можно думать:

  1. Как лучше наращивать позиции (расчёт объёмов лота)
  2. Что делать с противоположными позициями...

 
George Merts:

Лучше бы написал - "если покупать на минимумах, а продавать на максимумах - всегда будешь в профите". 

Кто ж спорит ? Тут вся проблема - "вменяемые сигналы" найти.


Самый простой и очевидный вариант.


 
А  можно мне к вам присоединиться?
 

Или так.


 
Artiom Morochin:
А  можно мне к вам присоединиться?

Готово. Подключите Хранилище, обновите файлы проектов из Хранилища.

Причина обращения: