ONLY CANDLE / BAR - キャンドルはどのように分類すればよいのでしょうか?- ご指摘をお願いします。 - ページ 5

 
Wodzuuu:

質問1.これらの関数でMyPipsをキャンドルで使用しなければならないのでしょうか? bool BULL4()

はい、しかし、BULL4()関数の if文は正しいですか?つまり、計算しているそのローソクを探しているのでしょうか?

ウォッヅー

そして、私は自分用のプログラムを書いたのですが、あなたはどうですか?

それはあなたのものです、だからそれはあなたのために良いものでなければなりません、私の形ではありません。

いくつかのコメント。

bool CheckForCloseBULL4()
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )
            if(OrderOpenPrice()+8*MyPips < Ask) return(true);
            
   else return(false);   // <-- the else here is wrong. Use {} if you are unsure what is processed where
}


int OpenOrders_BULL4(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)   // <-- do it like you do it in the other loops!
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;  // <-- break? Why not using always the same code for the same thing? 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1) //     Look at the for loop you used in CheckForCloseBULL4().       
        {
         if(OrderType()==OP_BUY) buys++; // <-- why this additional if? Simplify it to: 
        }                                //     if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1 && OrderType()==OP_BUY) buys++;  
     }
   return(buys);
  }
 

ラストエ ラーの修正

bool CheckForCloseBULL41()
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )
            if(OrderOpenPrice()+8*MyPips < Ask) return(true);
            else return(false);                                                                              // <-- the else is correct now
}

int OpenOrders_BULL4(string symbol)
  {
   int buys=0;
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)                                                                     // Loop is correct and use the same code
     {
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1 && OrderType()==OP_BUY)buys++;
     }
   return(buys);
  }

2番目の買いを追加

を追加しました。

bool BULL42send()
   {
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )
            if(OrderOpenPrice()+8*MyPips < Ask) return(true);
      else return(false);
   }

OpenとCheckForClose、CloseはBULL41と同じコード(pipsのみ異なる)。

開始関数はこのような感じです。

void start()
  {
   if(BULL4() && BULL41send() && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
     }
   if(BULL42send() && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }
//+------------------------------------------------------------------+

そして今、私はフラグ、リセットシグナル、そして開始関数を変更する必要があります。

私の想像では

新しいバー。

bool New_Bar = false;

bool Fun_New_Bar()
   {
   static datetime New_Time=0;
   New_Bar=false;   
   if(New_Time!=Time[0])
      {
         New_Time=Time[0];
         New_Bar=true;
      }
   }

そして、開始は次のようになります。

void start()
  {
   bool SignalBULL41Executed=false;
   bool SignalBULL42Executed=false;
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
       SignalBULL41Executed=true;
     }
   if(BULL42send() &&  !SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
       SignalBULL42Executed=true;
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }

コードは動作していますが、多分私はいくつかのエラーを持っている


	          
 

ResetSignals()がないため、うまく動作しない。

 
Wodzuuu:

私は最後のエラーを修正します。
...
...
...

コードは動作していますが、おそらくいくつかのエラーがあります


私は、それが素敵な形式ではなかったので、CheckForCloseBULL41()関数の 他の人が間違っている、とは言わなかった。あなたは何も変えていません。もし、複数のオープンオーダーが以下にマッチする場合、ループがすべてのオーダーを通過しないため、問題が発生します。

if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )

すでに開いている注文の特定の数だけ新しい注文を開く限り、シグナルフラグは必要ありません。これはまた、コードがより多くの注文を開くことを防ぐことができます。

if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)

Fun_New_Bar() 関数が正しくありません。

 

1.その他の問題

もしこれが正しくないなら、もう一度検索してみます。

bool CheckForCloseBULL41()
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
   {
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
        {
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol() && OrderType() == OP_BUY )
            {
            if(OrderOpenPrice()+8*MyPips < Ask)
               {
                  return(true);
               }
            }
         }
    }    
   return(false); 
}

2.新しいバーの問題

bool Fun_New_Bar()                
   {                                
   static datetime New_Time=0;      
                     
   if(New_Time!=Time[0])           
      {
      New_Time=Time[0];                
      return(true);            
      }

   return(false);
   }

3.リセット信号の 問題

void start()
  {
   bool SignalBULL41Executed;
   bool SignalBULL42Executed;
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
       SignalBULL41Executed=true;
     }
   if(BULL42send() &&  !SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
       SignalBULL42Executed=true;
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }

2.と3. ダメだったらどう したらいいのか分からないので できれば最大の指示を 仰ぎたいと 思います。

 

1. else 問題
修正済み

2.New Bar 問題
修正済み

3.リセット信号の 問題

void start()
  {
   bool SignalBULL41Executed;  //<-- if defined inside the start function, the flags get reset with every tick.
   bool SignalBULL42Executed;  //    define it outside in global scope.
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position   //<-- As far as I remember, you defined this as bool. Do only set the flag, if the function returns true.
       SignalBULL41Executed=true;            //    change to: if(OpenBULL41())SignalBULL41Executed=true;
     }
上記の修正は、フラグに関するものです。しかし、未解決の問題は、それが必要なのかどうかということです。新しい注文を出すだけで、特定の数の注文が すでに出ている場合は、おそらく必要ないでしょう。黄色いマークの表現はそういう意味です。
if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)

しかし、心配はいりません。これは、フラグに対しても有効であり、後で、それらが時代遅れであることが判明したときに、それらを排除することができます。

 

フラグは 必要 ないと思いますがいつかは 役に立つと 思います

つのEAを1つの EAで持つには?
EA BULL 4のコピーを作り BULL6の idexと スペーシング pipsを 変更しました。
EABull4 + EA Bull6 あまりに新しいEAをコピー する 数字 ( )以降全て 関数 start()とmagicma2 内の 変更を 行う...

私の EAは非常によく動作し、シナリオは お互いに 干渉 しません。私は幸せ です

私は あなたの助けのために あなたに感謝 したかった あなたの助け 、特に あなたの サポートクロニン なしで 私は それを 書くことはないだろ う。

私の中では、主題は終わりです。

課題

 
Wodzuuu:

私の EAは、シナリオが 互いに 干渉 することなく、非常にうまく動作して います。私は幸せ です

私は あなたの助けに 感謝 したかった あなたの助け 、特に あなたのサポート Kroninが なければ、私は それを 書く ことはありません。

どういたしまして。嬉しいフィードバックをありがとうございます。