Как выполнить только однократное действие по серии убытков? - страница 3

 
OnGoing:

И все-тки. Почему Вы считаете, что обязательно необходимо брать точку отсчета по времени?

Ведь можно просто вести статистику (подсчет) убыточных позиций на лету (да хоть по значению баланса).

Можно-ли? Попробуйте :-) Можно, если советник сам закрывает позицию и перед закрытием смотрит, убыточная она или нет. Если убыточная, то после закрытия что-то там отмечает, куда-нибудь пишет. А если позиция закрылась сама по стоплоссу, как советнику узнать, что она была убыточная? Никак не узнать. Надо читать историю сделок. А если мы историю читаем, то и нет смысла что-либо писать в файл. Потому что какая разница, откуда читать, из истории или из файла? Нет разницы.
 
KimIV:
Можно-ли? Попробуйте :-) Можно, если советник сам закрывает позицию и перед закрытием смотрит, убыточная она или нет. Если убыточная, то после закрытия что-то там отмечает, куда-нибудь пишет. А если позиция закрылась сама по стоплоссу, как советнику узнать, что она была убыточная? Никак не узнать. Надо читать историю сделок. А если мы историю читаем, то и нет смысла что-либо писать в файл. Потому что какая разница, откуда читать, из истории или из файла? Нет разницы.

Совершенно без разницы каким образом или при помощи чего закрываются сделки.

Просто запоминаем предыдущее значение баланса и сравниваем его с текущим. Убыток или профит легко выявляются.

 
Я пишу сразу все виртуальные сделки паралельно с реальными. Когда например по какойто причине останавливается реальная торговля(запрет после серии убыточных например 2) начинается если появилась положительная виртуальная сделка например
 
OnGoing:

Совершенно без разницы каким образом закрываются сделки.

Просто запоминаем предыдущее значение баланса и сравниваем его с текущим. Убыток или профит легко выявляются.


Уверен, что найдутся какие-нибудь штучки, которые изменяют баланс. И эти штучки - не торговые сделки. Например, в инсте вознаграждения, бонусы, отмена бонусов, а где-то могут быть комиссии на открытие сделки. Вообщем, отслеживание баланса тоже не катит.
 
KimIV:

Уверен, что найдутся какие-нибудь штучки, которые изменяют баланс. И эти штучки - не торговые сделки. Например, в инсте вознаграждения, бонусы, отмена бонусов, а где-то могут быть комиссии на открытие сделки. Вообщем, отслеживание баланса тоже не катит.

Это может быть и другой советник.
 

Может есть еще вариант как можно пофиксить закрытие позы по стопу или тейку?

Если есть, то можно было бы все же менять глобалку на лету.

Если нет, то конечно, остается только выборка из истории.

PS: Хотя, если управление торговлей принципиально должно быть извне, не из торгующего эксперта, и без внесения изменений в последний, то в любом случае придется выбирать из истории. Т.к. есть еще и закрытие по рынку.

 

Игорь, а что Вам мешает отследить первую убыточную сделку по истории. Берёте время закрытия этой первой убыточной сделки и сохраняете его в глобальной переменной терминала. Контролируете количество OrdersHistoryTotal() при его увеличении проходитесь опять по истории с момента первой убыточной сделки: проверяете количество произошедших сделок и результат последней сделки. Если последняя сделка прибыльная, переменную времени заполняете текущим временем - т.е. обнуляем "счётчик убыточных ордеров". При превышении убыточных сделок заданного порогового значения, присваиваете глобальной переменной значение запрещения торговли. Это запрещение можно записать и в глобальную переменную терминала, для предотвращения случайного сбрасывания запрета. А для пользователя во внешних переменных задать параметр разрешения одноразового сброса этого запрета. Как-то так.

P.S. Может показалось "сложным"?! Я таким образом контролирую в ММ количество сделок в убыточной серии у которых лот остаётся не изменным (начальным у первой убыточной сделки), а затем, если серии не вышла в плюс, размер лота уменьшается до % от контролируемой величины (Баланс\Эквити\Свободная маржа\Заданная величина+результат торговли) - и работает... ;)

 
IgorM:случаем никто не писал модуля переноса сделок в глобальные переменные? хотя бы с десяток последних ордеров, хотелось бы на готовую реализацию взглянуть

ктонить делал примерно так:

int start(){
   int i,total_H,total_G;
   string s[];
   total_H = OrdersHistoryTotal();
   ArrayResize(s,total_H);
   for(i=0;i<total_H;i++){
      OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      s[i] = StringConcatenate(OrderType() , "/" , OrderTicket(), "/" , OrderSymbol(), "/" , OrderOpenPrice() , 
                               "/" , OrderClosePrice(), "/",OrderLots());
      if(OrderProfit()<0) GlobalVariableSet(s[i],-1); else GlobalVariableSet(s[i],1);
   }
return(0);
}
написать перенос истории сделок в глобальные переменные не проблема, просто еще не придумал что помещать в глоб.переменные и как побыстрее распарсить строку(имя переменной)
 

IgorM:

как побыстрее распарсить строку(имя переменной)


В Standard C++ Library от мелкомягких есть поддержка TR1 Regular expressions, думаю экспортировать все нужные функции через dll-ку не составит труда.
 
alsu:
В Standard C++ Library от мелкомягких есть поддержка TR1 Regular expressions, думаю экспортировать все нужные функции через dll-ку не составит труда.
http://msdn.microsoft.com/en-us/library/bb982727.aspx
Причина обращения: