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

 
voron_026:

你好,Aleksey Vyazmikin 我最近开始了编程。我正在慢慢进入这个主题。

我试图这样做。

第一个矩形被画出来了,其余的没有被画出来。我仍在试图弄清楚如何去做。谢谢你的提示,你说的非典型风格是什么意思?


你确定只画了一个物体,而不是在同一坐标上画了许多物体吗?

你有积分常数。

datetime time0 = iTime(Symbol(),PERIOD_H4,0);
datetime time1 = iTime(Symbol(),PERIOD_H4,1);
double open0 = iOpen(Symbol(), PERIOD_H4,0);
double open1 = iOpen(Symbol(), PERIOD_H4,1);
double close1 = iClose(Symbol(), PERIOD_H4,1);
double high1 = iHigh(Symbol(), PERIOD_H4,1);
double low1 = iLow(Symbol(), PERIOD_H4,1);

创建对象 时,可以在函数中或直接在代码中定义它们...

关于典型性--你的计算功能是扭曲的,根据我的观察,这样的表达方式if(!...)没有多少初学者使用它。

 

你好!


请您提供建议。

你如何计算一个指标(I-1)相对于另一个建立在它(I-1)上的指标(I-2)的位置。


比如说。

RSI相对于布林的位置。

我以为你可以用数据代替价格计算

 RSI = iRSI(Symbol(), TimeFrame, 14, PRICE_CLOSE, 1);
 BB  = iBands(Symbol(), TimeFrame, 34, 1, 0, RSI, MODE_UPPER, 1);
但它给了我一个错误。
 
Ras al Ghul:

你好!


请您提供建议。

如何计算一个指标(I-1)相对于建立在它(I-1)上的另一个指标(I-2)的位置。


比如说。

RSI相对于布林的位置。

我以为可以用数据来代替计算的价格

但出现了一个错误。

甚至不清楚你是如何在RSI上建立bb的,也就是说,图片很清楚是如何完成的...


double  iBands( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          applied_price,    // тип цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );

你的价格类型是不正确的 - 你必须用

double  iBandsOnArray( 
   double       array[],          // массив 
   int          total,            // количество элементов 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );
 
Aleksey Vyazmikin:

关于典型性--你的计算函数是扭曲的,根据我的观察,这样的表达式if(!...)很少被初学者使用。


我明白你的意思。也许我正在发展我自己的风格。我喜欢在这种格式下使用if(! ...)运算符。而且我从别人那里得到了计算功能,但我喜欢这个逻辑

 
Aleksey Vyazmikin:

甚至不清楚你是如何建立RSI bb的,也就是说,图片是清晰的,因为做...


你的价格类型不正确 - 你必须通过

谢谢你的答复

我的思想的方向变得很清楚。


图片是用标准的MT4工具来说明的(根据之前/第一个指标)。


我只在java中熟悉数组。我对Java中的数组比较熟悉,也只是一目了然。

我如何创建它,我需要把什么放在那里?

在MetaEditor和MQLQL向导中的F1并没有给我任何明确的答案......

 
voron_026:

我明白你的意思。也许我正在发展我自己的风格。我喜欢在这种格式下使用if(! ...)运算符。我从别人那里得到了这个计算功能,但我喜欢它的逻辑。


我可以看到你是一个深思熟虑的人--祝你好运!

 
Ras al Ghul:

谢谢你的答复

我的想法已经变得很清楚了。


图片是用标准的MT4工具来说明的(根据之前/第一个指标)。


我只在java中熟悉数组。我对Java中的数组比较熟悉,也只是一目了然。

我如何创建它,我需要把什么放在那里?

在MetaEditor和MQLQL-learning中的F1没有给我任何明确的答案......


创建一个数组,并通过一个循环(例如for)用指标值填充它。然后使用iBandsOnArray() 函数。

 
Aleksey Vyazmikin:

创建一个数组,用一个循环(例如for)将指标值填入其中。然后使用iBandsOnArray() 函数。


要么你的版本非常复杂,要么我不理解你所说的价值......


double Array[], BB;  


 Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array[1],0,34,1,0,MODE_UPPER,1);

我的变体在选定的片段上产生了一个错误。

'数组' - 需要数组。

我们不就是这样把一个指标值弄到数组中的吗?


 
Aleksey Vyazmikin:

你确定只画了一个物体,而不是在同一坐标上画了许多物体吗?



是的,你是对的。矩形被画在相同的坐标上。我已经用以下方式解决了这个问题。

void OnTick()
{
Fun_New_Bar();

   if(UseDojiCandles = true && Doji() == 1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);

      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вверх");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         DojiCandle ++;
     }
   

   
   if(UseDojiCandles = true && Doji() == -1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);
      
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вниз");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 

         DojiCandle ++;
     }
     

   
}
我添加了一个变量TimeFrame,以快速改变计算的时间框架
 
Ras al Ghul:

要么你的变体非常复杂,要么我不明白你所说的价值...


在我的变体中,突出显示的那块是宣誓过的。

'数组' - 需要数组。

我们不就是这样把一个指标值放入数组中的吗?


Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array,0,34,1,0,MODE_UPPER,1);
原因: