任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 856

 
//+------------------------------------------------------------------+
//|                                                         SSMA.mq4 |
//|                                            Copyright 2014, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Vinin"
#property link      "http://vinin.ucoz.ru"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   1
//--- plot average
#property  indicator_label1  "average"
#property  indicator_type1   DRAW_ARROW
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
extern int      CountMA=200;
extern int      Period_start =1;
extern int      Period_shift =5;
//--- indicator buffers
double         averageBuffer[];
double         maxBuffer[];
double         minBuffer[];
double         Label1Buffer[];
double         scBuf[][2];

double tmparray[],tmparrayF1[];
//double tmparrayD[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  // массив tmparrayF1[] является индикаторным буфером
   SetIndexBuffer(0,tmparrayF1);
   PlotIndexSetInteger(0,PLOT_ARROW,159);
   
   ArrayResize(tmparray, CountMA+1);  // массив для рассчитанных SMA 
   ArrayResize(scBuf, CountMA+1);     // массив для значений повторений на цене  
   ArrayResize(tmparrayF1, CountMA+1); // массив для перевода в одномерный массив для отображения на графике

//---
   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[])
  {
//---
   if (rates_total<Period_start+Period_shift*CountMA+1) return(0);
   ArrayInitialize(tmparray,0);
   ArrayInitialize(scBuf,0);
   
   int limit=rates_total-prev_calculated;
   if (limit>1) limit=rates_total-(Period_start+Period_shift*CountMA+1);
   
   double min=-99999,max=99999, sum=0;
   int count, countMA,schet;
   
   for (int i=limit;i>=0;i--)
   {
      sum=0;
      count=0;
      countMA=0;
      // формируем массив со значения машек
      for (int j=0;j<Period_start+Period_shift*CountMA;j++)
      {
         sum+=(High[i+j]+Low[i+j])*0.5;
         count++;
         if (count==Period_start+Period_shift*countMA)
         {
            tmparray[countMA]=sum/count;
            countMA++;
         }          
      }    
      // Массив создан. Можно обрабатывать
   }
 //***** Рассчитать количество повторений SMA, в десятичном интервале.
   for (int b=0;b<CountMA;b++)
   {
     schet=0;
     for (int a =CountMA;a>=0;a--) 
     {
       if(NormalizeDouble(tmparray[a],4)==NormalizeDouble(tmparray[b],4)&&tmparray[a]!=0) // 1.30000 = 1.30004
       {
         scBuf[b][0]=schet;                       // количество повторений МА
         scBuf[b][1]=tmparray[b];                 // Цена
         tmparray[a]=0;                           // Обнуляем посчитанную ячейку
         schet++;
       }
     } 
   }
   
   ArraySort(scBuf,WHOLE_ARRAY,0,MODE_DESCEND);   // Сортируем массив по убыванию
  
   for (int x=0;x<CountMA;x++) 
   {
     tmparrayF1[x]=scBuf[x][1];           //переносим значения цены в одномерный массив, для отображения через индикатор
   }  
     
      
Print("rates_total = ",rates_total,
"tmparray = ",tmparray[0]
,"KolVBuf ", scBuf[0][0],"+",scBuf[0][1]
       ,"/ ",scBuf[1][0],"+",scBuf[1][1]
       ,"/ ",scBuf[2][0],"+",scBuf[2][1]
       ,"/ ",scBuf[3][0],"+",scBuf[3][1]
       ,"/ ",scBuf[4][0],"+",scBuf[4][1]
       ,"/ ",scBuf[5][0],"+",scBuf[5][1]
     );

   
//--- return value of prev_calculated for next call
   return(rates_total);
  }

我提前向管理员道歉,因为我是在耍流氓,类似的问题在另一个主题中https://www.mql5.com/ru/forum/154928,!)

目标。

- 创建一个包含2000个移动平均数值的数组。

- 要用十字标记,由连接的SMA形成的密封。

其结果是,十字架散乱无序,那里什么都没有。

问题。

事实证明,导致十字星的放置方式与SMA总量的位置不一致的错误,是在SMA阵列的形成过程中|...?

 

下午好。请告知如何解决这个问题。我需要做一个数组,一个例子是.............而它变成了一个完整的双关语,告诉我有什么问题。谢谢你。

for(int i=1;i<=20;i++)
     {
     for(int j=1;j<=20;j++)
        {
        for(int q=1;q<=20;q++)
           {
           
             M5gooB[i,j,q]=false;
             Print("M5gooB ",i," ",j," ",q," false.");
             
           }
        }
     }
 

甚至就像这样

bool M5gooB[50],M5gooS[50];
  for(int i=1;i<=50;i++)
     {
     M5gooB[i]=false;
     
     }

并仍然在日志中打印出一个混乱的分配结构

 
laveosa:

甚至就像这样

并仍然在日志中打印出一个混乱的分配结构

也许这将有所帮助。

bool M5gooB[50],M5gooS[50];
  for(int i=0;i<50;i++)
     {
     M5gooB[i]=false;
     
     }
 

谁知道如何设置一个点来代替十字架(DRAW_ARROW)?

- 有一个指标,如何在全局变量 中设置一个点对象

//--- plot average
#property  indicator_label1  "average"
#property  indicator_type1   DRAW_ARROW
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1

 
Top2n:

谁知道如何设置一个点来代替十字架(DRAW_ARROW)?

- 有一个指标,如何把一个点对象放在全局变量中


在全球。

input uchar arrowsCodes0=159;//Wingdings: >= 33 or <= 255

uchar arrowsCodes0=159;//Wingdings: >= 33 or <= 255

https://docs.mql4.com/ru/constants/objectconstants/wingdings

int OnInit() 中,那么它将是。

SetIndexArrow(0,arrowsCodes0);// https://docs.mql4.com/ru/customind/setindexarrow

类似这样的事情。

 

为什么我的观点只画在历史上?在策略 测试器和wino图表窗口中只有历史,没有新的点被画出来

代码。

double sellArrowsBuffer[];
double buyArrowsBuffer[];
double closeArrowsBuffer[];

int jbnbHandle;

void OnInit()
{
....
    jbnbHandle = iCustom(_Symbol, _Period, "Projects\\iJBNB");
}


int OnCalculate(...)
{
    double cbearsColor[];
    double cbears[];

    int to_copy;

    if(prev_calculated > rates_total || prev_calculated <= 0)
        to_copy = rates_total;
    else
        to_copy = rates_total - prev_calculated + 1;


    if(CopyBuffer(jbnbHandle, 4, 0, to_copy, cbearsColor) != to_copy) 
        return 0;


    if(CopyBuffer(jbnbHandle, 3, 0, to_copy, cbears) != to_copy) 
        return 0;

    for(int i = 2; i < to_copy; i++)
    {    
        if(cbearsColor[i] == 2
            && cbearsColor[i - 1] == 1
            && cbears[i] > 0.2
            )
        {
            sellArrowsBuffer[i] = open[i] - symPoint * 30;
        }
    }

    return rates_total;
}

 
你能告诉我,如何确保在实时拖动HLINE时,不抓到处于线附近的止损/止盈订单?我已经尝试禁用单次点击交易,但没有帮助。这种效果在策略测试器中并不存在。我想使用OnChartEvent(顺便说一下,我知道事件不在测试器上处理,只在继电器上处理?)
 

下午好,该教程给出了一个专家的例子 https://book.mql4.com/ru/samples/expert

你能告诉我为什么他在同一支蜡烛上做了几次购买/销售?


收盘。看到止损

 
Pyro:
你能告诉我,如何确保在实时拖动HLINE时,不抓到处于线附近的止损/止盈订单?我已经尝试禁用单次点击交易,但没有帮助。这种效果在策略测试器中并不存在。我想使用OnChartEvent(顺便说一下,我知道事件不在测试器上处理,只在继电器上处理?)