MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 716

 
Alex Pirate:
皆さん、こんにちは。(????) それは値を返し、私はそれを確認する必要があります...どのように? EAは私が合うように注文を開きます...。(((
extern string MMM          = "MMM";
extern double Lot          = 0.1;
extern int    TakeProfit   = 50;
extern int    StopLoss     = 20;
extern int    Slippage     = 3;
extern int    Magic        = 888;
// Moving Average 1
extern string Indi_MA1        = "MA1";
extern int    MA1_Period   = 22;
extern int    MA1_Shift    = 0;
extern int    MA1_Method   = 0;
extern int    MA1_Price    = 0;
// Moving Average 2
extern string Indi_MA2        = "MA2";
extern int    MA2_Period   = 55;
extern int    MA2_Shift    = 0;
extern int    MA2_Method   = 0;
extern int    MA2_Price    = 0;
//+------------------------------------------------------------------+
double MA1,MA2,SL,TP;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
    if (Digits == 3 || Digits == 5)
    {
      TakeProfit = TakeProfit * 10;
      StopLoss = StopLoss     * 10;
      Slippage = Slippage     * 10;
    }
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
 return(0);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() 
 {           
    MA1 = iMA(Symbol(),0,MA1_Period,MA1_Shift,MA1_Method,MA1_Price,0);
    MA2 = iMA(Symbol(),0,MA2_Period,MA2_Shift,MA2_Method,MA2_Price,0);
    
    if (Ask >= MA1 && MA1 >= MA2 && CountBuy() == 0)
    {
       SL = NormalizeDouble(Ask - StopLoss   * Point,Digits);
       TP = NormalizeDouble(Ask + TakeProfit * Point,Digits);
       ticket = OrderSend(Symbol(),OP_BUY ,Lot,Ask,Slippage,0,0,"",Magic,0,Green);
       if (ticket > 0)
       { 
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
            if( !OrderModify(ticket,OrderOpenPrice(),SL,TP,0) )  return;

       }      
        
    if (Bid <= MA1 && MA1 <= MA2 && CountSell() == 0) 
    
       SL = NormalizeDouble(Bid + StopLoss   * Point, Digits);
       TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
       ticket = OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"",Magic,0,Red);
       if (ticket > 0)
       { 
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
            if( !OrderModify(ticket,OrderOpenPrice(),SL,TP,0) ) return;

       }                
    }
 }
//+------------------------------------------------------------------+
int CountBuy()
{
   int count = 0; 
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
   {
      if( !OrderSelect(trade,SELECT_BY_POS, MODE_TRADES) ) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic)
      {
        if (OrderType() == OP_BUY)
        count++; 
      } 
   }
   return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
   int count = 0;
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
   {
      if( !OrderSelect(trade,SELECT_BY_POS, MODE_TRADES) ) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic) 
      {
        if (OrderType() == OP_SELL)
        count++; 
      }
   }
   return(count);
}
//+------------------------------------------------------------------+
 
Konstantin Nikitin:

ありがとうございます!!!試してみます。

 
エラーがなくなった...でも、なぜか全ての注文が開いてアップグレードされない...どうにかして改造を確認する必要があるみたい? どこかで失敗したのかな...。
 
Alex Pirate:
エラーがなくなった...でも、なぜかすべての注文が開いてアップグレードされるわけではない...どうにかして修正チェックをしないといけないような? どこかで失敗したのかな...。

コードを間違えたわけではありません。よくわからない・・・ということで、専門家であるあなたにお任せします。

 
Konstantin Nikitin:

コードがうまくいかなかったんです。つまり、あなたの専門家、あなたのカードはあなたの手の中にあるのです。

了解です、とりあえずありがとうございました。

 
Maxim Kuznetsov:

は、端末のグローバル変数を介して行うことができます。ただし、インジケーターのソースコードをお持ちで、編集が可能な場合に限ります。

これは、インジケータがexternを通してではなく、GlobalVariableGet()の呼び出しから パラメータを計算することを意味します。そして、それに応じてExpert AdvisorはGlobalVariableSetを通じてこの変数を変更します。

ありがとう、マキシム。少なくとも、どこから手をつければいいかわかったよ。
 
親クラスの仮想メソッドを呼び出すには?
 
ジグザグのインジケーターで、極限の価格値を表示するものがあります。極限から未来(翌日)に向かってトレンドラインを 引く必要がありますが、2点目の座標と1点目の時間値がわからない状態で、どのようにすればいいでしょうか?
 
Vladimir Pastushak:
親クラスの仮想メソッドを呼び出すには?

仮想メソッドは記述だけで、本体は各クラスに別々に書くから仮想メソッドなのです

しかし、単に親クラスからメソッドを呼び出すだけなら (つまり、メソッドがすでにボディを持っているなら)、 そのメソッドは継承によって通常のメソッドとして利用できるようになります - ソースコード参照

 
Igor Makanu:

仮想メソッドは記述だけで、本体は各クラスに別々に書くから仮想メソッドなのです

しかし、単に親クラスからメソッドを呼び出すだけなら(つまり、そのメソッドはすでにボディを持っている)、それ(そのメソッド)は継承によって通常のメソッドとして利用できます。

ありがとうございます。親クラスのメソッドを呼び出すことができない。

私の記憶では、parent :: メソッドを通じて行われます。