初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 722

 
Alexey Viktorov:
ええ、まあ...そんなブローカーはどこにあるんだろう...。リンク先を教えてください。
そうなんです。買いが買値で決済される
 
私の不注意をお詫びします。開く」と書いて「ひらく」と読む...。
 

こんにちは。

質問です。

買い保留ができない理由を教えてください。

request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(offset)*point。

offset=1 場合 エラーが出ます

failed buy stop 0.10 AUDNZD.m at1.03748 [Invalid price],i.esmall level price (in my case).

その直後に同じ「執行命令」が出た場合

request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)

はすべて正常に動作する(つまり、注文が行われる)。

1.03747で 0.10の買い注文 [#2 buy 0.10 AUDNZD.m at 1.03747].

保留中の注文1.03748)のリクエストが受け付けられない つまり1.03747では発注されるのに、1.03748では発注されないのはなぜでしょうか?(SYMBOL_ASKは 、スプレッドとオフセットを考慮するので- ポイントで、注文を配置するための現在の価格からのオフセットは、1増加します)。

しかし、オフセット=100では、保留中のBUY_STOP価格=1.03847 - それはすでに動作します。


ありがとうございます。
 
Konstantin_78:

こんにちは。

質問です。

買い保留ができない理由を教えてください。

request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(offset)*point。

offset=1 場合 エラーが出ます

失敗した買いストップ 0.10 AUDNZD.m at1.03748 [無効な価格]、すなわち小さな価格レベル(私の場合)。

の直後に「実行する命令」を設定すると、その命令は実行されます。

request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)

はすべて正常に動作する(つまり、注文が行われる)。

1.03747で 0.10の買い注文 [#2 buy 0.10 AUDNZD.m at 1.03747].

保留中の注文1.03748)のリクエストが受け付けられない、つまり1.03747では注文が出ますが、1.03748では注文が 小さいのはなぜでしょうか?

しかし、offset=100: 保留BUY_STOP価格=1.03847であれば、すでに動作しています。


ありがとうございます。

あなたはすでに自分の質問に答えています。

各シンボルには「ストプレレベル」(現在価格から注文を出すまでの必要最小限の距離)というパラメータがあり、それぞれ独自の値を持ち、取引条件に設定されています。

 
Andrey F. Zelinsky:

Вы же сами и ответили на свой вопрос.

Есть такой параметр stoplevel -- минимально необходимое расстояние от текущей цены до цены установки отложенного ордера -- для каждого инструмента своё значение и задаётся в торговых условиях 

と書くのが妥当だろう。

価格 =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)*point

とはいえ、「...現在の 価格から」と書いても、それがスプレッドとどう関係するのか?SYMBOL_ASKに含まれる(SYMBOL_ASK=建値+スプレッドであるため)。

 
Vladimir Karputov:

例を添付しておきますので、参考にしてください...。

なるほど、お手本が役に立ったのですね。ありがとうございます。


さて、ここで質問です。

ロットを増やすと、ある時点で自由資金が足りなくなり、ロットを増やした状態でオープンする必要があります。

つまり、FreeMarginが許す限り、最大ロットを入力することです。

この条件の書き 方:計算されたロットでポジションを開く のに十分な資金がない場合、関数はポジションを開くための最大可能ロットを返さなければならない。

double LotA()
{
   double Lot=FirstLot;

   if(DoublingCount<=0) return Lot;
   double MaxLot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   double MainLot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
if(Lot<MainLot)Lot=MainLot;
     if(Lot>MaxLot)Lot=MaxLot;
   double lt1=Lot;
   HistorySelect(0,TimeCurrent());
   if(HistoryOrdersTotal()==0)return(Lot);
   double cl=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-1),ORDER_PRICE_OPEN);
   double op=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_PRICE_OPEN);

   long typeor=HistoryOrderGetInteger(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_TYPE);
   if(typeor==ORDER_TYPE_BUY)
     {
      if(op>cl)
        {
         if(ud<DoublingCount)
           {
            lt1=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_VOLUME_INITIAL)*_C_;
            ud++;
           }
         else ud=0;
        }
      else ud=0;
     }
   if(typeor==ORDER_TYPE_SELL)
     {
      if(cl>op)
        {
         if(ud<DoublingCount)
           {
            lt1=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_VOLUME_INITIAL)*_C_;
            ud++;
           }
         else ud=0;
        }
      else ud=0;
     }
   if(lt1>MaxLot)lt1=MaxLot;
   lt1=LotCheck(lt1);
   return(lt1);
  }
//+------------------------------------------------------------------+}
 
Marina Korotkih:

なるほど、お手本が役に立ったのですね。ありがとうございます。


さて、この質問。

ロットを増やすと、ある時点で自由資金が足りなくなり、より大きなロットで開設する必要がある。

つまり、FreeMarginが許す限り、最大ロットを入力することです。

この条件の書き 方:計算されたロットでポジションを開く のに十分な資金がない場合、関数はポジションを開くための最大可能ロットを返す必要があります。

               

double Mgn,Lot=0,BID,ASK;

    BID=SymbolInfoDouble(_Symbol,SYMBOL_BID);
    ASK=SymbolInfoDouble(_Symbol,SYMBOL_ASK);

   if(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1,ASK,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;

   if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
                        

マリーナ、こんなのはどうだ?

売り建玉と買い建玉の2つの計算オプションを適用します。

 
Renat Akhtyamov:

                  if(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1,ASK,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;

                  if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
                        

マリナさん、もしかしてこんな感じ ですか?

いいえ、そんなことはありません。

最大可能ロットを計算するだけでなく、許容最小値についても全体をチェックする必要があります。最小ロットが0.01で、マージンが0.009しか開けられないということもあり得るので、その場合は、決して受け入れられない要求でサーバーを苦しめ、しかし彼らはあなたに対して行動を起こすことができます)。

 
Vitaly Muzichenko:

いいえ、そんなことはありません。

あなただけの最大可能なロットを計算する必要はありませんが、また、最小許容のために全体をチェックし、それは最小ロット0.01、およびマージンはあなたが唯一の0.009を開くことができますが、その後受け入れることはありませんが、あなたにアクションと取ることができるサーバの要求を、拷問ことが起こるかもしれませんので、)。

当然のようにフルコードを書いて、同時に見る......ということでしょうか。

いつもあなたから学び、答えが完成するように見守っています。

私は以前、技術監督として働いていました。心配しないでください、すべてうまくいきますよ!」。

私たちはチームです

 
Marina Korotkih:

なるほど、お手本が役に立ったのですね。ありがとうございます。


さて、この質問。

ロットを増やすと、ある時点で自由資金が足りなくなり、より大きなロットで開設する必要がある。

つまり、FreeMarginが許す限り、最大ロットを入力することです。

この条件の書き 方:計算されたロットでポジションを開く のに十分な資金がない場合、関数はポジションを開くための最大可能ロットを返さなければならない。


スレ主さん乙です(笑)
理由: