[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 825

 
eugggy:
一般論としては理解できるのですが、if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))break;もし、そんな注文が選ばれなかったら中止とかどういうことなのでしょうか。


OrderSelect (https://docs.mql4.com/ru/trading/OrderSelect 参照) は、この関数が失敗すると FALSE を返す。ブレークオペレーターについては、https://docs.mql4.com/ru/basis/operators/break を参照してください。

これを簡略化すると

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

順番を決めるのがポイントです。

 
eugggy:


そして、私にはまったく違うものに見えるのです。あなたのコードにこれを挿入してください if(Tip==OP_BUYSTOP||Tip==OP_SELLSTOP&&Minute()<59&&Minute()>57) OrderDelete(Ticket);

また、その場合、どの部分ですか?


あなたのコードを見ずに、私は代わりにそれを仮定することができます(それはすべてあなたのアルゴリズムに依存します)。

if(OrderType()==OP_BUYSTOP) OrderDelete(OrderTicket());
if(OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket());
if(OrderType()==OP_BUYLIMIT) OrderDelete(OrderTicket());
if(OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());

変数に順番をつけ、条件の括弧を || や && に修正するだけです。

Minute()<59&&Minute()>57の 条件は、Minute()==58に 減らすか、>= または<=を 使用することができます。

設定時に期間終了時または特定の時刻に保留注文を強制終了するには、expiration dateパラメータを指定します -https://docs.mql4.com/ru/trading/OrderSend を参照してください。この場合、終了時のプログラミングに悩まされることはありません。そして、接続できないことに対する訂正もなく、無条件で注文を終了します。

 
eugggy:

ああ、便利なものがたくさんあるね。フリーペーパーはなくてもよかったのですが、とても複雑に書かれた教科書です。
ほら...今、話題になっている」のは、このことなんです :)

フリーダム、野郎ども! Yo!Comon evry body!!!

SCの教科書があのように書かれていたら6点以上なんでしょうね。

オフトピで申し訳ないのですが・・・。

 
eugggy:

いいえ、代わりに必要なのではなく、加えて必要なのです。 チャートを見てみると、価格がハイ・ローチャネルから抜けずに、保留中の注文が残っていることがあります。もし、High-Lowチャネルから出なければ、そのままです。 必要なことは、新しいものが現れる前に、保留中のものを閉じることだけです。1986年の本については、本気で言ってるのか?私自身は古代人ですが、やりすぎだと思います。


さらに、同様のコードを追加で書く必要があります。なんとなくですが、あなたのコードはごちゃごちゃしているような気がします。

1986年の本については、冗談ではありません。繰り返しになりますが、プログラミングの基礎を学ぶのであれば、現代言語の構成要素に頭を悩ませることなく学ぶことが必要です。基本的なことは必要です。高校用のコンピュータサイエンスの教科書、特に最初のものは、「頭の悪い人」向けに整然と構成されています。現代の教科書は、誰が、どのように、誰のために、何のために書いているのかは、別の話である

 

日付 時間 ロット 価格

26 2010.01.05 12:24 売り 12 0.10 1.44026 1.44907 1.43526 0.00 3200.09
28 2010.01.05 13:21 買い 13 0.26 1.44326 1.43445 1.44826 0.00 3200.09
30 2010.01.05 15:34 売り 14 0.43 1.440 26 1.44026 1.44026 0.00 3200.0944026 1.44907 1.43526 0.00 3200.09
32 2010.01.05 16:27 買い 15 0.72 1.44326 1.43445 1.44826 0.00 3200.09
34 2010.01.05 17:18 売り16 1.19 1.44026 1.44907 1.43526 0.00 3200.09

ここでは、対応する方向に5つの未決済注文があります。

すべての未決済注文の合計証拠金を計算する方法は?

ペア:EURUSD、契約100,000、レバレッジ100。

 
ikatsko:

日付 時間 ロット 価格

26 2010.01.05 12:24 sell 12 0.10 1.44026 1.44907 1.43526 0.00 3200.09
28 2010.01.05 13:21購入 13 0.26 1.44326 1.43445 1.44826 0.00 3200.09
30 2010.01.05 15:34 sell 14 0.43 1.44026 1.44907 1.43526 0.00 3200.09
32 2010.01.05 16:27買い15 0.72 1.44326 1.43445 1.44826 0.00 3200.09
34 2010.01.05 17:18 sell 16 1.19 1.44026 1.44907 1.43526 0.00 3200.09

ここでは、それぞれの方向で5つのオープン・オーダーを紹介します。

すべての未決済注文の合計証拠金はどのように計算するのですか?

ペア:EUROLLAR、契約100000、レバレッジ100。

MarketInfo(Symbol(),MODE_MARGINREQUIRED);

買い注文で1ロット建てるのに必要な自由資金を返します。よく、あなたのニーズに応じて、他のものを見てください。

こちらもご参考にしてください。

double AccountFreeMarginCheck(string symbol,int cmd,double volume)

FUNCTIONS関数は、現在の口座で指定されたポジションを現在の価格で建てた後、残りの自由資金を返します。十分な資金がない場合、エラー 134(ERR_NOT_ENOUGH_MONEY)が発生する。
 
しかし、私はこれらのポジションが開く前にマージンを計算したいのです!迅速な回答ありがとうございます。戦略は雪崩式ですが、それぞれのポジションがオープンした後、ストップアウトがあるかどうかを知りたいのですが?今後発売されるすべてのロットの敷地面積は事前に把握されています。知りたいのは、(事前に分かっている増量分の)注文をいくつまで開けることができるかということです。
 
ikatsko:
迅速な回答ありがとうございます。しかし、これらのポジションが開く前に証拠金を計算したいのですストラテジーは雪崩式ですが、対応するポジションが開かれた後、ストップアウトがあるかどうか知りたいのですが?今後発売されるすべてのロットの敷地面積は事前に把握されています。知りたいこと:(あらかじめ増加ロットがわかっている)注文はいくつまで開けることができますか? 。
// ==========================================================================
// ------------ Функция рассчёта величины лота для открытия позиции ---------
// Если лот превышает возможный для открытия позы, то он корректируется 
// ==========================================================================

double CorrectLots(double lt)
{
   double ltcorr;
   double pnt =      MarketInfo(Symbol(),MODE_POINT);
   double mspr =     MarketInfo(Symbol(),MODE_SPREAD);
   double dig =      MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot =   MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot =   MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot =   MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot =   MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig);    // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                       // Зададим начальное значением ltcorr равным значению lt
   
   if (lt>MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<MinLot) ltcorr=MinLot;   // ... значений лота
   
   double Money=ltcorr*OneLot+mspr*pnt;    // Вычисляем стоимость открываемой позы

   if (Money<TradeMrg)              // Если свободных средств больше, чем цена позиции - 
      {
         return(ltcorr);                                                            // ... возвращаем неизменённый лот
      }
   else if (Money>=TradeMrg)        // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);               // ... рассчитаем допустимый лот
         double MoneyCorr=ltcorr*OneLot+mspr*pnt;                      
         Print("Func CorrectLots: лот ",lt," скорректирован до ",ltcorr,
               " Стоимость позы до корректировки = ",Money,
               " Стоимость позы после корректировки = ",MoneyCorr
               ); 
         return(ltcorr);                                                         // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   if (lt>MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<MinLot) ltcorr=MinLot;   // ... значений лота
   return(ltcorr);                            // Возврат изначального лота в непредусмотренных случаях с сообщением
}

自分で調べてみてください...。:)

そして、また。

double AccountFreeMarginCheck(string symbol,int cmd, double volume)

この関数はネイキッドマーチンゲールも使うカスタムEAで使ってみました。
どのポジションも開く前に一行書いておかないと安定しないのです。

double lt;                           // Лот
// --------------------------------- +

lt=CorrectLots(lt*2);                // Умножаем лот на 2 с проверкой и коррекцией под допустимый размер лота

// ------- Открытие позы ----------- +
 
アーテム マージンを自分で計算する必要がある、つまり計算式を知る必要があるんだ。今の可能性について、端末の回答はいらない。計算式は知っているのですが、ポジションが重なっている場合のマージン計算について何かあるのでしょうか!しかも、オーバーラップするポジションが何なのかもわからない!?具体的には、連続するポジションが前と反対方向に開いていくのがわかるような例を挙げました。オープンポジションの 証拠金を全ロットの合計で計算すると(その金額を計算式に貼り付けると)、Stop Outを適用したときのDCの実際の反応と一致しないのです。DCの計算方法で計算したいのですが
 
ikatsko:
Artem、私は自分でマージンを計算する必要がある、つまり計算式を知る必要があるんだ。今の可能性について、端末の回答はいらない。計算式はわかるのですが、ポジションが重なっている場合の証拠金計算のクセのようなものがあるのです!!!! しかも、オーバーラップするポジションが何なのかもわからない!? 具体的には、連続するポジションが前と反対方向に 開いていくのがわかるような例を挙げました。オープンポジションの証拠金を全ロットの合計で計算すると(その金額を計算式に貼り付けると)、Stop Outを適用したときのDCの実際の反応と一致しないのです。DCの計算方法で計算したいのですが

オーバーラップポジションとロックポジションはイコールではないのでしょうか? これは、同じ数量で反対方向の2つの建玉を維持するために必要な証拠金です。通常、2つのロックポジションのうちの1つと同じ数量のオープンポジションを維持するために必要なマージンの半分です。

すぐに気づきましたが、まさか混乱するとは...。

同じEAで、私はこの方法でマージンを計算しました、私は今知らない、多分それは間違っているのですか?:

// ======================================================================
// -------------------------- Рассчёт свободной маржи -------------------
// ======================================================================
bool LastFreeMargin(string sy, int op, double lot)
{
   if (sy=="0" || sy=="") sy=Symbol();
   double FreeEqu  = AccountFreeMargin();                         // Вся маржа
   double FreeEqu4 = NormalizeDouble(Equ_Start/4.0, 2);           // Делим маржу на 4 (Средства для торговли)
   double CheckEqu = AccountFreeMarginCheck(sy, op, lot);         // Остаток всех средств после открытия позы 
   double EquTrade = FreeEqu-CheckEqu;                            // Средства, требуемые для открытия следующей
   
   if (FreeEqu4-EquTrade>0) return(true);
   else return(false);
}   

DCから返ってくるのは、これだけです。

モードマージニット 29 1ロットあたりの必要証拠金
モードマージンメンテナンス 30 1ロットあたりの未決済ポジションを支える必要証拠金の額
モードマージンヘッジ 31 オーバーラップしたポジションにかかるマージン(1ロットあたり
モードマージン必須 32 1ロットの買い付けを行うために必要な資金量