在 MQL4 中,变量不会改变

问题描述 投票:0回答:1

我开始学习MQL4,想写一个简单的程序来练习。当我开多头头寸时,positions 变量应该取值 1,当我做空头寸时,positions 变量应该取值 -1。不幸的是,循环执行后,变量仍然是0。我做错了什么?附言。 Close_Trade 是我的内部函数并且运行良好。

void OnTick()
  {
   
     {
      double stoch= iStochastic(NULL,0,14,3,3,0,1,0,0);
      int number_of_order= OrdersTotal();
      static int positions=0;
      if(number_of_order==0)
        {
         if(stoch<=20)
           {
            int purchase_order=OrderSend(_Symbol,OP_BUY,0.01,Ask,0,0,0,NULL,0,0,clrNONE);
            positions++;
           }
         else
            if(stoch>=80)
              {
               int sales_order=OrderSend(_Symbol,OP_SELL,0.01,Bid,0,0,0,NULL,0,0,clrNONE);
               positions--;
              }
        }
       Alert(positions);
     if(stoch>70 && positions==1)
        {
         Close_Trade();
         positions--;
        }
      if(stoch<30&&positions==-1)
        {
         Close_Trade();
         positions++;
        }
     }

  }
//+------------------------------------------------------------------+

我在位置变量中添加了一个静态变量,但这没有帮助。

variables mql4
1个回答
0
投票

简答:从

static int positions=0;
函数中删除
OnTick
并写出
OnTick
函数之前和之前。不用写
static
.

长答案

下题请填上行号

然而问题出在线路上

    static int positions=0;

你的程序的过程是你的代码为每个市场报价执行一次

  1. double stoch= iStochastic(NULL,0,14,3,3,0,1,0,0);
    中设置了
    stoch
    变量的值,例如,我们假设它的值等于15。
  2. int number_of_order= OrdersTotal();
    中,
    number_of_order
    的取值等于
    OrdersTotal()
    ,我们假设您没有未结订单,并且此变量的值等于0.
  3. static int positions=0;
    中,位置变量取值0.
  4. 由于您没有未结订单,程序进入
    if(number_of_order==0)
    .
  5. 因为
    stock
    值小于20,所以程序输入
    if(stoch<=20)
    开单,
    position
    增加一个单位等于1.
  6. Alert(positions);
    中,它发出警告并输出
    position
    的值,即 1(在每个市场报价中警告位置变量的值是没有用的,以这样的方式编写程序,如果
    position
    的值发生变化。我认为这样更好)。
  7. 因为
    stoch
    的值为15,
    position
    的值为1,所以程序没有进入剩下的两个
    if
    语句,
    position
    的值仍然等于1。

程序结束并等待下一个市场报价(非常短)。在下一个报价开始时,

stoch
变量被重置为
ouble stoch= iStochastic(NULL,0,14,3,3,0,1,0,0);
。在
int number_of_order= OrdersTotal();
中,
number_of_order
变为1。等于1的
position
的值将等于0与
static int positions=0;

这是你程序的问题你必须从

static int positions=0;
函数中删除
OnTick
并在它之前写出来。不用写
static
.

© www.soinside.com 2019 - 2024. All rights reserved.