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

 
(NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)-Lots*(CountTrades()+1));

ロットの計算式を作ったのですが、どこに間違いがあるのか教えてください。注文に間違いがあるため、開けない。

入金額100$以上、レバレッジ1-100以上の場合にも計算式は有効です。また、レバレッジなしの保証金1000$の場合、FreeMargin/Contract = 0.01となり、取引条件を満たさないため、この値から差し引くことができないため、計算式が機能しないことが判明しました。


一方、FR&Marginではすでにオープンポジションを 考慮しているのに、なぜそれを差し引く必要があるのでしょうか。そうすると、次のようになります。

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)

テストしてきます。

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
geratdc: ロットの計算式を作ったのですが、どこに間違いがあるのか教えてください。注文に間違いがあるため、開けない。
      Лот=NormalizeDouble(0.65*AccountBalance()*AccountLeverage()/          // Использую такую формулу
                             MarketInfo(_Symbol, MODE_LOTSIZE),2);
 
STARIJ:

ご挨拶))0.65とは、どこから来たのか?

レバレッジを考えていたのですが、理論上はすでにレバレッジでバランスが取れているという結論に至りました。それとも私が間違っているのでしょうか?


0.65は35%スリップの予備軍か何かか?ちなみに、このようなロット設定をしてしまうと、ポジションを失ってしまい、それこそ一巻の終わりですからねー。

いいですね!負けを削除したら計算式が動きました、かっこいいです))要するにロットが0.02で、その後3ポジションがドローダウンに入った時に緊急ロットが0.1、つまり5倍と計算されたのですね!?しかし、私の機能では、緊急注文を出すとそれ以上の損失には敏感に反応しますので、問題はないでしょう。

同僚、貴重なご意見ありがとうございます! テストしてきますね。


また、取引状況を確認することにしました。このコードはいかがでしょうか?


// Проверка Баланса
   if(cn==0 && TradeCheck==true && AccountBalance()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE)<SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN))
     {
      Print("Баланс счёта не обеспечивает торговые требования");
      SendMail("EA BJH","Баланс счёта не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
// Проверка Lots
   else if(cn==0 && TradeCheck==true && AccountBalance()/Lots<SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE))
     {
      Print("Lots не обеспечивает торговые требования");
      SendMail("EA BJH","Lots не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
ファイル:
1.gif  10 kb
 
geratdc: 同僚、貴重なご意見ありがとうございます! テストしてきますね。

売り」ではなく「買い」、「買い」ではなく「売り」とひっくり返せば、もっと良くなります

やってみろ、同僚!!!

ロボットは、事実を述べるのではなく、「ボス、金を出せ」と提言しなければならない。もう無駄にしてしまった...

 
STARIJ:

売り」ではなく「買い」、「買い」ではなく「売り」と、逆にすれば

やってみろ、同僚!!!

ロボットは、事実を述べるのではなく、「ボス、お金を足してください」と勧めるべきなのです。もう無駄にしてしまったのか...。


大丈夫、緊急注文を出すための設定が特別に残っていたんです。どんなロットがピックアップされるか見てみないと。

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2);

これはとりあえず置いておきました。バランスで試しましたが、マージン的にはもっと正確になると思うのですが、結果は同じです。テスト結果は後で解析しよう。

 
geratdc: 大丈夫です。

インターネット再開メールに書き込むことはできますか?

 
STARIJ:

こうあるべきなのだろうか。レベル-0.75と+0.75。

1つの変数を使う方が簡単です。最初に0、次に+1 -1 +1 -1


そう、このように。Expert Advisorを起動したときに、レベル間のギャップにある場合、最後にバウンドしたときの値を取るようにするには、どのように記述すればよいでしょうか。

 
AlGuru: でも、EAが起動したときに、レベル間のギャップにいたら、最後に反発したときの値を取るようにするには、どう書けばいいのでしょうか?

撃退ってどういうこと?攻撃してきたのか?ファイトバックはいつ?発売前?発射されたばかりなのに、どうやって反撃するんだ?送信する前に読む - すべてが意味をなしているか?

 
STARIJ:

反撃というのはどういうことですか?攻撃してきたのか?発売前に打ちのめされたのでしょうか?ただ発射するだけでは、どうやって反撃すればいいのでしょうか?送信する前に読む - 意味はあるか?


OK、リバウンドではなく、ラインからのバウンドを演出しました。EAを他のマシン/端末に置いたり、コンピュータがシャットダウンした場合は端末を再起動すれば、EAは価格が目的のレベルに達するのを待つのではなく、直近の価格レベルを計算し、正しい変数値を設定することで直ちに動作を開始します。わかりやすく説明できたでしょうか。

 
AlGuru OK、リバウンドではなく、ラインからのバウンドを演出しました。EAを他のマシンや端末に置いたり、コンピュータがシャットダウンした場合は端末を再起動すれば、価格が目的のレベルに達するのを待つのではなく、価格が最後にどのレベルに達したかを計算し、正しい変数値を設定することでEAが直ちに動作し始めます。わかりやすく説明できたでしょうか。

別のマシンや端末との関係は?あるいはシャットダウン-リスタート。コンピュータの電源を入れるか、Expert Advisorを再起動するかということでしょうか。なぜ跳ね返されなければならないのか、しかし、レベルラインを離れてクロスバックした場合は?そして、もしそれが待たされるなら、それはスイッチを入れるときに一つのチャンスをスキップしているだけです。最初はそれを捨てて、終わったらまた戻ってくればいいんです。そして、その線はどこから来るのか、いつ現れるのか、誰が入れるのか、あるいはEAはどのように計算しているのか。他のパソコンに置いたり、パソコンの電源を切る前に置いたりすると、価格が遠くまで行ってしまうことがあります。Expert Advisor 自身がレベルを計算するのであれば、それはまた別の問題です。今見てください。価格は上値から跳ね返され、1時間にわたってレベルの間をさまよっています。そして、コンピュータの電源を入れ、Expert Advisorを起動させたところです。明らかに、このバウンスに作用した時間を起因としなければならない。1時間が経過し、リバウンドは忘れ去られた。ほら、疑問がたくさん出てきたでしょ!?そして、あなたは明確です。本質がわかっているのだから。しかし、外から見ると闇である。プログラミングの技術とは、多くの質問を投げかけ、答えを見つけ出す能力である。スクリプトを見てみよう。もしかしたら、ここに合理的なポイントがあるかもしれない。

//+-------------------------------------------------------+
//| Проверка                                     PROBA.mq4|
//+-------------------------------------------------------+
#property strict

void OnStart()
{
  bool ДостигнутПервыйУровень=false,
       ДостигнутВторойУровень=false;
  int Переменная1=0, Переменная2=0;
  double Уровень;
  int x;

  Alert("----- Снизу вверх --------");
  for(x=13; x<27; x++)
  {
    Уровень=round(sin(x)*10)/10;

    if(Уровень>0.75)
    {
      Переменная1=1;
      Переменная2=0;
    }

    if(Уровень<-0.75)
    {
      Переменная1=0;
      Переменная2=1;
    }

    Alert("  ", x, "       ", Уровень, "        ", Переменная1, "        ", Переменная2);
  }
  Alert("Номер  Уров  Пер1  Пер2");
}