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

 
Galim_V:

課題は、最小の閉塞を持つバーを見つけることです

for(int x=0; x<=xBars -1; x++)

{

カウンター++。

// Print(Close[x],",",counter)を実行します。

int h = ArrayMinimum(Close[x]);

if(counter > 20) break;

}

コンパイラはCloseで悪態をつく

終値を 別の配列に書いて、ArrauMinimumのひよこの外側で
 
Alekseu Fedotov:
終値を 別の配列に書いて、ArrauMinimumのひよこの外側で
ありがとうございました。
 
Galim_V:

タスクは、最小のクローズを持つバーを見つけることです。

iHighestと iLowestの機能があります(MT5にも搭載されました)。

 
Taras Slobodyanik:

iHighestとiLowestの機能があります(MT5にも搭載されました)。

ありがとうございました。
 
Galim_V:

課題は、最小の閉塞を持つバーを見つけることです

for(int x=0; x<=xBars -1; x++)

{

カウンター++。

// Print(Close[x],",",counter)を実行します。

int h = ArrayMinimum(Close[x]);

if(counter > 20) break;

}

コンパイラはCloseで悪態をつく

MQL4で最小/最大価格を 検索するタスクは、1行で解決します。

double fMinClose = iClose(NULL, 0, iLowest(NULL, 0, MODE_CLOSE, <сколько баров>, <начинать с бара>));
 
Taras Slobodyanik:

できるけど、正確にはタイマーにならない。

ありがとうございます。

ロット単位で計算する方法を教えてください。保証金=1000、ロット=0.1の場合、保証金は2000ロット=0.2になりました。つまり、デポジットが1500や1700の場合、ロットは増えない。

 
PolarSeaman:

ありがとうございます。

ロット単位で計算する方法を教えてください。保証金=1000、ロット=0.1の場合、保証金は2000ロット=0.2になりました。つまり、デポジットが1500や1700であれば、ロットは増えない。

double percentLot = 0.01,
       lot = NormalizeDouble(MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)*percentLot/10)/10, 1);

なんとなく...

 
Konstantin Nikitin:

このように...

いやいや、1100円の入金でロットは0.11になるし、2000円までは増えないようにしないと。設定でステップ=1000を設定するには?

 
こんにちは、あなたは可能であれば、マウスにインデックスの座標を追加することが可能であるかどうかを教えてください、私に電子メールを送ってくださいereminmikola@yandex.ru。
 

プログラマーの皆さん、こんにちは。以下の条件に対して、正しくアプローチするためのヒントを教えてください。

1.Expert Advisorは、設定で指定した同じロットの成行注文を2つ(買いと売り)出します。- 注文は問題なく実行される

次に問題なのは、価格が売り方向と買い方向の両方に動く可能性があることです。nポイント経過した時点で、Expert AdvisorがLIVEでこれら2つの取引の収益性をスキャンし、nポイント後に負の残高を持つ注文をクローズするようにコードをアレンジするにはどうすればよいでしょうか。他に何か方法があれば、アドバイスをお願いします。

コードを渡すと、最初のポイントだけが実行され、TPとSLで2つのトレードが開始されます。

2.指定したポイント数に達したら、マイナス残高で注文を閉じ、同じロットでさらに2つの注文(買い、売り)を出す。

ストップは最初の注文の始値で 設定されます。つまり、トレンドが反転した場合、3つの注文はすべて同時に終了する必要があります。


extern int    _ms = 1000;  
extern double _lots = 0.01;
extern double _TP = 80;
extern double _SL = 35;

int _mn;
double pt;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  { 
   pt = Point;
   if (Digits==3||Digits==5) {pt*=10;} else pt = Point;
   _mn = MagicNumberGenerator(_ms);
   Print("The magic number is ",_mn);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    if (IsNewCandle())
    {
      if (TotalOpenOrders(_mn)==0)
      {
        EnterTrade(OP_BUY);
        EnterTrade(OP_SELL);
      }
    }   
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|   Открытие первых позиций                                        |
//+------------------------------------------------------------------+
void EnterTrade(int type)
{
   double price = 0; double sl = 0; double tp = 0; double lot = _lots;
   
   if      (type == OP_BUY)  price = Ask;
   else if (type == OP_SELL) price = Bid;
   
   int err = 0;
   int ticket = OrderSend(_Symbol, type, lot, price, 30, 0, 0, NULL, _mn, 0, clrGreen);
   if (ticket == -1)
   {
     err = GetLastError();
     Print("Could not place the order due to error ",err," ",ErrorDescription(err));
     if (err == ERR_TRADE_NOT_ALLOWED) Alert("You need to enable you autotrade button");
   }
   else 
   {
     if(!OrderSelect(ticket,SELECT_BY_TICKET))
     {
       err = GetLastError();
       Print("Could not select the order due to error ",err," ",ErrorDescription(err));
     }
     else 
     {
       if (OrderType()==OP_SELL)
       {
         sl = OrderOpenPrice()+(_SL*pt);
         if (_SL==0) sl = 0; 
         tp = OrderOpenPrice()-(_TP*pt);
       }  
       else if (OrderType()==OP_BUY)
       {
         sl = OrderOpenPrice()-(_SL*pt);
         if (_SL==0) sl = 0; 
         tp = OrderOpenPrice()+(_TP*pt);
       }
       if(!OrderModify(ticket, OrderOpenPrice(), sl, tp, 0, clrNONE))
       err = GetLastError();
       Print("Could not modify the order due to error ",err," ",ErrorDescription(err));
     }
   }
}