[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 462

 
tol64:


Спасибо. Очень понятно. Любому будет понятно, если так объяснять.)))

Ещё один вопрос. В поиске нашёл много подобных вариантов вопроса, но у меня немного вопрос будет по другому задан.))

Рассогласование графиков. Чтобы увидеть "достоверный ???" результат мне приходиться постоянно пересчитывать таймфреймы. То есть, если вижу, что в журнале ошибки на эту тему, иду в архив котировок и пересчитываю все таймфреймы. В тестере, например, провожу тест по контрольным точкам. Всё ок. Затем допустим по сформировавшимся барам. Всё ок. И вот если снова провести тест по контрольным точкам, то опять рассогласование графиков наблюдаю в журнале. Что это за ...? ))) Есть ли что-нибудь против этой напасти?


ИМХО, пользуйтесь только двумя моделями тестирования - либо "Все тики...", либо "По ценам открытия..." (для этого в сове необходимо организовать контроль за образованием нового бара)- это "достоверные" резы - и не парьтесь попусту... :-))) "Контрольные точки" - не стоят того.

Закачали минутную историю по нужному Вам инструменту и вперед... :-)))

 
Roman.:


ИМХО, пользуйтесь только двумя моделями тестирования - либо "Все тики...", либо "По ценам открытия..." (для этого в сове необходимо организовать контроль за образованием нового бара)- это "достоверные" резы - и не парьтесь попусту... :-))) "Контрольные точки" - не стоят того.

Закачали минутную историю по нужному Вам инструменту и вперед... :-)))


Ссылка битая у меня...

В моём подходе, если использовать "Все тики", то придётся ждать вечность.)) Я тестирую на 10-летней истории. В советнике условия и трейлинг строятся по сформировавшимся барам. Но есть некоторые условия, которые нужно проверять на каждом тике. Например, если сработал стоп-лосс и по условию системы управления капиталом изменился размер лота, то нужно переустановить все отложенные ордера с целью изменения лота. Или же просто удалить отложенные ордера, если того требуют условия. Всё ведь чётко должно быть, чтобы было достоверным.)) Поэтому контрольных точек мне в принципе вполне достаточно, так как сравнивал некоторые куски истории со всеми тиками. Одно и тоже.

Так что там в помощь разбора и устранения этих ошибок есть? А то ссылка битая.))

 
tol64:


Ссылка битая у меня...

В моём подходе, если использовать "Все тики", то придётся ждать вечность.)) Я тестирую на 10-летней истории. В советнике условия и трейлинг строятся по сформировавшимся барам. Но есть некоторые условия, которые нужно проверять на каждом тике. Например, если сработал стоп-лосс и по условию системы управления капиталом изменился размер лота, то нужно переустановить все отложенные ордера с целью изменения лота. Или же просто удалить отложенные ордера, если того требуют условия. Всё ведь чётко должно быть, чтобы было достоверным.)) Поэтому контрольных точек мне в принципе вполне достаточно, так как сравнивал некоторые куски истории со всеми тиками. Одно и тоже.

Так что там в помощь разбора и устранения этих ошибок есть? А то ссылка битая.))


Перезалил

и здесь.

 

Добрый день господа.

Помогите разобраться с кодом. Логику я понимаю, а как описать правильно не знаю. Кран кароче.

Вот кусок советника.

total=OrdersTotal();
if(total<1)

{

while (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2) //Пока это условие выполняется открывать только селл при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)<0.7))
{

OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
}

while (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2) // Пока это условие выполняется открывать только Бай при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)>0.3))
OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

}
}
}
}

Подскажите как это правильно оформить? С уважением Денис.

 


Спасибо. По этим ссылкам, да и не только не сказано самого главного, что мне было нужно.

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

В режиме оффлайн таких проблем не возникает.)) Это первое.

Теперь второе.

for(pos = 0; pos < OrdersHistoryTotal(); pos++)
    {  OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY);
        ... работа с ордером ...  }

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

for(pos = 0; pos < OrdersHistoryTotal()-1; pos++)
    {  OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY);
        ... работа с ордером ...  }

, то запись в файл производится не правильно. Видно, что есть индивидуальные случаи.)))

 
Перенесено.
smartemiy:

Добрый день, уважаемые.

Нужна помощь Ваша, знающих!!!

как указать в советнике, что бы он перестал торговать, если просадка баланса уже составила 20%, и что бы эту цифру можно было менять ?

может на форуме уже это объяснялось, прошу прощения, может не заметил..

ЗАРАНЕЕ БЛАГОДАРЕН!

Удачной торговли !!!!!

 
granit77:
Перенесено.


Например, так...

extern int MaxLoss = 90;          // Максимально допустимая просадка в процентах от баланса

...     

static datetime prevtime = 0;       // по ценам открытия
bool IsExpertFailed = false;
bool IsExpertStopped = false;

      

//+------------------------------------------------------------------+
//| Старт робота                                                     |
//+------------------------------------------------------------------+

int init()
{
   if(Time[0] == prevtime)   return(0);  //ждем нового бара
   prevtime = Time[0];                   //если появился новый бар , включаемся 

   IsExpertStopped = false;
   if (!IsTradeAllowed())
   {
      Comment("Необходимо разрешить советнику торговать");
      IsExpertStopped = true;
      return (0);
   }
      
   if (!IsTesting())
   {
      if (IsExpertEnabled())
      {
         Comment("Советник запустится следующим тиком");
      }
      else 
      {
         Comment("Отжата кнопка \"Разрешить запуск советников\"");
      }
   }
 return (0);
}
  
//+------------------------------------------------------------------+
//| Завершение работы робота                                         |
//+------------------------------------------------------------------+

int deinit()
{
   return (0);
}
  
//+------------------------------------------------------------------+
//| Обработка сигнала                                                |
//+------------------------------------------------------------------+
  
int start()    // -----------------------СТАРТ ЭКСПЕРТА--------------- 
{
  
 
   if(Time[0] == prevtime)   return(0);  //ждем нового бара
   prevtime = Time[0];                   //если появился новый бар , включаемся 

   if (IsExpertStopped)
   {
      Comment("Не удалось инициализировать советник!");
      return (0);
   }
   
   if (IsExpertFailed)
   {
      Comment("Критическая ошибка! Советник остановлен.");
      return (0);
   }
   
         
   // ------------------------------------------------Ищем наш ордер---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
             if (ticket>0)                                               // Если позиция открылась
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  double OpenPrice=OrderOpenPrice();
      
                              
                                  
                           if (orderType == OP_BUY) 
                              {
      
                               }
            
                            if (orderType == OP_SELL) 
                                 {
       
                                 }   
                            
                    }

      // Проверка на предельную просадку
      
      double loss = - ((orderProfit * 100.0) / AccountBalance());
      if (loss > MaxLoss)
      {
         Print ("MaxLoss");
         CloseAllOrders(MagicNumber);
         IsExpertFailed = true;
         return (0);
      }
    
              
       
}
   
 
Напомните пожалуйста как задержку ставить. Там вроде в милисекундах можно. Всё время забываю как пишется.
 
И никто не подскажет скрипт, который быстро закрывает все позиции. Что-то найти не могу. Хочу код поглядеть.
 
FOReignEXchange:
И никто не подскажет скрипт, который быстро закрывает все позиции. Что-то найти не могу. Хочу код поглядеть.
Поиск подскажет полсотни штук.
Причина обращения: