エラーコード "0"? - ページ 2

 
DomGilberto:
ああ、すみません - 私はもはやどんなエラーも得ることはありません。買い注文が通るだけで売り注文は出ません...。

それはMAクロスオーバーに関する私の前のスレッドに関連しています - 私はまだそれを得ることができません!しかし、私は誰も巻き込みたくないし、人々が私に答えを与えている間、死んだ馬を打つ(私は答えを理解していないが(笑))!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!。RaptorUKさん、ありがとうございました。

他の人のことは言えませんが、私は巻き込まれるつもりはありません.

エラーもなく、売り注文も 出されていないのなら、OpenOrdersThisPair(Symbol())は0にはならないでしょう、その関数はどんな型ですか? intですかdoubleですかboolですか?

 
//+----------------------------------------------------------------------------------------------------------------------------------------+  
//| 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);
   }

これが問題なのは分かっているんです!以前、別のトピックでこの件について質問したことがあるのですが、この質問に答えていただけると本当にありがたいです。もちろん、不必要な書き方もしていますが......それは無視してください......)

Q.1)「ダブルトリガービートタイム」の行と>>の部分についてですが...。私が理解したいのは、この関数に、すべての移動平均が前に比較した移動平均より大きくなったときを見つけ出し、それらが正しい順序で残っていることを確認するのを忘れるように指示する方法だけです...。もしそうなら、他の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がどこにあるのかを知りたいと思っていますが、それらは常に真実である必要はありません...。私はただ、他の何よりも先にそれが真実であって欲しいのです...。これが真実であると仮定すると、この価格から起こる必要があるのは、60EMAの下にどのバーも終わらずに(ロングの場合)ロングポジションが押し出され、有効であることです。

私はTriggerBarTimeを使って、すべての移動平均線が 正しい順序で積み重なった最高値と、21本EMAにタッチして進むバーを見つけています...。

というわけで、インデントを直していただいたのですが、これは私が以前書いたこととほぼ同じです(何か見落としていなければ)。

(そうそう、boolにすべきなのは分かっているのですが、単に遊んでいて、元に戻すのを忘れていました。)

 
double TriggerBarTime = (i1>i2 .. 
真か偽か 0か1か それ以外か
 int iTBT= iBarShift(NULL,60, TriggerBarTime, true),
iBarShiftの第3引数はdatetimeでなければなりません。iBarShift(0) または (1)は常にBars-1になります。
 
datetime          TriggerBarTime;
グローバルセクションにあるのですが・・・。

前の投稿が理解できないのですが?^

あなたの上の投稿に関連して、If行をどのように書くか提案することは可能ですか?
 
DomGilberto: グローバルセクションでこれを...
AND ローカル宣言で隠していますね。
 
申し訳ないが、これまた意味がわからない......。
 
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
}