"...
Если негде взять совета
У него берем!"
© К/ф «Веселая хроника опасного путешествия» (Арго).
Кто сказал что на смартлабе не у кого спрашивать совета? Это не так.
Есть люди, которые могут дать совет, и делают это совершенно бескорыстно.
Вот я вчера посетовал, что замучился с программированием и не знаю как прикрутить к советнику простую функцию.
Мне тут же навалили кучу предложений и прототипов, с помощью которых я сегодня за 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.
Исходный код.
Дмитрий Ш, жив курилка.
Мается на отведенном ему полигоне.
Прос… л 1200 баксов, пытается торговать на 60.
Дмитрий Ш, пока мне это доставляет удовольствие, это будет продолжаться. Плюс к этому — это тест советников и торговой стратегии.
OrderProfit()>= TakeProfit