我开始学习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++;
}
}
}
//+------------------------------------------------------------------+
我在位置变量中添加了一个静态变量,但这没有帮助。
简答:从
static int positions=0;
函数中删除OnTick
并写出OnTick
函数之前和之前。不用写static
.
长答案:
下题请填上行号
然而问题出在线路上
static int positions=0;
看
你的程序的过程是你的代码为每个市场报价执行一次
double stoch= iStochastic(NULL,0,14,3,3,0,1,0,0);
中设置了stoch
变量的值,例如,我们假设它的值等于15。int number_of_order= OrdersTotal();
中,number_of_order
的取值等于OrdersTotal()
,我们假设您没有未结订单,并且此变量的值等于0.static int positions=0;
中,位置变量取值0.if(number_of_order==0)
.stock
值小于20,所以程序输入if(stoch<=20)
开单,position
增加一个单位等于1.Alert(positions);
中,它发出警告并输出 position
的值,即 1(在每个市场报价中警告位置变量的值是没有用的,以这样的方式编写程序,如果position
的值发生变化。我认为这样更好)。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
.