質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

Q&A

解決済

1回答

1990閲覧

enumで少数は使えるのか?

nisei2

総合スコア19

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

0グッド

0クリップ

投稿2020/11/29 12:25

よくパラメーター入力の所がドロップリストみたいになっているものがあります。
同じような感じに作ろうと思いenumというのがあることを知りました。
extrunの複数版のような感じだと思っており下記のようにしてみました。

enum SP{
EU = 0.3,//EUR/USD
UJ = 0.3 //USD/JPY
};

このようにしてみたところ「'=' - constant expression is not integral」となりうまくいきません。
よくあるドロップリストみたいにするにはどうすればいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

enumは整数にする必要があります。
https://www.mql5.com/ja/docs/basis/types/integer/enumeration

MQL

1enum SP { 2 EU, 3 UJ 4}; 5 6input SP InpSp; 7 8double getSpread() 9{ 10 switch (InpSp) { 11 case EU: return 0.3; 12 case UJ: return 0.2; 13 default: return 0.0; 14 } 15 16 return 0.0; 17}

ちなみに、enumの後にコメントを書くとリストで選択させることができます。
https://www.mql5.com/ja/docs/basis/variables/inputvariables

投稿2020/11/29 13:18

編集2020/11/29 20:59
mah

総合スコア591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nisei2

2020/11/29 15:01

そうだったのですか。 では選択した変数の中を少数にしたい場合どうすればいいのでしょうか?
mah

2020/11/29 20:54

回答を追加しました。
nisei2

2020/11/30 09:33

ありがとうございます!これを参考にインジケーターを作ってみます。
nisei2

2020/12/01 12:28

教えていただいたのを参考にしてみたのですが「 function call missing, open parenthesis expected」 とエラーがでてしましました。 関数は関数名()のようにし括弧をつけています。 関数はOnCalculateの外に記述しています。
mah

2020/12/01 12:50

全体のソースとエラーメッセージの場所がないとわかりませんが、中括弧の対応がとれてないとかではないですか?
nisei2

2020/12/01 13:05 編集

消しておきます
nisei2

2020/12/01 13:05 編集

消しておきます
mah

2020/12/01 12:59 編集

2回めのgetSpreadに()がないですよ。
nisei2

2020/12/01 13:04

本当にごめんなさい。 まったく気づきませんでした。
nisei2

2020/12/01 14:16

引き続きすいません。 /*-------------------------//通貨ペアのスプレッドのドロップリスト-------------------------*/ enum Spread_Selection { EUR_USD, //EUR/USD USD_JPY, //USD/JPY AUD_USD, //AUD/USD USD_CHF, //USD/CHF EUR_JPY, //EUR/JPY AUD_JPY, //AUD/JPY USD_CAD, //USD/CAD GBP_JPY, //GBP/JPY NZD_USD, //NZD/USD NZD_JPY, //NZD/JPY GBP_USD, //GBP/USD XAU_USD //XAU/USD }; input Spread_Selection Inpspread_selection; //スプレッド判定 double getSpread(){ switch(Inpspread_selection){ case EUR_USD: return 0.3; case USD_JPY: return 0.3; case AUD_USD: return 0.3; case USD_CHF: return 0.3; case EUR_JPY: return 0.5; case AUD_JPY: return 0.6; case USD_CAD: return 0.8; case GBP_JPY: return 1.0; case NZD_USD: return 1.1; case NZD_JPY: return 1.2; case GBP_USD: return 1.3; case XAU_USD: return 2.1; default: return 0.0; } return 0.0; }
nisei2

2020/12/01 14:17

/*-------------------------//スプレッド-------------------------*/ ObjectCreate("spread",OBJ_LABEL,0,0,0); ObjectSet("spread",OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSet("spread",OBJPROP_XDISTANCE,X); ObjectSet("spread",OBJPROP_YDISTANCE,Y+150); ObjectSetText("spread","スプレッド:"+Spread,font_size,"MS ゴシック",clrYellow); if(getSpread() == ChartSymbol(0) && getSpread() < Spread) ObjectSetText("spread","スプレッド:"+Spread,font_size,"MS ゴシック",clrRed);
nisei2

2020/12/01 14:18

見にくくてすいません。このようなコードを書いたのですがスプレッドの色が指定範囲を超えても変わりません。 自分ではどこがおかしいのかわからずもしよろしければおかしい場所のヒント等おしえてもらえないでしょうか?
mah

2020/12/01 14:29

getSpread()とChartSymbol(0)を比較しているからです。
nisei2

2020/12/01 14:35

getSpread()のドロップリストから選んだ通貨ペアとChartSymbol(0)による開いている通貨ぺアを比較したのですがこれがダメなんですね
nisei2

2020/12/01 14:36

まだgetSpread()の使い方がよくわかってなかったのが原因ですね
nisei2

2020/12/01 14:47

考えてみたのですがこれだと0.3と通貨ペアの比較みたいになってしまうのですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問