初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 61

 
Renat Akhtyamov:
OnInit()Percent 変数に値が代入されているといいのですが?
Percent 変数はユーザー定義です。OnInit()を削除しました。
 
Michail_David:
私のPercent変数はユーザー定義です。OnInit()落とした。
Lots=0の場合、テスターは何も開きません
 
Renat Akhtyamov:
Lots=0の場合、テスターは何も開きません。
パーセントを基準に計算したものがたくさんあります。テスターではロット数は計算されるが、取引は行われない。

 Margin_Percent=AccountFreeMargin()*Percent/100; 

Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);

      Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));

if(Lots>Lots_Volume)
        {
         Lots=Lots_Volume;
        }
      else if(Lots<Lots_Volume)
         Lots=MathFloor(Lots);
      Print("Количество лотов : ",Lots);
      return;
 
Michail_David:
パーセントを基準に計算したものがたくさんあります。テスターではロット数は計算されますが、取引は行われません。

そしてやはり、コードのどこにset Percentがあるかというと

で、次のコマンドはどうなるのでしょうか?print("Lots : ",Lots); ?

 
Renat Akhtyamov:

それにしても、コードのどこにPercent

で、次のコマンドは何ですかprint("Number of lots : ",Lots); ?

#property link      ""
#property version   "1.00"
#property strict
//--- input parameters
input int      Percent=50;
input int      Fast_EMA_Period=12;
input int      Slow_EMA_Period=25;
input int      Signal_Period=9;
input double   Step_PSAR=0.02;
input double   Maximum_PSAR=0.2;
input int      MAGICNUMBER=413;
static datetime New_Time;// Время текущего бара
double Margin_Percent;  //Используемые средства для открытия ордеров
double Lots;//Определение общего количества лотов
double Lots_Volume;
double MacdCurrent;//Параметры MACD основной линии текущего бара
double MacdPrevious1;//Параметры MACD основной линии предыдущего бара
double MacdPrevious2;//Параметры MACD основной линии со смещением на 2 бара
double StopLoss;//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   bool New_Bar=false;                    // Флаг нового бара
   int ticket,total,cnt;
//---------------------------------------------------------------------------
   New_Time=TimeCurrent();
   if(Time[0]==New_Time) // Сравниваем время
      New_Bar=true;      // Поймался новый бар
   else if(New_Bar==false) // Если бар не новый..
5行目にはPercentを指定する。ログには、「ロット数:90.0100000001」と表示されます。NormalizeDouble() を追加した方がいいのでは?
 
Michail_David:
5行目にはPercentが設定されています。ログには、「ロット数は90.0100000001です」と表示されます。NormalizeDouble()を追加した方がいいのでは?

ロットは何も問題ありません。

注文開始のロジックにエラーがあるかどうかを調べます。

このような場合、私は通常、注文をオープンする明示的な条件を設定します。

 
Renat Akhtyamov:

ロットは何も問題ありません。

注文開始のロジックにエラーがあるかどうかを調べます。

このような場合、私は通常、注文を開始するための明示的な条件を設定します。

条件を明示した例を教えてください。私の理解が正しければ、ループが開く条件は1つであるべきです。これでよいのでしょうか?
 
Michail_David:
条件を明示した例を挙げてください。私の理解が正しければ、ループは開くための条件を1つ持っているはずです。そうだろ?
コードの冒頭、ロット計算の直後に注文を開くコマンドを与え、テスターが正常に動作することを確認する。そうすれば、すべて元に戻せます。
 
Renat Akhtyamov:
コードの最初、ロットを計算した直後に注文を開くコマンドを与え、テスターが正常に動作することを確認する。そして、すべてを元の位置に戻すことができます。
ありがとうございます。間違いを発見しました。ロット計算の結果、返品させていただきました。だからロットは開かなかったんだ
 
Michail_David:
5行目にはPercentを指定する。ログには、「ロット数 90.0100000001」と表示されます。NormalizeDouble()を追加した方がいいのでは?
すべきです。また、ロットだけでなく、サーバーに渡される他のすべての値も同様です。ロットは、アカウント値で許容される最小値と最大値を確認するのにも便利です。また、ステップ変更時に、ロットを0.03単位で変更できるケースがありましたので、90.01では、少なくとも上書きは効かないでしょう。