Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1525

 
Artyom Trishkin:

Pubblicizzare una risorsa di terzi e canali privati. Se non fosse stato per me, avrei potuto essere bandito.

Quale annuncio? Un video tutorial su ciò che viene chiesto.

 
Andrey Sokolov:

Che tipo di pubblicità? Un video tutorial su ciò che viene chiesto.

Video lezioni tramite il pulsante
 
Cosa sto facendo di sbagliato?
int OnInit()
  {
//--- indicator buffers mapping
    SetIndexBuffer(0,Buy);
   SetIndexBuffer(1,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue (0, 0);
   SetIndexEmptyValue (1, 0);
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle (0, DRAW_ARROW);
   SetIndexStyle (1, DRAW_ARROW); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow(0, 234);  //Стрелка "вниз" для продаж
   SetIndexArrow(1, 233);  //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel(0, "Продаём");
   SetIndexLabel(1, "Покупаем");
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits (Digits);
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ("Мой первый индикатор");
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
    int limit=rates_total-prev_calculated-5;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
     double in1b = iCustom(NULL,0,"in1",1,0); // индикатор 1 стрелка вверх
     double in1s = iCustom(NULL,0,"in1",0,0); // индикатор 1 стрелка вниз
     
     double in2b = iCustom(NULL,0,"in2",0,0); // индикатор 2 стрелка вверх
     double in2s = iCustom(NULL,0,"in2",1,0); // индикатор 2 стрелка вниз
     
     if (in1b/* && in2b*/)
           Buy[i]=high[i];
     if (in1s/* && in2s*/)
            
             Sell[i]=low[i];
   
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
jarikn:
cosa sto facendo di sbagliato?
if (in1b)

cosa? più, meno o uguale... a cosa stai paragonando "in1b"?

 

Buon pomeriggio a tutti. Sto cercando di allegare un profitto a punti fissi al mio Expert Advisor oltre al profitto calcolato nella dimensione del rischio. Il profitto nella dimensione del rischio funziona bene. Ma stabilisce un valore irreale in pip. Ho un elenco di quello che sarà il profitto nella dimensione del rischio o in punti

  enum enumTP //ПЕРЕЧИСЛЕНИЕ ДЛЯ ТЕЙК ПРОФИТА
  {
   en_fiks_tp = 1, // ФИКСИРОВАННЫЙ В ПУНКТАХ
   en_v_r = 0,  // В КОЛИЧЕСТВЕ Р
  };


Ho impostato una variabile che definisce la dimensione del profitto in punti.

extern int Razmer_tp = 1500; // ТЕЙК ПРОФИТ В ПУНКТАХ

Poi scrivo il seguente calcolo del profitto e controllo la sua correttezza nell'on-tick.

//+--НАЧАЛО РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+

if(sl > 0 && Tip_tp == en_v_r) // ЕСЛИ ПРОФИТ В КОЛИЧЕСТВЕ Р
//{// НАЧАЛО ПРОВЕРКИ НА НОЛЬ
  tp=sl*tp_v_R; // ВЫЧИСЛЯЕМ ПРОФИТ УМНОЖАЯ СТОП ЛОС НА КОЛИЧЕСТВО РИСКА
  //-НАЧАЛО РАСЧЁТА ПРОФИТА В ПУНКТАХ---------------------------------------------------------------------------------------------+
  
  if(Tip_tp == en_fiks_tp)
  {//--НАЧАЛО ЕСЛИ ПРОФИТ В ПУНКТАХ---------------------------------------------------------------------------------------------+
  tp = Razmer_tp;  // ПРОФИТУ ПРИСВАЕВАЕМ КОЛИЧЕСТВО ПУНКТ
  
  }//---КОЕНЦ ЕСЛИ ПРОФИТ В ПУНКТАХ---------------------------------------------------------------------------------------------+
  tp= NormalizeDouble(tp, Digits());// НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
  
  // ПРОВЕРКА ТЕЙК ПРОФИТА НА СТОП ЛЕВЕЛ ОТ МАКАРА--
  if(tp<stoplevel)                                                           // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
  {
         tp=NormalizeDouble(stoplevel*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
  }
  //} // КОНЕЦ ПРОВЕРКИ НА НОЛЬ 
  
  //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+


Per il profitto in dimensione di rischio funziona bene, ma non per il profitto fisso in pip. Per favore, consigliatemi cosa sto facendo di sbagliato e cosa dovrebbe essere corretto per far funzionare correttamente il mio calcolo dei profitti in punti?

 
DanilaMactep:

Buon pomeriggio a tutti. Sto cercando di allegare un profitto a punti fissi al mio EA oltre al profitto calcolato nella dimensione del rischio. Il profitto nella dimensione del rischio funziona bene. Ma stabilisce un valore irreale in pip. Ho un elenco di quello che sarà il profitto nella dimensione del rischio o in punti


Ho impostato una variabile che definisce la dimensione del profitto in punti.

Poi scrivo il seguente calcolo del profitto e controllo la sua correttezza nell'on-tick.


Per il profitto in dimensione di rischio funziona bene, ma non per il profitto fisso in pip. Per favore, consigliatemi cosa sto facendo di sbagliato e cosa dovrebbe essere corretto quando si calcola il profitto in punti?

Vorrei chiedervi di moltiplicare il profitto in pip per"Punto".

 
jarikn:
Cosa sto facendo di sbagliato?

Cosa stai facendo?

 
MakarFX:

Cosa? Più, meno o uguale... a cosa stai paragonando "in1b"?

Non ho il tasto aggiungi screenshot di cui hai scritto, aggiungerò uno screenshot in questo modo.

L'ho scritto un po' ma ancora non funziona)

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
    int limit=rates_total-prev_calculated-
1 ;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
     
      // Снимем показания индикатора
     double in1b = iCustom(NULL,0,"in1",1,1); // индикатор 1 стрелка вверх
     double in1s = iCustom(NULL,0,"in1",0,1); // индикатор 1 стрелка вниз
     
     double in2b = iCustom(NULL,0,"in2",0,0); // индикатор 2 стрелка вверх
     double in2s = iCustom(NULL,0,"in2",1,0); // индикатор 2 стрелка вниз
      Comment("in1b = "+in1b+"\n""in1s = "+in1s);
     if (in1b<999999 && in1s>999999)
           Sell[i]=low[i];
     if (in1s<999999 && in1b>999999)
            Buy[i]=high[i];
             
   
     }
     
//--- return value of prev_calculated for next call
   return(rates_total);
  }
File:
 
jarikn:

Non ho il tasto aggiungi screenshot di cui hai scritto, aggiungerò uno screenshot in questo modo.

L'ho fatto un po' ma ancora non funziona)

Esegui il tuo indicatore su un grafico pulito, apri la finestra dei dati e fai uno screenshot
 
Per esempio, ecco 2 indicatori. Quando una freccia e un punto appaiono su una candela abbiamo bisogno di un segnale di acquisto e viceversa
File:
in1.ex4  11 kb
in2.ex4  3 kb
Motivazione: