[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 280

 
我找不到重新绘制自定义指标 的命令。如果有人知道,请告诉我。提前感谢 =)
 
tesla-pip:
我找不到重新绘制自定义指标的命令。如果有人知道,请告诉我。提前感谢 =)

我已经找到了。谢谢大家=)
 

下午好。

你能帮我想出一个公式吗?

我有一个补给步骤SD=100。

如果价格是25,那么对它来说,封顶水平将是DE=100

如果价格是102,其单位率将是UD=200

如果价格为215,则充值率为BP=300

价格再次跌至135,见顶的水平将是UD=200

 
TarasBY:

而这种事情的顺序是正常的(这些是终端的原则)。

如果你想让指标B 在指标A 的参数发生变化时改变其指示,在指标之间进行信息交换(可以是文件、终端的全局变量、计算机RAM):指标A 在初始化时传递其可初始化的参数,指标B 定期检查指标A 的可能参数变化。

谢谢你的答复,但我不能使用它,因为我不了解所有的东西,也不擅长编程,请你对我的指标代码做必要的修改。



第一个代码是指标A

第二个代码指标B

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Green
#property  indicator_color3  Red
#property  indicator_width2  2
#property  indicator_width3  2
#property  indicator_level1 0.0

//---- input parameters
extern int FastPeriod =5;
extern int LowPeriod  =34;
//---- indicator buffers
double     ExtBuffer0[];
double     ExtBuffer1[];
double     ExtBuffer2[];



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);
   SetIndexDrawBegin(0,34);
   SetIndexDrawBegin(1,34);
   SetIndexDrawBegin(2,34);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("My_AO");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
      
  
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd
   for(int i=0; i<limit; i++)
      ExtBuffer0[i]=iMA(NULL,0,FastPeriod,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,LowPeriod,0,MODE_SMA,PRICE_MEDIAN,i);
//---- dispatch values between 2 buffers
   bool up=true;
   for(i=limit-1; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
      if(current>prev) up=true;
      if(current<prev) up=false;
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
      else
        {
         ExtBuffer1[i]=current;
         ExtBuffer2[i]=0.0;
        }
        
       
     }
//---- done
   return(0);
  }
#property indicator_separate_window
#property indicator_minimum -1.5
#property indicator_maximum 1.5
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property  indicator_width1  2
#property  indicator_width2  2
#property indicator_level1 0.0

//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {  
      
       
    double UP,DN;     
  
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
      { 
        UP=iCustom(NULL,0,"My_AO",1,i+1);               
        DN=iCustom(NULL,0,"My_AO",2,i+1);    
             
        
       if(UP>0)       
         {ExtMapBuffer1[i+1]=1;
          ExtMapBuffer2[i+1]=0;
         }
         
       if(UP<0)       
         {ExtMapBuffer1[i+1]=-1;
          ExtMapBuffer2[i+1]=0;
         }  
         
                              
       if(DN>0)            
         {
          ExtMapBuffer1[i+1]=0;
          ExtMapBuffer2[i+1]=1;
         }
              
       if(DN<0)            
         {
          ExtMapBuffer1[i+1]=0;
          ExtMapBuffer2[i+1]=-1;
         }
               
                       
    
    }
//----
   return(0);
 
   }
   
//+------------------------------------------------------------------+    
   

 

上一个问题已经解决了,新的问题是

我在每个酒吧都重新计算了补给水平。

我怎样才能记住最后一栏的水平?

并用它来打开一个交易

 
MK07:
谢谢你的答复,但我不能使用它,因为我不了解所有的东西,也不太擅长编程。

你提供我为你做你正在 "玩 "的事情。对不起,不感兴趣。

而且,如果你正在学习编程,这对你来说是一项有趣的任务。

 
大家好。我的 "CurrencyPowerMeter "指标有问题,我不能把它移到终端窗口的其他位置。如果你能提供帮助,我将非常乐意。
 
我决定问你一个问题,也许你能告诉我。我正在写一个指标,在该指标中,我处理tick时间框架上的ticks(独立打开,这个)。我的缓冲阵列并不是每一次都处理,而是有选择地处理(例如每60秒,但这不是必须的)。而不是
int    counted_bars=IndicatorCounted();

我理解以下结构。

extern int sec=60;//объявляем количество секунд
int i;//будет индексом текущей "свечи" (тика)
int i_prev;//будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назад
double MyBuffer[];//этот будет на чарте
double MyTemp[];//этот только для подсчётов

int init(){
   IndicatorBuffers(2);
   SetIndexBuffer(0,MyBuffer)
   SetIndexBuffer(1,MyTemp)
   SetIndexDrawBegin(0,14);
   i=Bars-1;
   while(Volume[i]-Volume[Bars-1]<sec) i--;//потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
   i_prev=Bars-1;//отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()
   return(0);
}

int start(){
   double deltaHigh,deltaLow;
   int counted_bars=IndicatorCounted();//честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)
   if(counted_bars>=i) i=Bars-counted_bars-1;//аналогично
   while(i>=0){//цикл обработчика
      deltaHigh=High[i]-High[i_prev];//к примеру
      deltaLow=Low[i_prev]-Low[i];
      //и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
      i_prev=i;//запоминаем теперь текущий индекс как индекс предыдущего тика
      while(Volume[i_prev]-Volume[i]<sec){//и уходим вперёд на заданное количество секунд
         i--;
      }
   }
...

现在的问题是。在纯M1版本中,接下来的事情是标准的。

   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;//принтовал, при первом обращении limit=Bars-2, при последующих limit=2
   for(i=0; i<=limit; i++){
      MyBuffer[i]=iMAOnArray(MyTemp, 0, 14, 0, MODE_EMA, i);

用什么来代替limit和counted_bars?我的理解是。

int counted_bars=ArraySize(MyTemp)-1;//сразу после цикла while

(因为60秒内的刻度数不是恒定的,也就是说,只写int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_是不行的)。

还是我什么都错了?

p.s. 在一个可能的问题之前,我将回答:我知道在外汇市场上sec!=60是不适用的,sec=60是没有意义的,但我也不在外汇市场上交易。

 
MK07:
谢谢你的答复,但我不能使用它,因为我不了解所有的东西,也不擅长编程,能否请你对我的指标代码做必要的修改。
对不起,你有车吗?如果你有一个,你不认为它是一种奢侈品,只是一种必需品,是吗?如果没有,你也不会让它像这样过一辈子,是吗?这是一个时代,你必须知道如何驾驶汽车。我只是一个农民,但我做我的工作,对我来说,编程与院子里的工作没有什么不同,就像锁匠的工作一样,同样是用手工作(我住在乡下)。独轮车、手推车或MQL4对我来说都只是工具。也许城市居民对它的看法是不同的,我不知道。手册中的全局变量在这里,标准文件函数在这里,更快这些,但通过WinAPI。我昨天想回答,但没有。
 

大家下午好!

我正在学习使用数组。

我有一个数组。我已经用字符串初始化了它,即 双倍质量[3567]={0.85374 , 0.85694 , 0.85974 , ....};

而程序读取了数组并执行了它。

现在我已经将同一个数组初始化为一列

双倍的Massi[3567]

{

质量[ 0] = 0.85374;
质量[ 1] = 0.85694;
质量 [ 2 ] = 0. 85974;
质量 [ 3 ] = 0.86174;
质量 [ 4] = 0.86474;
质量 [ 5] = 0.86494;
质量 [ 6] = 0.86504。

质量[ 7] = 0.86524。

}

编译器 没有产生任何错误,但产生了一个警告

'{' - 全局范围的表达不允许 C:\Program Files\Alpari NZ MT4(2)\experts\include\MASSIV.mqh (4, 2)

数组像以前一样被全局声明(当时用字符串初始化,工作正常)。

 #include <MASSIV.mqh> 


 
int start()
{
 double Price=iOpen (Symbol (),0,0);         
 double SL=NormalizeDouble (Price+3000*Point, Digits);         
 double TP=NormalizeDouble (Price-100*Point, Digits);   

 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика
 double ld_Delta = 0.0010;
 int S = ArrayBsearch(  mass,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 

 int last_order_bar = 0;
int ot = OrdersTotal();
...............................(остальной код опустил,но он  не изменился)

日志中只有2个条目。

2013.04.12 16:14:44 XXX测试开始

2013.04.12 16:14:36 XXX EURUSD,H1:加载成功


问题:为什么程序不能读取一列初始化的数组

谢谢你。