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

 
Vitalie Postolache:

いつからピリオドはDouble型 になったんだ?

さすがにstring+intは間違いだろう

しかし、上に書いたような方法でやれば、エラーは出ません。

 
Renat Akhtyamov:

それは、「string+intはエラーになる」ということです。

しかし、上に書いたような方法でやれば、エラーは出ません。


IntegerToString?いや、聞いてない;)
 
Vitalie Postolache:

IntegerToString?いや、聞いてない;)
どちらの方法でも問題なく動作します。
 

ハロー

プログラミングは初めてですが、勉強しようと思っています)

インジケーターの読み通りに注文を終了させるのに少し問題があります。

インジケーターの読みに従ってポジションを建て、インジケーターの読みに従ってポジションを閉じるが、ストップも利益もない反対方向である。

if(r > 50 && p > m)//買い注文を 開始するための条件

{

ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //買いの注文を出す。

}

注文の終了条件は正しく書けていますか?

if(r < 50 && p < m) --- これは売りの条件であり、クローズの条件である。

{

OrderClose(ticketB,0.1,Bid,5,Red)。

}

初期化されていない変数 'ticketB' の使用と 'OrderClose' の戻り値の可能性をチェック する必要があることを表示する。

皆さん、どこをどう書き間違えたか教えてください。



 
funnyrain8:

ハロー

プログラミングは初めてですが、勉強しようと思っています)

インジケーターの読み通りに注文を終了させるのに少し問題があります。

インジケーターの読みに従ってポジションを建て、インジケーターの読みに従ってポジションを閉じるが、ストップも利益もない反対方向であること。

if(r > 50 && p > m)//買い注文を 開始するための条件

{

ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //買いの注文を出す。

}

注文の終了条件は正しく書けていますか?

if(r < 50 && p < m) --- これは売りの条件であり、クローズの条件である。

{

OrderClose(ticketB,0.1,Bid,5,Red)。

}

初期化されていない変数 'ticketB' の使用と 'OrderClose' の戻り値の可能性をチェック する必要があることを表示する。

皆さん、どこをどう書き間違えたか教えてください。



変数ticketBは初期化されていない、つまりその型がわからない。この場合、Int

2つ目のエラーは、オーダーをクローズした結果にエラーがないかを確認することです。フォーラムで「エラー処理機能」を検索

 
Renat Akhtyamov:

変数ticketBが初期化されていない、つまり型がわからない場合。この場合、Intです。

2つ目のエラーは、オーダークローズの結果にエラーがないかを確認することです。フォーラムで「エラー処理機能」を検索

ロジックがよくわからないというか、呆れてしまうのですが)、どうすればいいのでしょうか? 最初、OrderSelectを使ってやってみたのですが、間違っていました)

情報が欲しい

 
funnyrain8:

GetLastError なのでしょうか? ロジックが理解できないのか、ちょっと頭が悪いのか)でも、どうやって設定するのでしょうか? 最初はOrderSelectで全部やろうとしましたが、違うんですね)。

情報が欲しい

はい。

コードベースに目を通す - 豊富な実装例がある

 
こんにちは、私は信号の販売者 です、私は人々がそれらを購読するようにあなたの信号を促進することができますどのように知っていただきたいと思います?
 
Vitalie Postolache:


論理はどこにあるのか?最初の注文で最大許容ロットを設定し、それ以降の注文でそれを増やしていくのです。これって、大げさに言えば、あまり常識的ではないと思いませんか?

さらに、ループ内の最初の注文のロットを、全く理解できない方法で減少させますが、その前に「計算」された他の注文のロットは変化せず、これらの値はこの関数の限界を超えることはありません。じゃあ、どうするんだ?

インクリメントループは実数ではだめで、カウンタ、整数でなければならないことは言うまでもない。しかし、ロット値をカウンタとして設定し、反復するたびにそこから1ずつ減算していくのです。これは大きな間違いであり、非常に重大なことです。

まず頭の中でロジックを明確にしてから、コードに実装してみてください。

乗算後の最終ロットを決定するために取り出されない値は、オープン可能な最大ロットであるべきです。実際には、EAが小さな間隔で注文をオープンするので、これらのロットの注文はオープンしないかもしれませんが、確率はそこにあるので、私は最大限の初期ロットを計算したい理由なのです。皆さんのアドバイスを聞いて、このような形になりました。この機能についてどう思われますか?何かを見落としたか、間違って処方したのか、テスターが少しハングアップし、小さな出力ロットを取得します。
//Функция расчета торгового лота
double GetLots()
{
 double lots = 0.0;
 double L9 = MarketInfo(Symbol(),MODE_MAXLOT);
 double L8 = L9 / Multipler;
 double L7 = L8 / Multipler;
 double L6 = L7 / Multipler;
 double L5 = L6 / Multipler;
 double L4 = L5 / Multipler;
 double L3 = L4 / Multipler;
 double L2 = L3 / Multipler;
 double cl = L2 / Multipler;
 double balance = AccountFreeMarginCheck(Symbol(),OP_BUY,L9);
 
 if(balance <= AccountFreeMargin())
 {
  for(int risk = 100;balance > 0 && risk > 0;risk--)
  {
   if(!IsStopped())
   {
    if(risk >= 1)
    {
     lots = (cl/100)*risk;
    }
    if(risk < 1)
    {
     for(int risk2 = 100;balance > 0 && risk2 >= 1;risk2--)
     {
      lots = (cl/100)*(risk2*0.01);
     }
    }
   }
  }
 }
 double clots = NormalizeDouble(MathMax(lots,MarketInfo(Symbol(),MODE_MINLOT)),2);
 return(clots);
}
 
Arseniy Barudkin:

それについてどう思いますか?


私も同じことを言います。論理が苦手なんですね。利用可能な資金とリスクの値(確か3%くらいと書いてあった)から、初期ロットを即座に計算するのは何か問題があるのでしょうか?なぜ、すべてを一カ所で行う必要があるのでしょうか?

自由証拠金の値を取り、リスクを掛け、100で割って1ロットの証拠金の値 - ここでは、自由証拠金の割合を指定してロットを計算する最も簡単な公式を紹介します。また、ロット変更のステップを考慮し、証券会社が許容する最小/最大ロットサイズを超えないようにする必要があります。

input double risk = 3; //процент свободной маржи для расчёта лота
double GetLots()
{
  double margin = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
  double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP);
  double rsk = MathMin(100.0,risk);
  double lotmax = MarketInfo(Symbol(), MODE_MAXLOT);
  double lotmin = MarketInfo(Symbol(), MODE_MINLOT);

  double clots = NormalizeDouble(lotstep*MathRound(AccountFreeMargin()*rsk/100/margin/lotstep),2);
  if(clots < lotmin) clots = lotmin;
  if(clots > lotmax) clots = lotmax;

return(clots);
}