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

 
artmedia70:

int iHighest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

Возвращает индекс найденного наибольшего значения (смещение относительно текущего бара).
Параметры:
symbol - Символьное имя инструмента, на данных которого будет производиться поиск. NULL означает текущий символ.
timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика.
type - Идентификатор таймсерии. Может быть любым из значений иденитификаторов таймсерий.
count - Число элементов таймсерии (в направлении от текущего бара в сторону возрастания индекса), среди которых должен быть произведен поиск.
start - Индекс (смещение относительно текущего бара) начального бара, с которого начинается поиск наибольшего значения. Отрицательные значения игнорируются и заменяются нулевым значением.
Пример:


Большое спасибо. Думаю вопросов больше не будет.
 
ask:

Что тут непонятного может быть для человека-я не знаю. Равно, как и не понимаю, что стало причиной агрессии и хамства (могли бы просто проигнорировать), ответили бы другие/справился бы сам-вам не все ли равно?

Зря Вы так воспринимаете Алексея. Он здесь один самых благожелательных людей. Он совсем не хотел Вас обидеть. К телепатам всех посылают, если не понятна задача. Это такая местная шутка со смыслом.
 
Reshetov:

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

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

Правильнее будет искать условие пересечения так:


P.S. В MetaTrader найти место с ошибкой после компиляции достаточно легко:

1. Во вкладке "Инструментарий" в графе "Файл" в круглых скобках указываются через запятую номер строки и номер символа в которых компилятор обнаружил ошибку.

2. Если в той же самой вкладке в графе "Описание" дважды кликнуть по сообщению об ошибке, то курсор в редакторе перескочит на то место, где компилятор обнаружил эту самую ошибку.


спасибо за подсказки.

 
Добрый день!Уважуха всем участникам форума! Если можно, подскажите- при выключении платформы данные из журнала стираются непременно, так ведь? А как из эксперта писать принты или любые другие выводящие данные, так, чтоб при выключении компа они сохранялись бы- в блокноте там, еще либо где? Не слишком ли это сложно, и возможно ли?
 
dkfl.zrjdktdbx:
Добрый день!Уважуха всем участникам форума! Если можно, подскажите- при выключении платформы данные из журнала стираются непременно, так ведь? А как из эксперта писать принты или любые другие выводящие данные, так, чтоб при выключении компа они сохранялись бы- в блокноте там, еще либо где? Не слишком ли это сложно, и возможно ли?
Ну если глянуть логи в папке программы, то найдете там много интересного.
 
Спасибо!
 
Скажите как имея цену открытия ордера и цену стоплосса рассчитать возможный убыток в валюте депозита?
 
sss2019:
Скажите как имея цену открытия ордера и цену стоплосса рассчитать возможный убыток в валюте депозита?
//--------------------------------------------------------------------
// Функция модификации StopLoss всех ордеров указанного типа
// Глобальные переменные:
// Mas_Ord_New             Массив ордеров последний известный
// int TralingStop         Значение TralingStop(количество пунктов)
//--------------------------------------------------------------------
void SampleTrailing_texbook ( int Tip, double V_StopLossPips, double V_TakeProfitPips)
  {
   int Ticket;                      // Номер ордера
   double
   Price,                           // Цена открытия рыночного ордера
   TS,                              // TralingStop (относит.знач.цены)
   SL,                              // Значение StopLoss ордера
   TP;                              // Значение TakeProfit ордера
   double difference; //разность в пунктах    
   double Profit;
   
   bool Modify;                     // Признак необходимости модифи.
//----------------------------------------------------------------------
      PointValue=MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE));      
      Print("PointValue = ",PointValue, " Point  = ", DoubleToStr(Point, Digits) );
      Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL ); // мин уровень трала
      Modify=false;                       // Пока не назначен к модифи
      
      Price = OrderOpenPrice();           // Цена открытия ордера
      SL    = V_StopLossPips;             // Значение StopLoss ордера
      TP    = V_TakeProfitPips;           // Значение TakeProft ордера
      Ticket= OrderTicket();              // Номер ордера
      
      if (TralingStop<Level_new)          // Если меньше допустимого..
         TralingStop=Level_new;           // .. то допустимый
         TS=TralingStop*Point;            // То же в относит.знач.цены
      //-----------------------------------------------------------------
      switch(Tip)                         // Переход на тип ордера
        {
         case 0 :                         // Ордер Buy
            difference = NormalizeDouble (Bid-TS - OrderOpenPrice(), Digits)/Point;               
            Profit = Lots_New * difference*PointValue; // Профит по УРОВНЮ ТРАЛА рыночного ордера на данном объеме (не путать c OrderProfit)
            if (trlinloss==false){         // тралим только профит
               if (Profit>MathAbs (Sum_Loss)) // если профит по уровню трала больше суммарного убытка предыдущих поз 
                 if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits) && NormalizeDouble(Price,Digits)< NormalizeDouble(Bid-TS,Digits))
              {                           // ..то модифицируем его:
               SL=Bid-TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
            } 
             else {                         // тралим с зоны лоссов
               if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits))
              {                           // ..то модифицируем его:
               SL=Bid-TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
             } 
            break;                        // Выход из switch
         
         
         case 1 :                          // Ордер Sell
             difference = NormalizeDouble (OrderOpenPrice()-(Ask+TS),Digits)/Point;
             Profit = Lots_New * difference*PointValue; // Профит по УРОВНЮ ТРАЛА рыночного ордера на данном объеме (не путать c OrderProfit)             
             if (trlinloss==false) {          // тралим с уровня профита по ордеру
                if (Profit>MathAbs (Sum_Loss)) // если профит по уровню трала больше суммарного убытка предыдущих поз            
                   if ((NormalizeDouble(SL,Digits)>  // Если выше желаемого..
                        NormalizeDouble(Ask+TS,Digits)||
                        NormalizeDouble(SL,Digits)==0) && NormalizeDouble(Price,Digits)>NormalizeDouble(Ask+TS,Digits)) //.. или нулевой(!)
              {                           // ..то модифицируем его
               SL=Ask+TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
            }            
            else {                        // тралим с зоны лоссов
          
            if (NormalizeDouble(SL,Digits)>// Если выше желаемого..
               NormalizeDouble(Ask+TS,Digits)||
               NormalizeDouble(SL,Digits)==0)//.. или нулевой(!)
              {                           // ..то модифицируем его
               SL=Ask+TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
            }  
        }                                 // Конец switch
      if (Modify==false)                  // Если его не надо модифи..
         return;                        // ..то идём по циклу дальше
      bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифицируем его!
      //----------------------------------------------------------------------
      if (Ans==false)                     // Не получилось :( 
        {                                 // Поинтересуемся ошибками:
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            return;                       // .. то уходим.
        }
}                                         // Выход из пользов. функции


Эта ф-ия трала рдеров из учебника, мной переделанная под собственные нужды. Здесь расчет профита на данном объеме лотов, при уровне трала и значении профита выше суммарного убытка предыдущих закрытых последовательных убыточных поз - трал включается- у Вас будет все по аналогии, только к применению не профита, как здесь, но убытка - как Вам надо.

Обратите внимание на расчет для бая и селла переменных:

double difference; //разность в пунктах    
double Profit; 
PointValue=MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE));
Делайте все аналогично и все.
 
Так я все равно не понял как узнать стоимость пункта в валюте депозита?
 
sss2019:
Так я все равно не понял как узнать стоимость пункта в валюте депозита?

см. этот расчет - делайте АНАЛОГИЧНО. Все.
Причина обращения: