[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 229

 
なぜトランザクションが開かないのか、教えてください。コードは意味をなしているように見えますが、どうしても開きません。
 
//+------------------------------------------------------------------+ 
  //| MACD ^^^.mq4 | 
  //| Copyright © 2011, MetaQuotes Software Corp. | 
  //| http://www.metaquotes.net | 
  //+------------------------------------------------------------------+ 
  #property copyright "Copyright © 2011, MetaQuotes Software Corp." 
  #property link "http://www.metaquotes.net" 

  extern int TP = 100; 
  extern int TS = 100; 
  extern int TF = 1; 
  extern double lots = 0.1; 
  int fast_ema = 5; 
  int slow_ema = 34; 
  int signal_period = 5; 
  int slip = 3; 
  int Magic = 1; 

 int total; 
 int ticket; //объявил тотал и тикет 

 //+------------------------------------------------------------------+ 
  //| expert initialization function | 
  //+------------------------------------------------------------------+ 
  int init() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert deinitialization function | 
  //+------------------------------------------------------------------+ 
  int deinit() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert start function | 
  //+------------------------------------------------------------------+ 
  int start() 
    { 
  //---- 
  
 CheckTicket();
 bool signal = signal_MACD(); 
 AnalyzeSignal(signal); 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 

 bool signal_MACD() 
  { 
    bool signal_MACD = false; 
    double tmp = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
    for(int i=1;i<=5;i++) 
    { 
       if(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0)*tmp,4)<0.0) 
       { 
          signal_MACD = true; 
          break; 
       } 
    } 
  } 

 void AnalyzeSignal(bool signal) 
  { 
    double MACD = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0);
    total = OrdersTotal();
    if(total < 0)
    {
      if(signal == true)
      {
         if(MACD > 0)
         {
                ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green); 
                if(ticket>0) 
                { 
                    OrderSelect(ticket,SELECT_BY_TICKET); 
                    Print("открылись на покупку по цене:", OrderOpenPrice()); 
                } 
                else 
                { 
                    Print("открыться не удалось по причине:", GetLastError()); 
                    return(0); 
                } 
         }
         if(MACD < 0)
         {
               ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green); 
               if(ticket>0) 
               { 
                   OrderSelect(ticket,SELECT_BY_TICKET); 
                   Print("открылись на продажу по цене:", OrderOpenPrice()); 
               } 
               else 
               { 
                   Print("открыться не удалось по причине:", GetLastError()); 
                   return(0); 
               } 
         }
         else
            return(0);
      }
    }
  }
  
void CheckTicket()
{
   if(OrderSelect(ticket,SELECT_BY_TICKET))
   {
      if(OrderCloseTime()>0)
      {
         ticket = 0;
      }
   }   
}
 

これは私がまとめられないポイントだ、作るのを手伝ってくれ。

一方向に開いた2つ以上の注文(例:買い)に対して、利益ポイントゼロを定義する必要があります。

で、このポイントにテイクプロフィットを追加して、すべてのオープンな買い注文に割り当てます。

そして、テイクプロフィットはチャート上に表示されるべき、つまり見えるようにすべきです。

例えば、価格1500の時に最初の買い 注文を出します。

1600に2つ目の買い注文を出す。

そのゼロポイントは1550+(テイクプロフィット=20)です。

で、ここでは1つ目と2つ目の注文に1570の利食いが設定されており、価格がこの水準に達すると、両方の注文が決済されることになります。

で、価格がこのレベルを通過(ジャンプ)すれば、それに追従して注文を決済します。

買い注文と売り注文を同時に記録し、互いに干渉しないようにすることが非常に重要です。 買いの場合は利食い、売りの場合は利食いを別々に設定し、一方向に同時に2つ以上の注文を出した場合にのみ、利食いを設定する必要があります。

 
CLAIN:
なぜトランザクションが開かないのか、教えてください。コードは意味をなしているように見えますが、どうしても開きません。
OrdesTotal() が負の値を返すことはないからです。
 
ありがとう、いいこと言うね...。を修正した...が、まだトレードが開かない...。どうしよう
 
CLAIN:
ありがとう、いいこと言うね...。を修正した...が、まだトレードが開かない...。どうしよう


おそらく、signal_MACD()関数を修正する。

まあ、それでも何かお返しはしているだろうということです。

 

こんにちは。

条件が正しく書けているか教えてください。(Fractal_point_up_buy と Fractal_point_down_buy のパラメータは正規化されています)。

よろしくお願いします。

      Fractal_point_up_buy=TF1B;
      Flow_differential_buy=Fractal_point_up_buy-Bid;
      if (timf1s>timf2b && timf2s>timf2b && timf3s>timf2b && timf3s<timf1b)
       {
        Fractal_point_down_buy=TF3S;   
       }
      else
       {
        if (timf1s>timf2b && timf2s>timf2b && timf3s<timf2b && timf2s<timf1b)
         {
          Fractal_point_down_buy=TF2S;   
         }
        else
         {
          if (timf1s>timf2b && timf2s<timf2b && timf3s<timf2b && timf1s<timf1b)
          Fractal_point_down_buy=TF1S; 
         }     
       }
      Fractal_fibo_buy=100*Flow_differential_buy/(Fractal_point_up_buy-Fractal_point_down_buy);
 
belck:

これは私がまとめられないポイントだ、作るのを手伝ってくれ。

一方向に開いた2つ以上の注文(例:買い)に対して、利益ポイントゼロを定義する必要があります。

で、このポイントにテイクプロフィットを追加して、すべてのオープンな買い注文に割り当てます。

そして、テイクプロフィットはチャート上に表示されるべき、つまり見えるようにすべきです。

例えば、価格1500の時に最初の買い注文を出します。

1600に2つ目の買い注文を出す。

そのゼロポイントは1550+(テイクプロフィット=20)です。

で、ここでは1つ目と2つ目の注文に1570の利食いが設定されており、価格がこの水準に達すると、両方の注文が決済されることになります。

で、価格がこのレベルを通過(ジャンプ)すれば、それに追従して注文を決済します。

買い注文と売り注文を同時に記録し、互いに干渉しないようにすることが非常に重要です。 買いの場合は利食い、売りの場合は利食いを別々に設定し、同時に一方向に2つ以上の注文を出した場合にのみ、利食いを設定する必要があります。


1500で開いたポジションの場合、1570で取るのは問題ありませんが(StopLevelを考慮しない場合)、1600で開いたポジションの場合、1570で取るとエラー130が発生します - 間違ったストップです。結局のところ、TakeはBuyの始値より 低くすることはできないのです。これはもうStopLossですね。
2ポジションの場合は損益分岐点が決まっていますが、3-4-5ポジションの場合はどうでしょうか?
まず一方向ポジションの損益計算式を定義し、ロジックを作成する必要があります。
 
nemo811:

こんにちは。

条件が正しく書けているか教えてください。(Fractal_point_up_buy と Fractal_point_down_buy のパラメータは正規化されています)。

よろしくお願いします。

こんにちは。

すべての変数が宣言されていれば、MQL4の構文にエラーは出ないのですが...。

何が問題なのか?

 
,
artmedia70:
1500で開いたポジションの場合、1570で取るのは(StopLevelを考慮しなければ)問題ありませんが、1600で開いたポジションの場合、1570で取ると130エラーが発生します-間違ったストップです。結局のところ、TakeはBuyの始値より低くすることはできないのです。これはもうStopLossですね。2ポジションの場合は損益分岐点が決まっていますが、3-4-5ポジションの場合はどうでしょうか?まず一方向ポジションの Breakeven 式を定義して、それからロジックを考えるべきでしょう。 。



すべては、Take Profitを設定または変更するタイミングに依存します。現在の 価格を基準にしています。