[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 311

 

Есть вопрос по работе тестера: После того, как прошел тест, меняешь параметры (даты, валютную пару, таймфрейм), запускаешь заново тест - он идет, а по его завершению абсолютно не меняется информация во вкладках типа "график" и "отчет"-все остается с предыдущего теста. Сохраненный отчет тоже оказывается старый. С чем связано, и как это решить? Может быть, есть какая-нибудь функция сброса результатов?

 

Выкурил мануал, статьи, провел поиск по форуму - упоминания подобной проблемы не встречал.. 

 

Доброго дня.По прежнему занимаюсь переделкой индикатора хруст(пытаюсь по нему сделать советник).Суть в том что все что мог вынес во внешний файл,оставив в индюке только вывод на экран.В индюке все пашет,пытаюсь сделать тоже самое(используя уже внешний файл) в качестве советника ,не получается,не пойму в чем дело.Помогите пожалуйста,осталось чуть чуть ведь,денег увы нет,последнее сейчас на торговом счете,но система пашет,проверял,если кому надо могу скинуть небольшой отчет о ручной торговле.Минус есть,но только один(правда очень крупный,почти съевший депозит).Прикрепляю два файла.

1) с отчетом

2) с фрагментами моих разработок.Кто поможет завершить начатое с теми поделюсь стратегией(индикатор хруст только часть стратегии,но немаловажная).Реально грааль(сами увидите,ну не может так долго везти,скосили только наши энергитики и то что не ставил стоплос,до этого момента все идет по нарастающей и сами увидите с каким прогрессом.) 

Файлы:
 
а вот куски кода
Файлы:
 

Подскажите, в чем ошибка? Четыре ордера подряд модифицирует нормально, но на четвертом каждый тик начинает писать OrderModify error 1. 

После разворота тренда первый ордер все нормально, второй переводит, но опять пишет эту же ерунду...

Нормализация роли не играет.

Бьюсь уже несколько дней!

   for (x=0;x<OrT;x++)
   {
   if (OrderSelect(x,SELECT_BY_POS)==true)
    {
     if (OrderMagicNumber() == magic)
      {
       if (OrderType = OP_BUY)
       {
       shift = iBarShift(Symbol(),30,OrderOpenTime());                           //запомнил свечу открытия
        for (m=shift;m>=1;m--)
        if (High[m]-OrderOpenPrice() >= TS*Point)
        {
         if (OrderOpenPrice()+spread*Point != OrderStopLoss())
         {
          OrderModify(OrderTicket(),OrderOpenPrice(),                           //переводит SL в безубыток
          OrderOpenPrice()+spread*Point,OrderTakeProfit(),0,CLR_NONE);
          return;
         }
        }
       }
      }
     if (OrderMagicNumber() == magic)
     {
      if (OrderType = OP_SELL)
      {
       shift = iBarShift(Symbol(),30,OrderOpenTime());                           //запомнил свечу открытия
        for (m=shift;m>=1;m--)
        if (OrderOpenPrice()-Low[m] >= TS*Point)
        {
         if (OrderOpenPrice()-spread*Point != OrderStopLoss())
         {
           OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),dig),     //переводит SL в безубыток
           NormalizeDouble(OrderOpenPrice()-spread*Point,dig),
           NormalizeDouble(OrderTakeProfit(),dig),0,CLR_NONE);
           return;
         }
        }
       } 
      }
    }
   }

Заранее спасибо.

 
CYBOPOB:

Подскажите, в чем ошибка? Четыре ордера подряд модифицирует нормально, но на четвертом каждый тик начинает писать OrderModify error 1. 

После разворота тренда первый ордер все нормально, второй переводит, но опять пишет эту же ерунду...

Нормализация роли не играет.

Бьюсь уже несколько дней!

Заранее спасибо.

Или самому учитывать правила (при написании кода), или использовать готовые решения, где уже эти правила учтены.
 
CYBOPOB:

Подскажите, в чем ошибка? Четыре ордера подряд модифицирует нормально, но на четвертом каждый тик начинает писать OrderModify error 1. 

После разворота тренда первый ордер все нормально, второй переводит, но опять пишет эту же ерунду...

Нормализация роли не играет.

Бьюсь уже несколько дней!

Заранее спасибо.

Перед модификацией нужно проверить, что параметр стопа ордера не равен параметру нового стопа. Если они равны - то модифицировать нечего. Отсюда и ошибка 1.
 

О сортировке массивов.
Пробую отсортировать два массива: первый - по возрастанию (функция ArraySort(num_array);), а второй в соответствии с первым так, что бы если в первом массиве пятый элемент переместился на первое место, то и во втором также (пятый элемент на первом месте).
Если в MQL есть функция совместной сортировки массивов дайте, пожалуйста, ссылку.
С уважением. Shurkin.

 
artmedia70:
Перед модификацией нужно проверить, что параметр стопа ордера не равен параметру нового стопа. Если они равны - то модифицировать нечего. Отсюда и ошибка 1.


Дык а это разве не оно?

if (OrderStopLoss() != OrderOpenPrice()-spread*Point)

Артём, не сочти за труд, писни кодом, а? Или дай мне вон ту штуку, что у тебя в руке, я закончу эти мучения...

 
CYBOPOB:

Дык а это разве не оно?

Артём, не сочти за труд, писни кодом, а? Или дай мне вон ту штуку, что у тебя в руке, я закончу эти мучения...


Не то. Вам же сказали:

Перед модификацией нужно проверить, что параметр стопа ордера не равен параметру нового стопа. Если они равны - то модифицировать нечего. Отсюда и ошибка 1.

 

Появился вопрос к профессионалам. Хочу сделать функцию универсальной. Функция считает сколько баров одного признака (бычья или медвежья, соответствие размеру, возможно, что-н. ещё добавляю) идут друг за другом, а если попадается бар не соответствующий данному признаку, т.е. например, направлен в другую сторону то счётчик обнуляется.

Вот есть код, где я веду расчёт в одном  из вариантов. Т.е. если бары одного признака идут вверх, т.е. бычьи.

int LastCandlesType(int trend)
{
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)     // Если бар соответствует требуемым признакам..
          cnt++;                                                                     // .. прибавим 1 к счётчику

      if (Close[i] < Open[i])                                                        // Если бар, не соответствует основному признаку..
          cnt = 0;                                                                   // .. счётчик обнуляем
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

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

 Т.е. если trend == вниз, то функция в цикле была как щяс, а если trend == вверх, то в цикле было есс-но Open[i] и Close[i] поменены местами, чтоб соблюдались условия. Т.к. в том случае уже цена закрытия бара будет ниже цены открытия и в итоге разница будет со знаком минус.

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