[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 508

 
artmedia70:

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

Devuelve el índice del valor más alto encontrado (desplazamiento relativo a la barra actual).
Parámetros:
símbolo - Nombre del símbolo cuyos datos se buscarán. NULL significa símbolo actual.
marco temporal - Período. Puede ser uno de los períodos del gráfico. 0 indica el período del gráfico actual.
tipo - El identificador de la serie temporal. Puede ser cualquiera de los identificadores de series temporales.
contar - Número de elementos de la serie temporal (en la dirección de la barra actual al índice ascendente), entre los que se debe realizar la búsqueda.
iniciar - El índice (desplazamiento desde la barra actual) de la barra de inicio desde la que comenzará la búsqueda del valor más alto. Los valores negativos se ignoran y se sustituyen por un valor cero.
Ejemplo:


Muchas gracias. No creo que haya más preguntas.
 
ask:

Lo que puede ser poco claro para una persona - no lo sé. Tampoco sé qué causó la agresión y la grosería (podrían haberla ignorado), si los demás habrían respondido o si él se habría recuperado por sí mismo, ¿le da lo mismo?

No deberías pensar en Alexei de esa manera. Es una de las personas más benévolas de aquí. No quiso ofenderte. Todos son enviados a un telépata si no entienden el problema. Es una broma local con significado.
 
Reshetov:

Aquí están (hay muchos más errores en tu código pero estos ni siquiera pasarán por el compilador): Además, aunque cambies el código por algo más sano desde el punto de vista del compilador

seguirá siendo teóricamente erróneo si no se normalizan los valores reales antes de la comparación. Además, la normalización puede fallar si el precio cambia más de un pip en un tick y se pierde su condición.

La forma correcta de buscar la condición de cruce es


P.D. Es bastante fácil encontrar el lugar con el error después de la compilación en MetaTrader:

1. En la pestaña "Caja de herramientas", en la columna "Archivo", especifique el número de línea y el número del símbolo en el que el compilador ha detectado un error, separados por comas.

2. Si hace doble clic en el mensaje de error en el campo "Descripción" de la misma pestaña, el cursor del editor saltará al lugar donde el compilador ha detectado este mismo error.


Gracias por los consejos.

 
¡Buenas tardes! ¡Respeto a todos los miembros del foro! Si puedes, por favor, avisa: cuando apagas la plataforma los datos del cargador se borran necesariamente, ¿no? ¿Y cómo se escriben las impresiones o cualquier otro dato de salida del Asesor Experto, para que al apagar el ordenador se guarden en un bloc de notas, o en otro lugar? ¿No es demasiado complicado y es posible?
 
dkfl.zrjdktdbx:
¡Buenas tardes! ¡Respeto a todos los miembros del foro! Si puedes, por favor, avisa: cuando apagas la plataforma los datos del cargador se borran necesariamente, ¿no? ¿Y cómo se escriben las impresiones o cualquier otro dato de salida del Asesor Experto, para que al apagar el ordenador se guarden en un bloc de notas, o en otro lugar? ¿No es demasiado complicado y es posible?
Bueno, si miras los registros en la carpeta del programa, encontrarás un montón de cosas interesantes allí.
 
Gracias.
 
¿Pueden decirme cómo calcular una posible pérdida en la moneda del depósito teniendo un precio de apertura y un precio de stop loss?
 
sss2019:
Dime cómo calcular una posible pérdida en la moneda del depósito con el precio de apertura de la orden y el precio de stop loss.
//--------------------------------------------------------------------
// Функция модификации 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;                       // .. то уходим.
        }
}                                         // Выход из пользов. функции


Esta fi- gura de comerciante del libro de texto fue reelaborada por mí para mis propias necesidades. Aquí, el cálculo del beneficio sobre un determinado volumen de lotes, en el nivel de arrastre y el valor de la ganancia por encima de la pérdida total de las posiciones perdedoras consecutivas cerradas anteriores - el arrastre está habilitado - usted tendrá todo similar, sólo para aplicar no un beneficio, como aquí, pero una pérdida - como usted necesita.

Preste atención al cálculo de las variables de Compra y Venta:

double difference; //разность в пунктах    
double Profit; 
PointValue=MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE));
Haz todo de la misma manera y ya está.
 
¿Sigo sin entender cómo averiguar el valor de los puntos en la moneda del depósito?
 
sss2019:
¿Sigo sin entender cómo averiguar el valor de los puntos en la moneda del depósito?

ver este cálculo - hacer ANALOGO. Todo.