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

 
Aliaksandr Kryvanos:

こんにちは。

MT5からMT4へのMaxLotCheck()の置き換えのアナログを提案できる人はいますか、ありがとうございます。

機能そのものがないのです。自分で書くしかない。すべてのチェックを入れても10~20行に収まるはずです。

 
Ihor Herasko:

機能そのものがないのです。自分で書くしかない。すべてのチェックを入れても、10~20行に収まるはずです。

なるほど、でも数式そのものは?

 
Aliaksandr Kryvanos:

なるほど、でもここで計算式そのものを?

ソースを見てみよう。

//+------------------------------------------------------------------+
//| Access functions OrderCalcMargin(...).                           |
//| INPUT:  name            - symbol name,                           |
//|         trade_operation - trade operation,                       |
//|         price           - price of the opening position,         |
//|         percent         - percent of available margin [1-100%].   |
//+------------------------------------------------------------------+
double CAccountInfo::MaxLotCheck(const string symbol,const ENUM_ORDER_TYPE trade_operation,
                                 const double price,const double percent) const
  {
   double margin=0.0;
//--- checks
   if(symbol=="" || price<=0.0 || percent<1 || percent>100)
     {
      Print("CAccountInfo::MaxLotCheck invalid parameters");
      return(0.0);
     }
//--- calculate margin requirements for 1 lot
   if(!OrderCalcMargin(trade_operation,symbol,1.0,price,margin) || margin<0.0)
     {
      Print("CAccountInfo::MaxLotCheck margin calculation failed");
      return(0.0);
     }
//---
   if(margin==0.0) // for pending orders
      return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX));
//--- calculate maximum volume
   double volume=NormalizeDouble(FreeMargin()*percent/100.0/margin,2);
//--- normalize and check limits
   double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   if(stepvol>0.0)
      volume=stepvol*MathFloor(volume/stepvol);
//---
   double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(volume<minvol)
      volume=0.0;
//---
   double maxvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   if(volume>maxvol)
      volume=maxvol;
//--- return volume
   return(volume);
  }
ENUM_ORDER_TYPEと OrderCalcMarginはここで置き換える必要があります。
 
Yum)ソース...ありがとうございました。
 

まだ、はっきりしない...。

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

и

double margin;

OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


1ロット開設時の証拠金を異なる数で返す

 
Aliaksandr Kryvanos:

まだ、はっきりしない...。

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

и

double margin;

OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


1ロットオープン時のマージン数を変更する

明らかに違う端末で比較していますね ))上がMT4、下がMT5です。だから、サーバーも違えば、取引条件も違う。一番シンプルなのは、レバレッジの違いです。

実際に手に入れたもの、価値観はどうだったのでしょうか?

 

そうなんです、レバレッジが違うんです、一方は1/300、もう一方は1/2000なんです

しゃい

 

みなさん、こんにちは。

私のEAでは、エントリーポイントを多段階で探します。そのために、まずスタート時点のシグナル履歴をチェックし、その後リアルタイムで動作します。ストラテジーテスターでは、ヒストリーですべて正常に動作するのですが、リアルタイムで実行すると、ヒストリーを正しくスキャンできず、シグナルを逃してしまうのですが、何か問題があるのでしょうか?

多分、明白な答えがあるのでしょうが、コードの断片はここに掲載するにはかなり大きいので、私はまだコードを与えていません。

 
ArturR:

みなさん、こんにちは。

私のEAでは、エントリーポイントを多段階で探します。そのために、まずスタート時点のシグナル履歴をチェックし、その後リアルタイムで動作します。ストラテジーテスターでは、ヒストリーですべて正常に動作するのですが、リアルタイムで実行すると、ヒストリーを正しくスキャンできず、シグナルを逃してしまうのですが、何か問題があるのでしょうか?

多分、明白な答えがあるのでしょうが、コードの断片はここに掲載するにはかなり大きいので、私はまだコードを与えていません。

デバッグは一個一個やってください。履歴のスキャンをスクリプトに分離する。Alert()で詳細情報を出力:まずヒストリーのバー数、開始と終了の日付、...。という流れでスキャンしていきます。全てファイルに書き出す 方が便利かもしれません
 
STARIJ:
デバッグを一歩一歩行ってください。履歴のスキャンをスクリプトに分離する。Alert()を使って詳細な情報を出力します。まず、履歴のバーの数、開始日と終了日、...です。という流れでスキャンしていきます。全てファイルに書き出す 方が便利かもしれません

ありがとうございます、やり方を読んでみます。

もう一つ質問があるのですが、リアルタイムデバッグを実行すると、Metatrader4は常にCHFで実行されるのですが、私が必要とするペアで実行させるために何を調整すればよいか、誰かご存知でしょうか?

テスターでは考慮されていないようですが、他の時間軸の指標値でした。また、正しいペアの作り方もわかりました。 ご参加ありがとうございました )