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でもっとたくさんのストラテジーを動かすつもりなんだろうけど...。