どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 740

 
evillive:
ミニロットじゃなくてピッチの話だけど、まあいいや、忘れてくれ。
あ、そうそう、もちろん、自分のために書いているのでなければ、その辺は考慮しなければなりませんね。
 
evillive:

ありがとうございます、すでに説明されています :D

自分としては、すべてのチェックを入れて書くのは当然として、ロットをバランス/10比率に持っていく方法のアウトラインがあっただけで、そのアイデアは失敗だった......というのは明らかです。

でも、文字数が多いんだから、もっとシンプルでいいんじゃない?

  lotstep= MarketInfo(Symbol(),MODE_LOTSTEP);
  lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
  lotmin=MarketInfo(Symbol(), MODE_MINLOT);

lot=lotstep*MathRound(AccountBalance()*0.001/lotstep);
if(lot < lotmin) lot = lotmin;
if(lot > lotmax) lot = lotmax;

もっとシンプルでいいんです。ただ、LotstepのMarketInfo()が0を返した場合はどうなるのでしょうか?どのような結果になるのでしょうか。Expert Advisorが停止し、ポジションが放棄されるのでは?

また、ブローカーによってMINLOTが0.03に、LOTSTEPが0.02に設定されている場合、すなわち、最初の2つの許容ロット値が0.03と0.05で、現在の残高が41の場合、コード内の計算ロットの値はどうなりますか。

なぜ、ロットが最小値より小さい場合、たとえば残高が1に等しい場合、式が完全に計算された後は0に等しくなります。この場合、コードが最小ロットに等しいロットを取るのはなぜですか?これは0.03になり、つまり「生の」値、この場合0.001に等しい "AccountBalance()*0.001" より30倍多くなる可能性があります。

有効なロット値のどれにも該当しないような条件があるため、常に有効なロット値が得られるとは限りません。間違っている状況をすべてプログラム化する必要があり、これが少なくとも仕事の90%であることを忘れてはならない。

MetaQuotesが設定した適用モデルは、lot = MINLOT + N * LOTSTEP(N=0、1、2...)である。M.また、Mは、MINLOT + M * LOTSTEP <= MAXLOTかつMINLOT + (M + 1) * LOTSTEP > MAXLOTとなるものである。従って、設定されたモデル内、すなわち、lot = MINLOT + N * LOTSTEPで計算することも必要です。そうすると、MINLOTとLOTSTEPの厄介な組み合わせはどうでもよくなり、この式は一般的な方法で機能するからです。ちゃんと書いて、ちゃんとデバッグして、他の面白いこと、楽しいことに集中すればいいんです。また、「このコードは動かないけど、不具合はある......」というような、出来の悪いコードに何度も戻ってくる必要がなくなるので、とても楽です。

 
simpleton:

もっとシンプルでいいんです。しかし、MarketInfo()がlotstepに0を返した場合、どうなるのでしょうか?どのような結果になるのでしょうか。Expert Advisorが停止し、ポジションが放棄されるのでは?

ブローカーによってMINLOTの値が0.03に、LOTSTEPの値が0.02に設定されている場合、すなわち、最初の2つのロット値が0.03と0.05で、現在のバランスが41で ある場合、コード内の計算ロットの値は何ですか。

なぜ、ロットが最小値より小さい場合、例えば、残高が1に等しい場合、完全な計算の後、それは0に等しくなるのでしょうか? なぜ、この場合、コードは最小値に等しいロットを取ります。これは、例えば、0.03で、「生の」値 "AccountBalance()*0.001" より30倍多く、この場合、0.001に等しいのでしょうか?

有効なロット値のどれにも該当しないような条件があるため、常に有効なロット値が得られるとは限りません。間違っている状況をすべてプログラム化する必要があり、これが少なくとも仕事の90%であることを忘れてはならない。

MetaQuotesが設定した適用モデルは、lot = MINLOT + N * LOTSTEP(N=0、1、2...)である。M.また、Mは、MINLOT + M * LOTSTEP <= MAXLOTかつMINLOT + (M + 1) * LOTSTEP > MAXLOTとなるものである。従って、設定されたモデル内、すなわち、lot = MINLOT + N * LOTSTEPで計算することも必要です。そうすると、MINLOTとLOTSTEPの厄介な組み合わせはどうでもよくなり、この式は一般的な方法で機能するからです。ちゃんと書いて、ちゃんとデバッグして、他の面白いこと、楽しいことに集中すればいいんです。また、「このコードは動かないけど、不具合はある......」というような、出来の悪いコードに何度も戻ってくる必要がなくなるので、とても楽です。

そんな恐怖のために、このようなロットで開設する資金が十分にあるかどうかのチェックもある。まともな神経の持ち主であれば、たとえば最小ロットが0.1、ステップが0.1であることを知りながら、ロボットに10ポンドを入金させるようなことはしないでしょう。

そして、もしそんな賢い人がいたら、ロボットは「金をくれ、その間にさようなら」と言うでしょう :D.

それにロット段差がゼロになるなんて、どこにも書いてないし見たこともない、ファンタジーだ...。

 
evillive:

そのような恐怖のために、このようなロットで開設する資金が十分にあるかどうかのチェックもある。まともな神経の持ち主なら、例えば最小ロットが0.1、ステップが0.1であることを知りながら、ロボットに10ポンドを入金させることはないでしょう。

そして、もしそんな賢い人がいたら、ロボットは「金を出せ、その間にさよならを言え」と言うのです :D

テスターでMarketInfoからゼロが出ないようにするために、こうしているのです。

  double AFM = AccountFreeMargin(); 
  double StopLevel,FreezeLevel,spr,prot;
  if(IsOptimization() || IsTesting() || IsVisualMode())
  {
    MinLot = 0.1;
    LotStep = 0.01;
    spr = Point*10;
    StopLevel = spr*2;
    FreezeLevel = spr*2;
  }
  else
  {
    MinLot = MarketInfo(Symbol(),MODE_MINLOT);
    LotStep = MarketInfo(Symbol(),MODE_LOTSTEP);
    spr = MarketInfo(Symbol(),MODE_SPREAD)*Point;
    StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
    FreezeLevel = MarketInfo(Symbol(),MODE_FREEZELEVEL)*Point;
  }
  if(MM == 1) 
  lot = MinLot+MathMax(LotStep*MathFloor((AFM-initdepo)*risk/100),0); 
  else if(MM == 0) lot = MinLot;
 
evillive:

そのような恐怖のために、このようなロットで開設する資金が十分にあるかどうかのチェックもある。まともな神経の持ち主なら、例えば最小ロットが0.1、増分が0.1だと知っているロボットに10ポンドを入金させることはないでしょう。

そして、もしそんな賢い人がいたら、ロボットは「金を出せ、さようなら」と言うでしょう :D

それに、ロット段差がゼロというのは見たことも読んだこともない、想像の域を出ない......。

なぜひどいのか?簡略化したモデルに当てはまらないから?

MINLOT = 0.03 と LOTSTEP = 0.02 の場合、最初の2つの許容ロット値は 0.03 と 0.05 という意味です。 つまり、残高が例えば 41 の場合、あなたのコードでは

lot=lotstep*MathRound(AccountBalance()*0.001/lotstep);

ロット値が0.04となり、これは許されない。ロボットは「サーバーが私のロットサイズは間違っていると言っています」などと言うでしょう。

また、MarketInfo()で値を要求する際にエラーが発生した場合、ロットサイズが0になることがある。このエラーを人為的に発生させる方法について、コードをお渡ししました。

Print("MarketInfo(\"Фигня\", MODE_LOTSTEP) = ", MarketInfo("Фигня", MODE_LOTSTEP));

0を返しますが、どんなファンタジーなんでしょうか?

 
simpleton:

なぜホラーなのか?簡略化したモデルに当てはまらないから?

MINLOT = 0.03 と LOTSTEP = 0.02 の場合、最初の2つの許容ロット値は 0.03 と 0.05 という意味です。 つまり、もし残高が例えば 41 であれば、あなたのコードでは

ロット値が0.04となり、これは許されない。ロボットは「サーバーが私のロットサイズは間違っていると言っています」などと言うでしょう。

また、MarketInfo()で値を要求する際にエラーが発生した場合、ロットサイズが0になることがある。このエラーを人為的に誘発する方法を、上記のコードでお伝えしました。

0を返します。では、どんなファンタジーがあるのでしょうか?

lot=lotstep*MathRound(AccountBalance()*0.001/lotstep);

この数式は、要件に合わせて簡単に修正することができます。最低ロットを考慮すればよい

少し違った印象になります

lot=Min_Lot+lotstep*MathRound((AccountBalance()-X)*0.001/lotstep);

ここで、X - 最小ロットの開放のためのバランス。

しかし、最低ロットのチェックはやはり必要でしょう。

 

こんにちは。

無知な者を助けよ )テスターで注文が開けないエラー10013 Wrong requestが発生した場合、エラーが発生したコードを見てください。

ジャーナルのすべての数字が注文に表示され、注文が開きません。

2014.10.19 12:14:34.984 2014.02.03 00:06:00 failed request buy 0.10 at 102.31100 sl: 102.27200 tp: 102.33600 [Invalid request] (リクエストが無効です。

2014.10.19 12:22:17.928 2014.02.03 00:06:00 ticket =0 retcode =10013

MqlTradeRequest Req;
MqlTradeResult  Res;
   string TradeSmb;
   if(TradeSmb=="") TradeSmb=_Symbol;
   Req.action=TRADE_ACTION_DEAL;
   Req.symbol=TradeSmb;
   Req.volume=0.1;
   Req.type=ORDER_TYPE_BUY;
   Req.type_filling=ORDER_FILLING_IOC;
   Req.price = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   Req.sl= NormalizeDouble(sym_bid - (StopLoss*sym_point),sym_digits);
   Req.tp= NormalizeDouble(sym_ask + (TakeProfit*sym_point),sym_digits);
   Req.deviation=3;
   Req.comment="777";
if(OrderSend(Req,Res))
{
      Print("Sent...");
}
      Print("ticket =",Res.order,"   retcode =",Res.retcode);
      if(Res.order!=0)
     {
      datetime tm=TimeCurrent();
      //--- request all history
      HistorySelect(0,tm);
      string comment;
      bool result=HistoryOrderGetString(Res.order,ORDER_COMMENT,comment);
      if(result)
        {
         Print("ticket:",Res.order,"    Comment:",comment);
        }
ドラマーがメッセージを修正しました
 

どこに書いてあるんだ!

if(OrderSend(Req,Res))

ドキュメントをご覧くださいそして、SRCボタンでコードを挿入 してください

面倒な人は、1回目、2回目をご覧ください。

int  OrderSend(
   string   symbol,              // символ
   int      cmd,                 // торговая операция
   double   volume,              // количество лотов
   double   price,               // цена
   int      slippage,            // проскальзывание
   double   stoploss,            // stop loss
   double   takeprofit,          // take profit
   string   comment=NULL,        // комментарий
   int      magic=0,             // идентификатор
   datetime expiration=0,        // срок истечения ордера
   color    arrow_color=clrNONE  // цвет
   );

学ぶことは決して悪いことではないのです

 

親愛なる皆様へ

アドバイスをお願いします...。

以下はその機能です。

オーダープロフィット( )

この関数は、選択された注文の純利益 値を返します。

質問

どちらの関数も、上記の関数と同様に、選択された注文の利益値の代わりに損失 値を返します。

例えば、ある注文が150ドルの損失でSLでクローズした場合、150ドルの損失を 返す関数が必要です。

ありがとうございます。

 
solnce600:

親愛なる皆様へ

アドバイスをお願いします...。

以下はその機能です。

オーダープロフィット( )

この関数は、選択された注文の純利益 値を返します。

質問

どの関数が、上記の関数と同様に、選択された注文の利益ではなく、損失 値を返します。

例えば、ある注文が150ドルの損失でSLでクローズした場合、150ドルの損失を 返す関数が必要です。

ありがとうございます。

同じです!金額だけがマイナスで出てきます。