错误代码 "0"? - 页 2

 
DomGilberto:
哦,对不起--我不再得到任何错误了。我只得到了买入订单,没有卖出订单......

这与我之前关于MA交叉的主题有关--我还是不明白!但我不想让自己的想法被扭曲。但我不想在别人给我答案的时候,把别人的问题绕过去,打一个死结(虽然我不明白这个答案)!我希望能有更多的人参与进来。谢谢RaptorUK的帮助!

我不能代表其他人,我没有上当受骗......。

如果你没有出错,也没有下卖单,那么OpenOrdersThisPair(Symbol())就不等于0,这个函数是什么类型的?是int还是double?

 
//+----------------------------------------------------------------------------------------------------------------------------------------+  
//| Check to see if any order open on this currency pair                                                                                   |
//+----------------------------------------------------------------------------------------------------------------------------------------+   

int OpenOrdersThisPair(string pair)
{
   int total=0;
      for(int i=OrdersTotal()-1; i >= 0; i--)
         {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==pair) total++;
         }
         return (total);
} 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

   double ticksize = MarketInfo(Symbol(), MODE_TICKSIZE);
   if (ticksize == 0.00001 || ticksize == 0.001) // if you set this to 0 it WONT throw an order out straight away.
   pips = ticksize*10;
   else pips = ticksize;  
   

   return(0);
  }
我实际上无法理解问题出在哪里。我已经用我有限的知识告诉我的许多方法写了MA if语句(显然是有限的,因为它在空头方面不起作用......)

,我认为这是因为订单不是简单地放在移动平均线 交叉的地方,而是放在不同的点。
 
//+----------------------------------------------------------------------------------------------------------------------------------------+   
//| Function that checks for an MA Cross                                                                                                   |
//+----------------------------------------------------------------------------------------------------------------------------------------+   
  

void CheckForMaTradeLong()
{
   
   TriggerBarTime = Time[1];
   
   for (int i=0; i < Bars; i++)
   {
   double i1  = iMA(NULL,60,3,0,1,0,i); 
   double i2  = iMA(NULL,60,5,0,1,0,i);
   double i3  = iMA(NULL,60,8,0,1,0,i);
   double i4  = iMA(NULL,60,10,0,1,0,i);  
   double i5  = iMA(NULL,60,12,0,1,0,i);
   double i6  = iMA(NULL,60,15,0,1,0,i);  
   double i7  = iMA(NULL,60,30,0,1,0,i);
   double i8  = iMA(NULL,60,35,0,1,0,i);
   double i9  = iMA(NULL,60,40,0,1,0,i);
   double i10 = iMA(NULL,60,45,0,1,0,i);
   double i11 = iMA(NULL,60,50,0,1,0,i);
   double i12 = iMA(NULL,60,60,0,1,0,i); 
   double ema21 = iMA(NULL,60,21,0,1,0,i);   

   double TriggerBarTime = (i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12); // this needs to just tell me where all the MA's fan up and nothing more...
   if(i1 > i12)
   if (TriggerBarTime == true)
       if(Low[1]<ema21 && i12<Close[1]) OrderEntry(0);
         if(Close[1]<i12) DeleteOrder(0);   
   
   break;
   }
   return(i-1);
   }

我知道这就是问题所在!我知道我以前在一个不同的主题上就这个问题问过,但我真的很希望得到这个问题的答案(是的,我知道代码很草率,我只是花了很多时间去砍伐、编译和运行策略,亲眼看到它们是如何相互沟通的。更不用说我的写法也是不必要的......但忽略了这一点......)

问题1)关于 "双倍触发时间 "行和>比节....我想了解的是,我如何告诉这个函数,当所有的移动平均线都大于前一个比较的移动平均线时,就找出它们,然后忘记确保它们保持正确的顺序......相反,从这一点上,我需要确保的是,价格收盘保持在 "i12"(60 EMA)之上--如果它做到了,那么它就可以接着其他的IF语句,通过 "OrderEntry(0) "抛出一个多头订单--如果它没有,那么它需要接着看多头(i1>i2 &&i2>i3...)线,等待它再次为真,再考虑接下来的行...

我知道答案就在我眼前,只是变得有点令人沮丧,真的很感谢这一点小插曲....。谢谢!

 
  1. 您的帖子
    double TriggerBarTime = (i1>i2  && i2>i3   && i3>i4 && i4>i5 && 
                             i5>i6  && i6>i7   && i7>i8 && i8>i9 && 
                             i9>i10 && i10>i11 && i11>i12);
       if (TriggerBarTime == true)
    TrgggerBarTime应该是什么数据类型?
    double  TriggerBarTime = boolean;
       if (double == true)

  2. 为什么在TriggerBarTime中查看旧条,在orderEntry中查看最后一条?
  3. 修正你的缩进方式
    您的帖子
       if(i1 > i12)
       if (TriggerBarTime == true)
           if(Low[1]<ema21 && i12<Close[1]) OrderEntry(0);
             if(Close[1]<i12) DeleteOrder(0);   
    适当缩进。这真的是你的意思吗?
    if(i1 > i12 && TriggerBarTime && Low[1]<ema21 && i12<Close[1]){
        OrderEntry(0);
    }
    if(Close[1]<i12){
        DeleteOrder(0);
    }
    
 
//TriggerBarTime works in conjunction with:

   int iTBT= iBarShift(NULL,60, TriggerBarTime, true),
        iHH= iHighest(NULL,60, MODE_HIGH, iTBT + 1, 0); 
            double buyPrice = High[iHH]+PadAmount*pips;

//I then use this "buyPrice" in conjunction with OrderSend for where the price of the entry order is...

我想知道所有的MA都在哪里,但它们不需要一直是真的......。我只是希望在其他事情之前,这一点是真实的......在这个基础上,从这个价格开始,所有需要发生的事情是,没有任何条形收盘价低于60 EMA(多头),以保持有效的多头头寸被推出......

我正在使用TriggerBarTime来寻找所有移动平均线 按正确顺序堆积的最高点,以及随后进行的触及21 EMA的条形图......

所以,尽管你为我理顺了缩进,但这几乎就是我之前写的东西(除非我错过了什么?

(啊,是的--我知道应该是bool,这是一个错误--我只是在玩,忘了把它们换回来。)

 
double TriggerBarTime = (i1>i2 .. 
它是真还是假 0或1,没有其他含义
 int iTBT= iBarShift(NULL,60, TriggerBarTime, true),
iBarShift的第三个参数必须是数据时间。iBarShift(0)或(1)总是Bars-1。
 
datetime          TriggerBarTime;
我把这个放在全球部分...

我不明白你之前的帖子?^

是否可以建议我相对于我在你上面的帖子如何写If行?
 
DomGilberto: 我把它放在全局部分......
而且你用本地声明隐藏了它。
 
对不起,但这又一次,对我来说毫无意义......。
 
DomGilberto: 对不起,但这又一次,对我来说毫无意义......。
int myVariable = 0;
int start(){
  double myVariable = 1;
  Print(myVariable); // Outputs 1.0
  myVariable++;
  myFunction(myVariable);
}
void myFunction(double v){
  Print(myVariable," ",v); // Outputs 0 2.0
}