オープントレードのチェックに問題がある - ページ 5

 
BrotherPyrus:
Hey Daz & Co,

hothandは5桁のMT4では動きますが、4桁のプラットフォームでは動きません。
どのように動作しないのか、もう少し具体的に教えてください。
 
BrotherPyrus:
hothandは5桁のMT4では動作しますが、4桁のプラットフォームでは動作しません。この原因は何でしょうか、また、修正するための手がかりはありますか?
EAは、4/5桁、TP、SL、およびスリッページを調整する必要があります。ECNブローカーでは、最初にオープンし、次にストップを設定する必要があります。
//++++ These are adjusted for 5 digit brokers.
int     pips2points;    // slippage  3 pips    3=points    30=points
double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)
int     init(){
    if (Digits == 5 || Digits == 3){    // Adjust for five (5) digit brokers.
                pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
    } else {    pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
 
   if(iBarHour >= iOpenHour && iBarHour <= iOpenHour + iBarsToTrade && Tradeopen()==false) // Check if time is ok to trade & no trade is open
                  {

                          
                              //  if(High[2]>High[1] && Low[2]<Low[1]) // see if we have an inside bar
                                if(iHigh(hothand(), 60, 2)>iHigh(hothand(), 60, 1) && iLow(hothand(), 60, 2) < iLow(hothand(), 60, 1)) // see if we have an inside bar
                                 {                                                                                                     // on the hothand pair
                                           
                                        // IB found 
                                        if(iHigh(hothand(), 60, 1) > dDayOpenPrice) // IB high on hothand pair is greater than day open price bullish signal
                                          {
                                             int    buyspread=MarketInfo(hothand(),MODE_SPREAD);
                              double buyentry =  iHigh(hothand(), 60, 1) + 10 + buyspread;  //Low of prev bar + 1 pip + spread
                              double buystop = iLow(hothand(), 60, 1) - 10;    //Low of prev bar - 1 pip
                              double buytpx1 = iHigh(hothand(), 60, 1)+(iHigh(hothand(), 60, 1)-iLow(hothand(), 60, 1)); //1:1 r:r
                              double buytpx3 = iHigh(hothand(), 60, 1)+(iHigh(hothand(), 60, 1)-iLow(hothand(), 60, 1))*3; // 1:3 r:r
                              
                              
                           OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx1, "DIBSBUY", Mnumber1);  //Open buy order
                           OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx3, "DIBSBUY", Mnumber3);
                            }
                            
                         if(iLow(hothand(), 60, 1) < dDayOpenPrice) // IB low on hothand pair is lower than day open price bearish signal
                            {
                              int    sellspread=MarketInfo(hothand(),MODE_SPREAD);
                              double sellentry = iLow(hothand(), 60, 1)-10; //Low of prev bar - 1 pip 
                              double sellstop = iHigh(hothand(), 60, 1)+ 10 + sellspread; // High of prev bar + 1 pip + Spread
                              double selltpx1 = iLow(hothand(), 60, 1)-(iHigh(hothand(), 60, 1)- iLow(hothand(), 60, 1)); //1:1 r:r
                              double selltpx3 = iLow(hothand(), 60, 1)-(iHigh(hothand(), 60, 1)- iLow(hothand(), 60, 1))*3; // 1:3 r:r
                              
                              
                           OrderSend(Symbol(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order
                           OrderSend(Symbol(),OP_SELL,1 , Ask, 3, sellstop, selltpx3,"DIBSSELL",Mnumber3);  //Open Sell Order
               
                                      } 
                        }
                               
                   }
     //  
  
    
      }

さて、私は戻ってきました。


これはトレードを実行するコードの部分ですが、今のところ5桁で動作させるつもりです。このアイデアは、その日の取引に最適なペアを選ぶためにhothand関数を使用することです。このコードでは、1時間足チャートのインサイド・バーをスキャンする必要があります。(hothand関数はペアの文字列を返します)インサイドバーを見つけたら、テスト目的でフラットアウトの売買取引を開始するようにしました。バックテスターが 1つのチャートから複数のペアの取引を扱えるのかどうか、よくわかりません。私はそれが使用するすべてのペアの1分間の履歴をダウンロードしました。しかし、それは私がそれを添付したチャートであるeurusd上で取引を開くように見えるだけです。

WHRoederさん、またまたお立ち寄りいただきありがとうございます。それで、EAでトレードを開くには、開いた後に戻ってSLとTPを記入するのが正しい方法なのでしょうか?そのコードで間違っていることを100万個見つけられると確信しています。

 
  1. OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx1, "DIBSBUY", Mnumber1);  //Open buy order
    

    4/5桁のスリッページを調整しない。ECNに対応していない

    常にリターンコードをテストすることで、なぜ動作しないのかがわかります。

    int ticket = OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx1, "DIBSBUY", Mnumber1);  //Open buy order
    if (ticket < 0) Alert("OrderSend [1] failed: ",GetLastError());

  2. buystop = iLow(hothand()...
    あなたのストップはhothand()というペアに基づいていますが、あなたはSymbol()で注文を開始しています。もしそれらが同じでないなら、ストップは完全にインチキです。
 
dazamate:

さて、私は戻ってきました。


これはトレードを実行するコードの部分ですが、今のところ5桁で動作させるつもりです。このアイデアは、その日の取引に最適なペアを選ぶためにhothand関数を使用することです。このコードでは、1時間足チャートのインサイド・バーをスキャンする必要があります。(hothand関数はペアの文字列を返します)インサイドバーを見つけたら、テスト目的でフラットアウトの売買取引を開始するようにしました。バックテスターが1つのチャートから複数のペアの取引を扱えるのかどうか、よくわかりません。私はそれが使用するすべてのペアの1分間の履歴をダウンロードしました。しかし、それは私が添付したチャートであるeurusd上で取引を開くように見えるだけです。


一般的なコメント:

アスクで 買い、ビッドで 売る。

ブローカーがECNタイプの場合、注文時にSLとTPを設定できない(この場合は0に設定)ので、注文を出してからSLとTPを追加するために注文を修正しなければならない。

常に注文の結果を確認 し、エラーが返ってこないかどうかをチェックし、それに応じて対処する必要があります。

このEAを複数のチャートで使う場合、つまり、複数のチャートから注文を出す場合、Order Context Busyを避けるために、ある種のMutexが必要になります(WHRoederの投稿をチェックしてください、彼は優れたMutexを持っています)。

 
Damm WHRoederさん、「私たちのストップはペアのhothand()に基づいていますが、あなたはSymbol()で注文を出していますね」そのことに気づきませんでした。なんてバカなんだ。このようなことは、それを学ぼうとしている間、精神的に疲れるだけです。でも、そうなんです、バカなんです。その混乱の上に行くためにありがとうございます。多分、一休みして、明日、頭を切り替えて戻ってくるよ。君が指摘してくれたことを直しておくよ。
 
dazamate:

しかし、それは私がそれを添付したチャートであるeurusdで取引を開くように見えるだけです。

うん、.. .

OrderSend(Symbol(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order

Symbol()はEA/Indicatorが接続されているペアですが、これを代わりにするつもりだったのでしょうか?

OrderSend(hothand(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order
 

はい、そうするつもりでしたが、今はこのようなエラーが発生します。


http://clip2net.com/s/144hq


hothand関数の ペア出力を認識していないようです。hothand関数の出力は文字列なので、何がうまくいかないのかわかりません。

 
dazamate:
hothand関数のペア出力を認識していないような。hothand関数の出力は文字列なので、何がうまくいかないのかわかりません。
OrderSend(hothand(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order
  1. Ask/Bidは現在のSymbol()の価格ですが、別のペアを開こうとしています。インチキ価格です。
  2. 他のTF/ペアのバー・ ゼロ値をテスターから取得できない。
  3. テスターで他のペアの取引を開くことができない、IRC
  4. OrderSend関数のシンボル名USDCHFが不明です。
    その文字列はどこで手に入れるのですか?現在のチャートが同じパターンなのか、USD,EUR、またはUSD/EUR、またはUSDEURm、またはUSDEURfxfなどです。
  5. 現在のペアを取引することだけをお勧めします。hothand()が現在のものでない場合は、取引はできません。そうすれば、テスターで動作し、常に他のペアにEAを置くことができますので、どのペアを取引するかを制御することができ、すべての落とし穴を避けることができるのです。
 

こんにちは、皆さん。私は以下のようなコードを作ろうとしています。


extern string  sComment4                = "Max Hours allowed before pending orders are deleted";
extern int     pendinglimit        = 4;

// * EVERYTIME A TRADE GETS TRIGGERED 

bartraded = TimeHour(TimeCurrent());


// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN 

   if(TimeHour(TimeCurrent()) > bartraded + pendinglimit && Tradeopen()==true) // Check to see if pending orders have expired
     {
        for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
           OrderType()==(OP_BUYSTOP||OP_SELLSTOP) &&     // The order selected is either a pending buy on stop order or a buy on sell order
            OrderMagicNumber()==(Mnumber1||Mnumber3))    // The orders magic number is the same as the magic number used in this ea
          
               {
                OrderSelect(tnumber, SELECT_BY_POS);     // Select order
                OrderDelete(tnumber);                    // Delete it
               }
        }
     }

もし、保留中の注文が x個のバーの間開いていたら、バー数がxを超えたらそれを削除する。


何か私のロジックで間違っている可能性があります多分?