Полезные функции от KimIV - страница 108

 
Честно говоря, я очень рад, что в активное число участников форума вернулся человек-легенда, имеющая свои функции, хотя мало что я лично в них понимаю в силу незнания основ программирования на этом языке. Но сам факт поразителен, приветствую KimIV всем своим существом!
 
 

Здравствуйте! Ищу функцию, может у кого есть готовая?

Нужно, чтобы по окончании теста создавался файл в котором были бы данные по просадке каждого ордера. Желательно, чтобы этот файл создавался не в процессе теста, а в конце разово обрабатывал историю сделок...

 
Такой функции у меня нет, но в ближайших планах публикация функции, вычисляющей максимальную просадку в пунктах текущих открытых позиций. В этой функции анализируется прохождение ордеров по барам. Таймфрейм является одним из параметров. Чем мельче таймфрейм, тем точнее расчёт максимальной просадки. Я думаю, что на основе этой функции Вы сможете сделать то, что Вам нужно.
 
KimIV:
Такой функции у меня нет, но в ближайших планах публикация функции, вычисляющей максимальную просадку в пунктах текущих открытых позиций. В этой функции анализируется прохождение ордеров по барам. Таймфрейм является одним из параметров. Чем мельче таймфрейм, тем точнее расчёт максимальной просадки. Я думаю, что на основе этой функции Вы сможете сделать то, что Вам нужно.

Если ещё в функции будет запись в файл - будет замечательно...

Правда я не вижу особой необходимости вычислять просадку для текущих позиций. По моему эта функция более востребована именно для тестера (анализ работы системы) ....

 
renoshnik:

Если ещё в функции будет запись в файл - будет замечательно...

Правда я не вижу особой необходимости вычислять просадку для текущих позиций. По моему эта функция более востребована именно для тестера (анализ работы системы) ....

Нет никакой разницы между "вычислять просадку для каждого ордера в реальном времени и в конце теста скидывать все данные в файл" и "в конце теста вычислить просадку каждого ордера и скинуть данные в файл". За исключением того, что первый вариант достаточно просто сделать предельно точным, а второй - только при условии запоминания тиковой истории для каждого ордера.
 
renoshnik:

Здравствуйте! Ищу функцию, может у кого есть готовая?

Нужно, чтобы по окончании теста создавался файл в котором были бы данные по просадке каждого ордера. Желательно, чтобы этот файл создавался не в процессе теста, а в конце разово обрабатывал историю сделок...

Юрий, на скорую руку выдернул код из старого советника...
Проверил, вроде работает правильно.
Добавьте код из deinit() в свой сов и скопируйте тройку функций ниже deinit, одна из них Игоря ))
.......
Код рыхлый... Но пока Игорь сделает красиво, Вам думаю хватит поэкспериментировать.
 
lasso:
Юрий, на скорую руку выдернул код из старого советника...
Проверил, вроде работает правильно.
Добавьте код из deinit() в свой сов и скопируйте тройку функций ниже deinit, одна из них Игоря ))
.......
Код рыхлый... Но пока Игорь сделает красиво, Вам думаю хватит поэкспериментировать.

Отлично, спасибо !!!!!!!!!! Буду разбираться....
 

Игорь, добрый день!

Вставил в советник вашу функцию CrossPointOfLines (Вычисляет координаты точки пересечения двух прямых). В итоге периодически пишет в комментах: НЕ удалось найти точку пересечения! И не может эту самую точку найти.

Может это из-за того, что у меня на чарте присутствуют другие объекты в виде трендовых? Или может вы или кто-то из завсегдатаев этой ветки подскажет, в чем у меня закавыка?

Заранее - спасибо!

Код - в прикрепленном файле.

Файлы:
 

УРА! Сам дотумкал) Мешали другие трендовые...

Так как с массивами особо дружить как-то не получается, сделал максимально упрощенную фунцию. Пока вроде бы работает)

//+------------------------------------------------------------------+
double Middle(string nm1,string nm2)
  {
  double M;
  double x0, x1, y1, x2, y2, x3, y3, x4, y4;
  double k1, k3;
  
  if(ObjectFind(nm1)==0 && ObjectFind(nm2)==0)
    {
    x1=ObjectGet(nm1, OBJPROP_TIME1);
    x2=ObjectGet(nm1, OBJPROP_TIME2);
    y1=ObjectGet(nm1, OBJPROP_PRICE1);
    y2=ObjectGet(nm1, OBJPROP_PRICE2);
    
    x3=ObjectGet(nm2, OBJPROP_TIME1);
    x4=ObjectGet(nm2, OBJPROP_TIME2);
    y3=ObjectGet(nm2, OBJPROP_PRICE1);
    y4=ObjectGet(nm2, OBJPROP_PRICE2);
    
    k1=(y2-y1)/(x2-x1); 
    k3=(y4-y3)/(x4-x3);
    
    if(k1 != k3)
      {
      x0 = (y1 - y3 + k3*x3 - k1*x1)/(k3 - k1);
      M = y1 + k1*(x0 - x1);
      }
    }
  return(M);
  }
//+----------------------------------------------------------------------------+
Причина обращения: