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

Wodzuuu:

まだ 私の EAを 理解して いない人のために 、 物語を 書く。D hehehehe


イベントは キャンドル です - 購入と売却 または閉鎖の ための様々な オプションを備えて います。

私はあなたが書いたものを読むよりも、あなたのコードを見てより多くを理解する... ...;-)

2番目の機能としてテレビ番組を見る代わりに、本を 読んで理解することを検討すべきです;-)

しかし、あなたのコードとそのストーリーは、少なくともコードについては、部分的に間違っています。

//Pseudo code

if(NewBar) ResetSignals();                //Set all SignalxExecuted to false
if(SignalBuy1&&!SignalBuy1Executed&&OpenOrders()==1){
//do open buy position
  SignalBuy1Executed=true;                //Set Signal to exectued to prevent a reuse in the same bar
}

if(SignalBuy2&&!SignalBuy2Executed&&OpenOrders()==2){
//do open buy position
  SignalBuy2Executed=true;                //Set Signal to exectued to prevent a reuse in the same bar
}

SignalBuy1=CheckForOpenBull42();          //Check for Signal1 condition is true
SignalBuy2=CheckForOpenBull62();	  //Check for Signal2 condition is true	

if(OpenOrders()>0)CheckForClose();        //Check any order needs to be closed


//and so on.....

とりあえず1つのシグナルだけを実装して、必要な機能のコーディングに集中してはいかがでしょうか?もし、1つのシグナルについて良いコードがあれば、他のシグナルを実装するのは簡単でしょうし、多くの関数がすでに存在しています。

後でArrayや他の関数を使って簡素化することもできますが、上記のコードの簡素化は現時点では最大の問題ではないはずです。

削除済み

Kronin はい! ご理解 いただけたようで:) 1つの EAに たくさんのストラテジーを入れて います。
150の EAを同時に動かすと 、 PCが 爆発 しそう な気が する。

それ以降は、ストラテジー EAは 1 つだけで、 中にはすでに 多くの ストラテジーが入っているので 意味が ない。

もちろん、 ストラテジーは 互いに干渉 し合うことはできませんし、一方を実行するともう一方も実行できますし、ストラテジー1、3、5とストラテジー(1、3、5)を同時に実行させることができます。

もう これ以上の話は 書きません :)


私の コードは間違っています - それは知られている、私は 単一の EAに 2つの戦略を入れて みました、コードは うまく 動作 しますが、 全体が うまく動作して いません。

あなたのコードは非常に 興味深いです、 私は それを 勉強 します。

削除済み

こんにちは 、友人は、 コードで 長い 作業の 後 、 クローニンコードからの 情報を介して 構成され、 動作して います。
コードは、単一の EAで 2つの戦略を 提示


1.小さな ろうそく 購入 シナリオのために 青い矢印で マークされ 、 買いの ための2つのオプション です
2. 平均 ろうそくについては、購入 シナリオ ろうそくは 赤い矢印で マーク
され 、 買いのための3つのオプションが あります 。

私も 1 ポイント = 1ピップが 便利な 状況です ( 問題を解決する のは後回し です)。
私は 彼らが エラーの 原因 ではないと思うので、(NewBar) ResetSignals ()の 場合はオプションを 使用 しないで ください。

start() の 関数 PART2を削除 すると、青い 1つのストラテジーが 動作し、 正常に動作 します。
あなたは 2つの 起動 戦略を 含む コード PART 1と PART2を実行した場合 、 しかし、彼らは 重複しています。

Kroninを見ていただけますか?

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA  20050610

//+------------------------------------------------------------------+
//| Check NEW BAR     WORK AT BARS  M15                                 |
//+------------------------------------------------------------------+
/*

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;                    
      }
   }
*/

//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS                    |
//+------------------------------------------------------------------+

int OpenOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
//---- return orders volume
   return(buys);
  }

//+------------------------------------------------------------------+
//| Calculate candle      These is condidion                         |
//+------------------------------------------------------------------+

// scenario 1 / EA 1  /  startegy 1 / blue

bool BULL4()
   {
   if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
   return(true);
   } 

// scenario 2 / EA 2  /  startegy 2 / red

bool BULL6()
   {
   if(Close[1]-Open[1]>=6*Point && Close[1]-Open[1]<=7*Point)
   return(true);
   }
      
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+

// Check for open for scenario 1 / EA 1  /  startegy 1 
 
bool OpenBULL41()
  {
   int    res;
   if(Bid==Close[1]+3*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
      return (true);
     }
   return (false);  
  }
  
//----------------------------------- 
bool OpenBULL42()
  {
   int    res;
   if(Ask>OrderOpenPrice()+4*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
      return;
     }
  }  
  
// Check for open for scenario 2 / EA 2  /  startegy 2
  
void OpenBULL61()
  {
   int    res;
   if(Bid==Close[1]+4*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
      return;
     }
  }
//-----------------------------------  
 
void OpenBULL62()
  {
   int    res;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.62,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
      return;
     }
  }
  
//----------------------------------- 
void OpenBULL63()
  {
   int    res;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.63,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
      return;
     }
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

void CheckForClose()
{
   RefreshRates();
   if(OrderOpenPrice()+4*Point< Ask)
   for (int i = OrdersTotal()-1; i >= 0;i--)       // I Have do -1 in "OrdersTotal()-1"
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);

      }
   }
} 
/*
void CheckForClose2()
{
   RefreshRates();
   if(OrderOpenPrice()+6*Point< Ask)
   for (int i = OrdersTotal(); i >= 0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);

      }
   }
} 
*/
                                       
//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
      
//------------------                                                          PART1      
           bool SignalBULL41Executed=false;
            if(BULL4() && !SignalBULL41Executed && OpenOrders(Symbol())==0)
               {
               OpenBULL41();//do open buy position
               SignalBULL41Executed=true;
               }
               
            bool SignalBULL42Executed=false;
            if(!SignalBULL42Executed && OpenOrders(Symbol())==1)
               {
               OpenBULL42();//do open buy position
               SignalBULL42Executed=true;
               }  
               
            if(OpenOrders(Symbol())>0)CheckForClose();  
            
//------------------                                                          PART 2
            
            bool SignalBULL61Executed=false;
            if(BULL6() && !SignalBULL61Executed && OpenOrders(Symbol())==0)
               {
               OpenBULL61();//do open buy position
               SignalBULL61Executed=true;
               }
               
            bool SignalBULL62Executed=false;
            if(!SignalBULL62Executed && OpenOrders(Symbol())==1)
               {
               OpenBULL62();//do open buy position
               SignalBULL62Executed=true;
               }  
               
           bool SignalBULL63Executed=false;
            if(!SignalBULL63Executed && OpenOrders(Symbol())==2)
               {
               OpenBULL63();//do open buy position
               SignalBULL63Executed=true;
               }                
               
//            if(SignalBULL61Executed && OpenOrders(Symbol())>0)CheckForClose2();                    
            
  }
//+------------------------------------------------------------------+
Wodzuuu:

オプションは 使用 しないでください if (NewBar) ResetSignals () なぜなら、私は それらが エラーの 原因 ではないと思うから です。

Fun_NewBar()関数が コード化されている方法は、あなたがそれを行うことはできません ... あなたはそれがbool 型であり、bool 値を返すように、このようにそれを行う必要があります ... ...

bool Fun_New_Bar()                
   {                                
   static datetime New_Time=0;      
                     
   if(New_Time!=Time[0])           
      {
      New_Time=Time[0];                
      return(true);       // <---- we have a new bar so the function returns true
      }

   return(false);
   }
削除済み

はい、あなたは右の 戻り値は boolと 私は前に表示されない int(すでに固定)が ありますよ。ありがとうございます
しかし、 この関数は、私は 使用しないでください、それは テキストとして ある

私は、これは 私が2つの 重複する 戦略を 分離 する 機能に 適用されないと思います。私は関係が表示さ れません。 または多分 私は間違っている?

//Pseudo code

if(NewBar) ResetSignals();                //Set all SignalxExecuted to false
if(SignalBuy1&&!SignalBuy1Executed&&OpenOrders()==1){
//do open buy position
  SignalBuy1Executed=true;                //Set Signal to exectued to prevent a reuse in the same bar
}

あなたが少し進歩したのを見るのは良いですが、それはまだ長い道のりです:-)

上記のRaptorUK氏の指摘を修正する必要があります。シグナルのリセットは重要で、そうしないとEAが新しい取引を始めるとすぐに止まってしまいます。
あなたの実装は間違っています。SignalExecutedをティック 毎にリセットするのであれば、それは意味がありません。OpenOrdersをフィルタリングしているため、より多くの取引を開始することはできないかもしれません。しかし、あなたのストラテジーは複数の注文を開くことができるので、注文を閉じるアルゴリズムも必要で、新しいバーでSignalExecutedフラグをリセットする必要があると想像できます(あなたの実装では、それは無駄で、必要ありません)。

BULL6が成立していれば、BULL4は実行されないということですね。つまり、赤のストラテジーが有効でなければ青のストラテジーしか実行しないとか、平均のローソクが有効でなければ小さいローソクしか実行しないとか。

if(BULL4()&&!BULL6(){             // <--- only strategy BULL4 is valid, we are looking at a 'small' bar.
  if(!SignalBULL41Executed && OpenOrders(Symbol())==0){
    OpenBULL41();//do open buy position
    SignalBULL41Executed=true;
  }
  if(!SignalBULL42Executed && OpenOrders(Symbol())==1){
    OpenBULL42();//do open buy position
    SignalBULL42Executed=true;
}

次のステップ

// Check for open for scenario 1 / EA 1  /  startegy 1 
 
bool OpenBULL41()
  {
   int    res;
   if(Bid==Close[1]+3*Point)  					                       // <--- equal makes no sense here and you should not compare doubles for equality. 
                                                                                                  Read (again): https://www.mql5.com/en/forum/136997 
     {
      res=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue); // <--- what is your plan with res? You are aware, it does include the ticket 
                                                                                                  number or -1, aren't you?

      return (true);                                                                   // <--- Even if OrderSend() fails you return true.
     }
   return (false);  
  }
  
//----------------------------------- 
bool OpenBULL42()
  {
   int    res;
   if(Ask>OrderOpenPrice()+4*Point) 							// <--- OrderOpenPrice() from a somewhere selected order may or may not work here 
                                                                                                  (may because only one order is open), but it is not nice coded. 
     {
      res=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
      return;
     }
  }  

CheckForClose()関数にも同じような問題があり、さらにマジックナンバーのフィルタもありません。 また、ここでは買いカウントの注文から選択したOrderOpenPrice()は間違った注文を決済してしまうかもしれません(実際にうまくいくかどうかわかりませんが)。
このスレッドの最初のページでRaptorが書いたことももう一度読んでみてください。

あなたの投稿とコード内のコメントから、あなたはどの注文がどのストラテジーに属するかを知りたいのだと感じました。そのためには、2つ目のストラテジーに2つ目のマジックナンバーを定義します。 そうすれば、開いていたストラテジーに従って注文をクローズすることが容易になります。

kronin:

次のステップ

あなたの投稿とコード内のコメントから、あなたはどの注文がどのストラテジーに属するかを知りたいのだと感じました。そのためには、2つ目のストラテジーに2つ目のマジックナンバーを定義します。 そうすれば、開いていたストラテジーに従って注文をクローズすることが容易になります。

2つのEAで2つの異なる戦略を実行し、それぞれを独自のチャートで表示する方が簡単ではないでしょうか?
RaptorUK:
2つのEAで2つの異なる戦略を実行し、それぞれを独自のチャートで表示する方が簡単ではないでしょうか?

そうですね、2、3、4、5...は同意です。でも、この話や、「 150個の ポリシーを 書き 、 それらが 同じグラフ上を 同時に 歩き、 すべての戦略を 一 度に 実行 する 必要が ある。 150のEAを 同時に動かすと、 PCが 爆発 し そう です 。"
1つのEAでもっとたくさんのストラテジーを動かすつもりなんだろうけど...。