neophyte
neophyte личный блог
22 февраля 2016, 01:06

Кто сказал что на смартлабе не у кого спрашивать совета?

"...
Если негде взять совета
У него берем!"
© К/ф «Веселая хроника опасного путешествия» (Арго).


Кто сказал что на смартлабе не у кого спрашивать совета? Это не так.
Есть люди, которые могут дать совет, и делают это совершенно бескорыстно.
Вот я вчера посетовал, что замучился с программированием и не знаю как прикрутить к советнику простую функцию. 
Мне тут же навалили кучу предложений и прототипов, с помощью которых я сегодня за 15 минут слепил рабочий блок кода, включающий режим антимартингейла.
Антимартингейл — это когда при серии прибылей, например на тренде, объем торговли наращивается по сравнению с обычным. А когда идет серия убытков, например на боковике робот «запилил», то объем уменьшается.

Парни. Большое спасибо. Вы мне реально помогли. Извините, что не упоминаю всех персонально, но советов действительно было много. И в комментариях, и в личку.
Для тех, кто просил сообщить о результате, публикую блок кода, сделанного с помощью ваших советов и предложений:

//---Мультипликатор риска
if (OrdersHistoryTotal()==0) KMM=1; // Если история пустая, множитель стартового лота равен единице
if (OrdersHistoryTotal()!=0) // Если история не пустая, рассчитываем множитель стартового лота
{
for (int i=OrdersHistoryTotal()-1;i>-1;i--) // Перебор всех закрытых позиций и удаленных ордеров
{
bool OrderSelec=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); // Выбираем ордер
if(OrderCloseTime()!=0 && OrderSymbol()==Symbol() && OrderProfit()>0) // Если выбранный ордер закрыт с прибылью, увеличиваем объем позиции...
{
KMM=AsymmetryRiskFactor;
break;
}
if(OrderCloseTime()!=0 && OrderSymbol()==Symbol() && OrderProfit()<0) // Если выбранный ордер закрыт с убытком, уменьшаем объем позиции...
{
KMM=1/AsymmetryRiskFactor;
break;
}
}
}

В 7 строк, как обещал, не уложился. Если не считать пустые строки со скобками, то получилось 10.
Две ушло на прерывание цикла, о котором я как-то не подумал, но которое оказалось очень кстати. А еще одна на проверку истории пустая/не пустая. Об этом тоже не подумал. Ни в начале теста ни на старте нового счета робот без этого не будет знать что делать.

P.S. Если я, как распоследний чайник в программировании, чего напутал, буду благодарен за критику. Правда советник работает.

P.P.S. Этот же блок позволяет ввести в советник и режим мартингейла. Для этого достаточно задать значение параметра AsymmetryRiskFactor меньше единицы. :)

Результаты.
Антимартингейл выключен. Коэффициент AsymmetryRiskFactor=1.

Исходный код.
Кто сказал что на смартлабе не у кого спрашивать совета?

Новый код.
Кто сказал что на смартлабе не у кого спрашивать совета?

Разницы нет, результаты теста полностью идентичны. 

Антимартингейл включен. AsymmetryRiskFactor=2, т.е. расчетная позиция удваивается при профите и делится на двое при убытке. Соотношение объемов после прибыли и убытка 4:1.

Исходный код.
Кто сказал что на смартлабе не у кого спрашивать совета?

Новый код.
Кто сказал что на смартлабе не у кого спрашивать совета?

В результатах есть несущественная разница, которая вызвана различием обработки данных.
В исходном коде прибыль или убыток считаются по балансу, т.е. учитывается и своп и комиссия. В новом коде только результат торговли по данной сделке. Без учета свопа и комиссии.

14 Комментариев
  • Дмитрий Ш
    22 февраля 2016, 01:12
    Земной поклон за то, что не убили лудомана!)))
      • Дмитрий Ш
        22 февраля 2016, 01:29
        Николай Скриган, Может, в этом и есть«смысл жизни»? Если никто другой от Ваших убытков не страдает(но и профиту не рад), то может, пусть Ваша игра Вас радует или печалит… Зачем что-то менять?
          • Дмитрий Ш
            22 февраля 2016, 01:35
            Николай Скриган,  Не был ли Ваш коммент в полном согласии с моиим?;)
      • Евгений Черных
        22 февраля 2016, 08:49
        Николай Скриган, Но как только Вы спросите, что делать с недвижной, то тут все будет 50 на 50 :) Так что ценности в совете по такому вопросу не будет никакой
  • Dordje
    22 февраля 2016, 01:26
    mql5?
  • Niktesla (бывш. Бабёр-Енот)
    22 февраля 2016, 09:47
    Непонятно как нововведения на размер лота влияют, потому что макслот очень быстро выскакивает — уберите первые ~250 сделок из теста, тогда будет понятно как эта фича влияет на поведение эквити кривой во времени приближенном к настоящему))
  • ku4a Mala
    22 февраля 2016, 11:28
    Еще можно добавить фильтр для строки if(OrderCloseTime()!=0 && OrderSymbol()==Symbol() && OrderProfit()>0) 
     OrderProfit()>= TakeProfit
      • ku4a Mala
        22 февраля 2016, 14:24
        Николай Скриган, Я имел ввиду чтоб не учитывать сделки профит около нуля. Не знаю подробностей вашего робота, не буду спорить. Я применял коэффмциент TP/SL и наращивал или сокращал лоты по этому коэффициенту.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн