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

 

a < b && ( c > d1 || c >d2 || c > d3) というコードの省略構成は正しいか?

書かないようにするためです。(a < b && c > d1) || (a < b && c > d2) 等を何度も繰り返す。

 
HeAic:

a < b && ( c > d1 || c >d2 || c > d3) というコードの省略構成は正しいか?

書かないようにするためです。(a < b && c > d1) || (a < b && c > d2) といった具合に何度も繰り返されます。

もちろん、うまくいきますよ。このような大きな構図を書くときは、優先順位の括弧を明示的に指定することくらいでしょう。

(a < b)  && ( c > d1 || c >d2 || c > d3)

MT4/5コンパイラの場合、既存の優先順位では式の結果を別の方法で計算することができないため、指定されたブラケットを使用せずに行うことができます。しかし、この括弧には2つの利点がある。

  1. 優先順位を問うことなく、視覚的に理解しやすい表現になっています(コンパイラごとの優先順位を覚えてはいけません)。
  2. もしコードが別のコンパイラに移され、そのコンパイラの優先順位が異なっても、コードは現在のコンパイラと同じように動作します。
 
Alexey Viktorov:

ありがとうございます、もし

S_sk= SymbolInfoInteger("EURUSD",SYMBOL_SELECT);

マーケットウォッチにシンボルがないのですが、どうすれば追加できますか?

 
lil_lil:

ありがとうございます、もし

マーケットウォッチにシンボルがないのですが、どうすれば追加できますか?

シンボルセレクト(SymbolSelect)

全てはヘルプに書いてあります。関数名にカーソルを合わせてF1

 
Artyom Trishkin:

シンボルセレクト(SymbolSelect)

全てはヘルプの中にある。関数名にカーソルを合わせてF1

ありがとうございます。

 

その理由は何でしょうか。MT5で指値注文を設定するスクリプトを書きました。ターミナルでチャートに送ると、result.retcodeが10009(注文が実行された)を返すが、注文は設定されていない。

 
iv1986:

その理由は何でしょうか。MT5で指値注文を設定するスクリプトを書きました。ターミナルでチャートに送ると、result.retcodeが10009(注文が実行された)を返すが、注文は設定されていない。

  1. コード
  2. ログです。
  3. ステイトメント
どこにあるんだろう?

 
Ihor Herasko:

  1. コード
  2. ログブック
  3. ステートメント
どこにあるんだろう?

{MqlTradeRequest request={0};
MqlTradeResult result={0};
double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
double p=NormalizeDouble(ChartPriceOnDropped(),digits);
if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
{p=MathRound(ChartPriceOnDropped()*0.1)/0.1;
}
int V=75;
if (p<Ask)
{
request.action =TRADE_ACTION_PENDING; // 取引操作の種類
request.symbol =Symbol(); // シンボル
request.volume =MathFloor(AccountInfo Double(ACCOUNT_BALANCE)/V/((Ask-p)/))
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)) を参照してください。
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))。
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
}
request.type =ORDER_TYPE_BUY_LIMIT; // 注文の種類
request.price =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // 開始する価格
request.deviation=50; // 価格からの許容偏差値
request.sl =p; // ストップロス・ポジション
request.tp =NormalizeDouble(Ask+(Ask-p)*3,digits); // 利益確定の位置
request.type_filling=ORDER_FILLING_IOC;
request.type_time=ORDER_TIME_DAY。
request.stoplimit=Ask;
OrderSend(request,result)を実行します。
}
if (p>Bid)
{
request.action =TRADE_ACTION_PENDING; // 取引操作の種類
request.symbol =Symbol(); // シンボル
request.volume =MathFloor(AccountInfo Double(ACCOUNT_BALANCE)/V/((p-Bid)/))
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)) を参照してください。
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))。
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
}// ボリューム
request.type =ORDER_TYPE_SELL_LIMIT; // 注文の種類
request.price =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // オープンするときの価格
request.deviation=50; // 価格からの許容偏差値
request.sl =p; // ストップロス・ポジション
request.tp =NormalizeDouble(Bid-(p-Bid)*3,digits); // テイクプロフィットの位置
request.type_time=ORDER_TIME_DAY。
request.type_filling=ORDER_FILLING_IOC;
request.stoplimit=Bid;
OrderSend(request,result)を実行します。

}

ログによると: 2018.05.14 10:12:38.187 トレード '992940': 売り指値 3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 placed for execution.

 
iv1986:

ログによると: 2018.05.14 10:12:38.187 トレード '992940': 売り指値 3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 placed for execution.

これは一般的なログに書かれています。そして、「エキスパート」のログには何が書かれているのでしょうか?しかも、1行だけでなく、ログ全体が。鍵穴から見えるものは、あまりありません。

その上、引用されたコードにリターンコードのチェックがない。そのため、何を根拠にエラーコードに関する結論が出ているのかが不明です。

何かをアドバイスするためには、(自分が見たものを)明確に再現できる手順が必要ですが、ここにはそれがありません。コードの問題部分を切り取り、自分で実行して、何が失敗しているのかを正確に示してください。

P.S.コードを挿入 するには、「</>」アイコンまたはAlt+Sを使用してください。

 

コードの最後には、Alert(result.retcode)もあります。

を一般ログで表示します。

2018.05.14 12:08:16.984 スクリプト スクリプト LIMIT (Si-6.18,M15) の読み込みに成功しました。

2018.05.14 12:08:17.187 トレード '992940': Buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905.

2018.05.14 12:08:17.484 Trades '992940': accepted buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905.

2018.05.14 12:08:17.500 トレード '992940': Buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905 placed for execution.

2018.05.14 12:08:17.546 Trades '992940': order #13235300 buy limit 3.00 / 3.00 Si-6.18 at 62091 done in 337.532 ms

2018.05.14 12:08:17.578 スクリプト スクリプト LIMIT (Si-6.18,M15) を削除しました。


エキスパート欄: 2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) アラート:10009、他は何もなし。