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

 
hoz:


 На данный момент у меня такая функция торговая:

 

  Модификация не происходит.

 


У вас в функции Trade () ордер не выбран.
 
rigonich:

Совсем не понял, чего вы хотите от скрипта.


Нужна программа, при запуске которой в архивных графиках

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

Например - коррекция в 400 пунктов, совершенная за 30 минут. И так за весь прошедший год, все коррекции с этим диапазоном. 

Визуально их высматривать, вручную - невозможно. Искажения. Хотелось бы с цветовым обозначением, чтобы сразу - в глаза. 

___

Я смотрел, есть разные проги "Histoty". Но они выполняют визуализацию только истории счета. 

А вот чтобы отрезок цены по заданным фильтрам - не нашел.

 
rigonich:

У вас в функции Trade () ордер не выбран.


 Есть такое. Вот исправил.

bool Trade (int signal)
{
  int total = OrdersTotal() - 1;
  
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу
       
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
      if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
        OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    }
  }    
 // if(UseBU == true)
   //  MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

А функция модификации вот:

 

void OrdersModifying()
{
  int total = OrdersTotal() - 1;
  double sl = 0, tp = 0;
  
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)                            // Если ордер есть и он выбран..
    {
      if(g_type == OP_BUY)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits);                    // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits);                    // Получаем значение тейкпрофита для выбранного ордера
      }
      if(g_type == OP_SELL)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits);                // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits);                // Получаем значение тейкпрофита для выбранного ордера
      }
      if(sl != 0 || tp != 0)                                                            // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер
      }
    }
  }
}

 Странно Но стопов и тейков на выходе нет опять таки.

 
TUNGUS:


Нужна программа, при запуске которой в архивных графиках

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

Например - коррекция в 400 пунктов, совершенная за 30 минут. И так за весь прошедший год, все коррекции с этим диапазоном. 

Визуально их высматривать, вручную - невозможно. Искажения. Хотелось бы с цветовым обозначением, чтобы сразу - в глаза. 

___

Я смотрел, есть разные проги "Histoty". Но они выполняют визуализацию только истории счета. 

А вот чтобы отрезок цены по заданным фильтрам - не нашел.

 


History, History_Draw - они работают навроде советников при тестировании.

Вот нужно что-то в этом роде, чтобы смотреть коррекции в  истории по заданным параметрам 

 

Проблема с Symbol() MT4:

2 функции для иллюстрации:

string   SymbolOK()
{

   string   value;
   string   argument = "ANYTHING";

   if(false)
   {
      value = argument;
   }

   return(value);

}

string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}

Исполнение первой выводит пустую строку:

int start()
{
   Comment(SymbolOK());
   return(0);
}

А вот вторая функция строковый идентификатор "EURUSD" (ну, зависит от графика, но выводи, хотя по логике функции должна быть пустая строка):

int start()
{
   Comment(SymbolPROBLEM());
   return(0);
}

Помогите понять, что не так? Спасибо

 
rigonich:

У вас в функции Trade () ордер не выбран.

Кстати. А какой смысл в функции Trade() выбирать ордер? Я же вызываю функцию OrdersModifying() в которой ордера выбираются и там модифицируются. Т.е. первоначальный вариант был верен!
 
hoz:


 Есть такое. Вот исправил.

А функция модификации вот:

 

 Странно Но стопов и тейков на выходе нет опять таки.


 


OrderSelect(g_ticket,SELECT_BY_TICKET) перед строкой if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
 
TUNGUS:


History, History_Draw - они работают навроде советников при тестировании.

Вот нужно что-то в этом роде, чтобы смотреть коррекции в  истории по заданным параметрам 


В истории или на графике? В каком виде вы хотите видеть результат? в окне чарта, в отдельном окне , распечатанным в виде таблицы, если да то с какими именно данными, в виде свечей другого цвета, в виде линий, соединяющих начало и конец движения?Напишите конкретнее, и когда будет время, я вам его сделаю. 
 
rigonich:

OrderSelect(g_ticket,SELECT_BY_TICKET) перед строкой if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)


 Вот я так сделал:

 

bool Trade (int signal)
{
  int total = OrdersTotal() - 1;
  
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу

    if(OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
    {
      if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
        OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    }    
 // if(UseBU == true)
   //  MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

  Стопов и тейков нет. В журнале пишится ошибка 130, мол не верный стопы. Причины я не наблюдаю.

 
hoz:


 Вот я так сделал:

 

  Стопов и тейков нет. В журнале пишится ошибка 130, мол не верный стопы. Причины я не наблюдаю.


Без ифа, просто OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES);, и можете оставить в OrdersModifying()

 //+------------------------------------------------------------------+

void OrdersModifying()

   {

   OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES);

   if(g_type == OP_BUY)

      {

      if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits);           // Если входной параметр стоп-лосса не равен 0, то..

                                                                                      // Получаем значение стоп-лосса для выбранного ордера

      if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits);           // Если входной параметр тейкпрофита не равен 0, то..

                                                                                      // Получаем значение тейкпрофита для выбранного ордера

   }

   if(g_type == OP_SELL)

      {

      if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits);           // Если входной параметр стоп-лосса не равен 0, то..

                                                                                      // Получаем значение стоп-лосса для выбранного ордера

      if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits);           // Если входной параметр тейкпрофита не равен 0, то..

                                                                                      // Получаем значение тейкпрофита для выбранного ордера

   }

   if(sl != 0 || tp != 0)                                                          // Если полученные значения sl и tp не равныы 0, то..

      {

      OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер

   }

}


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