新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1525

 
Artyom Trishkin:

为第三方资源和私人渠道做广告。如果不是因为我,我可能已经被禁赛了。

什么广告?关于所问内容的视频教程。

 
Andrey Sokolov:

什么类型的商业?关于所问内容的视频教程。

通过按钮的视频课程
 
我做错了什么?
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:
我做错了什么?
if (in1b)

什么?"更多、更少或相等......你将 "in1b "与什么相比较?

 

大家下午好。我试图在我的EA上附加一个固定点数的利润,除了在风险大小中计算的利润之外。风险大小中的利润工作正常。但它设定了一些不真实的点值。我有一份风险大小或点数方面的利润清单。

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


我设置了一个变量,定义了以点为单位的利润大小。

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

然后我写出以下利润计算,并在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); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
  }
  //} // КОНЕЦ ПРОВЕРКИ НА НОЛЬ 
  
  //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+


对于风险大小的利润,它工作得很好,但对于以点为单位的固定利润,它就不行了。请告诉我,我做错了什么,应该怎样改正才能使点数的利润正常工作?

 
DanilaMactep:

大家下午好。我试图在我的专家顾问中附加一个固定点数的利润,除了在风险大小中计算的利润之外。风险大小中的利润工作正常。但它设定了一些不真实的点值。我有一份风险大小或点数方面的利润清单。


我设置了一个变量,定义了以点为单位的利润大小。

然后我写出以下利润计算,并在on-tick中检查其正确性。


对于风险大小的利润,它工作得很好,但对于以点为单位的固定利润,它就不行了。请告知我做错了什么,在计算利润的时候应该如何纠正?

我想请你把利润的点数乘以"点"。

 
jarikn:
我做错了什么?

你在做什么?

 
MakarFX:

什么?"更多、更少或相等......你将 "in1b "与什么相比较?

我没有你写的添加截图 的按钮,我会用这种方式添加一个截图。

我写了一点,但还是没有用)

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);
  }
附加的文件:
 
jarikn:

我没有你写的添加截图 按钮,我这样添加截图。

我已经做了一点,但还是没有效果)

在一个干净的图表上运行你的指标,打开数据窗口并进行截图
 
例如,这里有2个指标。当一根蜡烛上出现一个箭头和一个点时,我们需要一个买入信号,反之亦然。
附加的文件:
in1.ex4  11 kb
in2.ex4  3 kb
原因: