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

 
Pyro:

在初始化过程中,除了全局变量外,所有的东西都被重置。
如果你只是关闭计算机或专家顾问运行的服务器被关闭了呢?
 
artmedia70:
在这里我们应该澄清,GV是终端变量,而不是EA变量。

我已经开始阅读和学习。现在我知道,全局变量 和全球变量是不同的东西。

顺便说一下,关于129号错误,我经常问你这个问题。问题是,我有一个5位数的DC。

我的专家顾问是slipage 2,这可能是它一直无法跟上价格的原因。现在我把它设置为15个点。

 
artmedia70:
这里应该明确,GV是终端变量,而不是EA变量。


我的意思是,EA可以使用它们,只是为了在初始化过程中保存数值(除其他外)。
 
Forexman77:
如果我把电脑关掉或运行EA的服务器崩溃了怎么办?


这里是有趣的地方。全局变量存储在缓存中,在某些情况下会写入文件。它看起来像是在一段时间后或在去初始化期间。有时我在重启过程中会丢失gvariables.dat(全局变量值)。这一点必须加以考虑。或者他们根本没有时间把它从缓存中复制到磁盘。这意味着我们不能保证它们已经在磁盘上而不是在缓存中。如果我说错了,请纠正我。


Forexman77:

我开始阅读和学习。我现在知道,全局变量和全球变量是不同的东西。

顺便说一句,关于我经常被问到的129号错误。问题是,我有一个五位数的DC。

我的专家顾问是slipage 2,这可能是它一直无法跟上价格的原因。我会把它设置为15个点。


我不认为这就是原因。我的五位数 上有一个3。一切都正常打开。在我的记忆中,经纪人已经同意,点仍然是一个基本点,普遍接受(零后的第4位),小数点是一个小数点。这样,当你输入6、7、8位数字时,就不必每次都改变 "点 "的含义。
 
Pyro:

这里是有趣的地方。全局变量被存储在缓存中,在某些情况下会被写入文件中。这有点像在某个时期之后。在实际操作过程中,有这样的情况:gvariables.dat(存储全局变量值的文件)在计算机急剧重启时被简单地丢失。这一点必须加以考虑。或者他们根本没有时间把它从缓存中复制到磁盘。这意味着我们不能保证它们已经在磁盘上而不是在缓存中。如果我说错了,请纠正我。
也许你可以试着写一下,然后关掉电脑。当你打开它时,试试Alert,看看它是否在那里。尽管我不会撒谎,到目前为止,我只使用静态 变量和标志,对全局变量还不能肯定地说什么。
 
Forexman77:
也许你可以试着录音,然后把电脑关掉。而当你打开它时,试着呼叫警报,看看它是否在那里。尽管我不会撒谎,到目前为止我只使用静态变量和标志,对全局变量还不能肯定地说什么。


你可以在菜单->工具->全局变量 中查看。那里有一份名单。或GlobalVariableCheck。我的经验表明,尽管如此,把所有的东西都保存在一个物理文件中会更好。
 
你好!
,请找出我推理中的错误。

这是我在创建指标时纠结的第二天,即在附加在主窗口上的附加窗口上显示线的问题。在我看来,有必要对未计算的条形图进行计算,并将计算结果的数值交给缓冲区。这一次,我用更复杂的代码来做例子(我喜欢处理相对巨大的代码)。这里是 "创造力的清算":

//+--------------------------------------------+
#property indicator_separate_window
#property indicator_minimum -10
#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
extern double N = 1;
//+--------------------------------------------+
//Deklaration                                  |
//+--------------------------------------------+
double A; double C;       
double M; double D;
double L; double I;
double B; double F;
double K; double Buf_0[];
double G; 
//+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//+--------------------------------------------+
int start() {
//Level 1
A = iRSI(Symbol(),0,10,0,0);
M = iRSI(Symbol(),0,20,0,0);
L = iRSI(Symbol(),0,15,0,0);
B = iStochastic(Symbol(),0,10,6,6,0,0,0,0);
K = iStochastic(Symbol(),0,10,6,6,0,0,1,0);
C = iADX(Symbol(),0,10,0,0,0);
D = iADX(Symbol(),0,10,0,1,0);
I = iADX(Symbol(),0,10,0,2,0);
F = iRVI(Symbol(),0,10,0,0);
  //Level 2
  Buf_0[0] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
  return; } 
//+-------------------------------------------+ 

.

你可以清楚地看到,"在此清算 "的缓冲值是 "0",也就是说,这个指标将只从交易平台开始的那一刻开始画线。而且除了实际数据外,我还需要历史数据。

我使用了这个代码中描述的信息(取自MQ4教程)。

//--------------------------------------------------------------------
// separatewindow.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
#property indicator_separate_window // Отображение в отдельном окне
#property indicator_buffers 1       // Количество буферов
#property  indicator_color1 Blue     // Цвет первой линии
#property  indicator_color2 Red      // Цвет второй линии
 
extern int History  =50;            // Колич.баров в расчётной истории
extern int Aver_Bars=5;             // Количество баров для расчёта
 
double Buf_0[];                     // Объявление индикаторного массива
//--------------------------------------------------------------------
int init()                          // Специальная функция init()
  {
   SetIndexBuffer(0,Buf_0);         // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
   return;                          // Выход из спец. ф-ии init()
  }
//--------------------------------------------------------------------
int start()                         // Специальная функция start()
  {
   int i,                           // Индекс бара
   n,                               // Формальный параметр
   Counted_bars;                    // Количество просчитанных баров 
   double
   Sum_H,                           // Сумма значений High за период
   Sum_L;                           // Сумма значений Low  за период
//--------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      Sum_H=0;                      // Обнуление в начале цикла
      Sum_L=0;                      // Обнуление в начале цикла
      for(n=i;n<=i+Aver_Bars-1;n++) // Цикл суммирования значений 
        {
         Sum_H=Sum_H + High[n];     // Накопление суммы макс.значений
         Sum_L=Sum_L + Low[n];      // Накопление суммы мин. значений
        }
      Buf_0[i]=(Sum_H-Sum_L)/Aver_Bars;// Знач. 0 буфера на i-ом баре
      i--;                          // Расчёт индекса следующего бара
     }
//--------------------------------------------------------------------
   return;                          // Выход из спец. ф-ии start()
  }
//--------------------------------------------------------------------
我会挑出我需要的东西,我会得到它...
extern int History  =50;            // Колич.баров в расчётной истории
extern int Aver_Bars=5;             // Количество баров для расчёта
double Buf_0[];                     // Объявление индикаторного массива
int start()                         // Специальная функция start()
  {
   int i,                           // Индекс бара
   n,                               // Формальный параметр
   Counted_bars;                    // Количество просчитанных баров 
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
      Buf_0[i]=(Sum_H-Sum_L)/Aver_Bars;// Знач. 0 буфера на i-ом баре
      i--;  

然后,通过删除评论和逻辑划分,将其带入 "阅兵式视图",我得到了。

//|+--------------------------------------+
//|Inputs                                 |
//|+--------------------------------------+
extern int History  =50;
//|+--------------------------------------+
//|Declaration                            |
//|+--------------------------------------+
double Buf_0[];
int i;
int n;
int Counted_bars;
//|+--------------------------------------+
//| Start?                                |
//| Yes, babe!                            |
//|+--------------------------------------+
int start(){
//+-----------+
//Level 1 
//+-----------+
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
  //+-----------+
  //Level 2
  //+-----------+
  if (i>History-1) i=History-1;
    //+------------+
    //Level 3 
    //+------------+
    Buf_0[i]= 
    i--;  
//+---------------------------------------+

在这里,我留下了需要与 "主 "代码合成的对象。进行融合后,我得到以下代码。

//+--------------------------------------------+
#property indicator_separate_window
#property indicator_minimum -10
#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
//|+--------------------------------------------+
//|Inputs                                       |
//|+--------------------------------------------+
extern double N = 1;
extern int History  =50;
//|+--------------------------------------------+
//|Deklaration                                  |
//|+--------------------------------------------+
double A; double C;       int i;
double M; double D;
double L; double I;       int Counted_bars;
double B; double F;
double K; double Buf_0[];
double G; 
//|+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//|+--------------------------------------------+
int start() {
       //|+-----------+
       //|Level 1     |
       //|+-----------+
       A = iRSI(Symbol(),0,10,0,0);
       M = iRSI(Symbol(),0,20,0,0);
       L = iRSI(Symbol(),0,15,0,0);
B = iStochastic(Symbol(),0,10,6,6,0,0,0,0);
K = iStochastic(Symbol(),0,10,6,6,0,0,1,0);
       C = iADX(Symbol(),0,10,0,0,0);
       D = iADX(Symbol(),0,10,0,1,0);
       I = iADX(Symbol(),0,10,0,2,0);
       F = iRVI(Symbol(),0,10,0,0);
   Counted_bars=IndicatorCounted();
              i=Bars-Counted_bars-1;
         //+-----------+
         //Level 2     |
         //+-----------+
         if (i>History-1) i=History-1;
         Buf_0[i] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
         return; } 
//+-------------------------------------------+
在编程过程中,我装饰性地改变了 "主 "代码,并从 "附属 "代码中删除了一些值。运行代码后,我注意到水平线,这表明我的推理有误,因为自定义指标 中使用的技术指标不能在很长一段时间内给出构建函数 "y = x "的图形的值。

梗概。
我的名字是约翰(尤金,但以美国方式)。

我今年15岁,已经做了5天的交易,在学习货币交易领域,即指标分析和图形分析(简而言之,T.A.:)方面,我感到了巨大的进步。)
我觉得 "手动交易 "越来越没有前途,所以我决定直接去做 "自动交易"。

"挑剔 "所有不充分的判断!我想知道更多,你的评论将帮助我。

 
Link_x:
你好!
请找出我推理中的错误。

第二天的工作到此结束,我正在努力创建指标,即在一个附加于主窗口的额外窗口上显示线条。我认为,有必要在未计算的条上进行计算,并将计算结果交给缓冲区。这一次,我用更复杂的代码来做例子(我喜欢处理相对巨大的代码)。这里是 "创造力的清算":

.

你可以清楚地看到,"在这块草地上",缓冲值是 "0",也就是说,这个指标只从交易平台启动的那一刻开始画线。而且除了实际数据外,我还需要历史数据。

我使用了这段代码中描述的信息(取自MQ4教程)。

我把我需要的东西分离出来,我就会得到...

然后,通过删除评论和逻辑划分,将其带入 "阅兵式视图",我得到了。

在这里,我留下了需要与 "主 "代码合成的对象。在进行融合后,我得到这个代码。

在编程过程中,我装饰性地改变了 "主 "代码,并从 "附属 "代码中删除了一些值。 启动代码后,我注意到了水平线,这表明我的推理有误,因为自定义指标中使用的技术指标在很长一段时间内不能给出构建函数 "y = x "的图形的值。

梗概。
我的名字是约翰(尤金,但以美国方式)。

我今年15岁,从事交易5天,我觉得自己在研究货币交易领域,即指标分析和图表分析(简而言之,T.A.:)方面取得了很大进步。)
我觉得 "手动交易 "变得越来越没有前途,所以我决定直接去做 "自动交易"。

"挑剔 "所有不充分的判断!我想知道更多,你的评论将帮助我。

开头是一个好的开始。

注意 "历史 "变量,尝试替换不同的值。

//                Джон(Евгений).mq4 

//+--------------------------------------------+
#property indicator_separate_window
//#property indicator_minimum -10
//#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
//|+--------------------------------------------+
//|Inputs                                       |
//|+--------------------------------------------+
extern double N = 1;
extern int History  =50;
//|+--------------------------------------------+
//|Deklaration                                  |
//|+--------------------------------------------+
double A; double C;       int i;
double M; double D;
double L; double I;       int Counted_bars;
double B; double F;
double K; double Buf_0[];
double G; 
//|+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//|+--------------------------------------------+
int start()
{
       //|+-----------+
       //|Level 1     |
       //|+-----------+
 for( i=0; i<History; i++)
    {    
       A = iRSI(Symbol(),0,10,0,i);
       M = iRSI(Symbol(),0,20,0,i);
       L = iRSI(Symbol(),0,15,0,0);
       B = iStochastic(Symbol(),0,10,6,6,0,0,0,i);
       K = iStochastic(Symbol(),0,10,6,6,0,0,1,i);
       C = iADX(Symbol(),0,10,0,0,i);
       D = iADX(Symbol(),0,10,0,1,i);
       I = iADX(Symbol(),0,10,0,2,i);
       F = iRVI(Symbol(),0,10,0,i);
    Buf_0[i] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
   }
 return;
} 
//+-------------------------------------------+
 
Link_x:
你好!
请找出我推理中的错误。

第二天的指标开发即将结束,我正在为在附加在主窗口上显示线而苦恼。在我看来,有必要对未计算的条形图进行计算,并对计算结果给予缓冲区的数值。这一次,我用更复杂的代码来做例子(我喜欢处理相对巨大的代码)。这里是 "创造力的清算":

.

你可以清楚地看到,"在这片草地上",缓冲值是 "0",也就是说,这个指标只从交易平台启动的那一刻开始画线。而且除了实际数据外,我还需要历史数据。

我使用了这段代码中描述的信息(取自MQ4教程)。

我把我需要的东西分离出来,我就会得到...

然后,通过删除评论和逻辑划分,将其带入 "阅兵式视图",我得到了。

在这里,我留下了需要与 "主 "代码合成的对象。在进行融合后,我得到这个代码。

在编程过程中,我装饰性地改变了 "主 "代码,并从 "附属 "代码中删除了一些值。 启动代码后,我注意到了水平线,这表明我的推理有误,因为自定义指标中使用的技术指标在很长一段时间内不能给出构建函数 "y = x "的图形的值。

梗概。
我的名字是约翰(尤金,但以美国方式)。

我今年15岁,从事交易5天,我觉得自己在研究货币交易领域,即指标分析和图表分析(简而言之,T.A.:)方面取得了很大进步。)
我觉得 "手动交易 "变得越来越没有前途,所以我决定直接去做 "自动交易"。

"挑剔 "所有不充分的判断!我想知道更多,你的评论将帮助我。


开始向循环(for、wile、while do)挖掘,为什么你需要它呢))。


如果你需要历史数据的值--你不能不在一个循环中枚举这些数据;)

上面你给出了一个关于历史的例子,它设置了历史的条数,这将被指标处理,这就是你应该做的。

 


在图片中,我已经用箭头标出了输出的位置。我不明白问题出在哪里。我们进去了,记住了时间。

然后,当时间比进场时长出一个周期,且价格低于3天MA最小值时退出。

代码如下。

signal =   MA_6_t - iClose(Symbol(),Period(),0);
MA_2_t=iMA(NULL,0,3,0,MODE_EMA,PRICE_LOW,0); 
static datetime t;

if  (signal > 0.006) 
          {                                          
          Opn_S=true; 
          t=Time[0];                      
          }
if  (Bid <= MA_2_t)
      {
       if (Time[1]>t)
          {                                      
          Cls_S=true;         
          }
      }
你怎么看?