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

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

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

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

Q&A

解決済

1回答

2160閲覧

通貨ペアを指定したものだけにしたい

nisei2

総合スコア19

MQL4

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

0グッド

0クリップ

投稿2020/12/11 10:14

前提・実現したいこと

サイトからDLした通貨ペアを切り替えるインジになるのですがどの部分をいじったらいいのかがわからなくて困ってます。
全ての通貨ペアが表示されてしまうので自分が必要な通貨ペアだけを表示できるようにしたい。

発生している問題・エラーメッセージ

全ての通貨ペアが表示される

該当のソースコード

MQL4

1#property indicator_separate_window 2#property indicator_buffers 0 3#property strict 4 5extern string UniqueID = "SymbolChanger1"; // Indicator unique ID 6extern int ButtonsInARow = 20; // Buttons in a horizontal row 7extern int XShift = 20; // Horizontal shift 8extern int YShift = 20; // Vertical shift 9extern int XSize = 80; // Width of buttons 10extern int YSize = 21; // Height of buttons 11extern int FSize = 10; // Fort size 12extern color Bcolor = clrGainsboro; // Button color 13extern color Dcolor = clrDarkGray; // Button border color 14extern color Tncolor = clrBlack; // Text color - normal 15extern color Sncolor = clrRed; // Text color - selected 16extern bool Transparent = false; // Transparent buttons? 17 18//----------------------------------------------------------------------------------- 19// 20//----------------------------------------------------------------------------------- 21// 22// 23// 24// 25// 26// 27 28int OnInit() 29{ 30 IndicatorShortName(UniqueID); 31 int xpos=0,ypos=0,maxx=0,maxy=0; 32 for (int i = 0; i<SymbolsTotal(true); i++) 33 { if (i>0 && MathMod(i,ButtonsInARow)==0) { xpos=0; ypos+=YSize+1; } createButton(UniqueID+":symbol:"+string(i),SymbolName(i,true),XShift+xpos,YShift+ypos); xpos +=XSize+1; } 34 xpos = 0; ypos += YSize*2+2; 35 for (int i = 0; i<ArraySize(sTfTable); i++) 36 { if (i>0 && MathMod(i,ButtonsInARow)==0) { xpos=0; ypos+=YSize+1; } createButton(UniqueID+":time:"+string(i),sTfTable[i],XShift+xpos,YShift+ypos); xpos +=XSize+1; } 37 38 // 39 // 40 // 41 // 42 // 43 44 45 setSymbolButtonColor(); 46 setTimeFrameButtonColor(); 47 return(0); 48} 49void OnDeinit(const int reason) 50{ 51 switch(reason) 52 { 53 case REASON_CHARTCHANGE : 54 case REASON_RECOMPILE : 55 case REASON_CLOSE : break; 56 default : 57 { 58 string lookFor = UniqueID+":"; 59 int lookForLength = StringLen(lookFor); 60 for (int i=ObjectsTotal()-1; i>=0; i--) 61 { 62 string objectName = ObjectName(i); if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName); 63 } 64 } 65 } 66} 67 68// 69// 70// 71// 72// 73 74 75void createButton(string name, string caption, int xpos, int ypos) 76{ 77 int window = WindowFind(UniqueID); 78 ObjectCreate(name,OBJ_BUTTON,window,0,0); 79 ObjectSet(name,OBJPROP_CORNER ,CORNER_LEFT_UPPER); 80 ObjectSet(name,OBJPROP_XDISTANCE,xpos); 81 ObjectSet(name,OBJPROP_YDISTANCE,ypos); 82 ObjectSet(name,OBJPROP_XSIZE,XSize); 83 ObjectSet(name,OBJPROP_YSIZE,YSize); 84 ObjectSetText(name,caption,FSize,"Arial",Tncolor); 85 ObjectSet(name,OBJPROP_FONTSIZE,FSize); 86 ObjectSet(name,OBJPROP_BORDER_TYPE,BORDER_FLAT); 87 ObjectSet(name,OBJPROP_COLOR,Tncolor); 88 ObjectSet(name,OBJPROP_BGCOLOR,Bcolor); 89 ObjectSet(name,OBJPROP_BACK,Transparent); 90 ObjectSet(name,OBJPROP_BORDER_COLOR,Dcolor); 91 ObjectSet(name,OBJPROP_STATE,false); 92 ObjectSet(name,OBJPROP_HIDDEN,true); 93} 94 95void setSymbolButtonColor() 96{ 97 string lookFor = UniqueID+":symbol:"; 98 int lookForLength = StringLen(lookFor); 99 for (int i=ObjectsTotal()-1; i>=0; i--) 100 { 101 string objectName = ObjectName(i); 102 if (StringSubstr(objectName,0,lookForLength) == lookFor) 103 { 104 string symbol = ObjectGetString(0,objectName,OBJPROP_TEXT); 105 if (symbol != _Symbol) 106 ObjectSet(objectName,OBJPROP_COLOR,Tncolor); 107 else ObjectSet(objectName,OBJPROP_COLOR,Sncolor); 108 } 109 } 110} 111void setTimeFrameButtonColor() 112{ 113 string lookFor = UniqueID+":time:"; 114 int lookForLength = StringLen(lookFor); 115 for (int i=ObjectsTotal()-1; i>=0; i--) 116 { 117 string objectName = ObjectName(i); 118 if (StringSubstr(objectName,0,lookForLength) == lookFor) 119 { 120 int time = stringToTimeFrame(ObjectGetString(0,objectName,OBJPROP_TEXT)); 121 if (time != _Period) 122 ObjectSet(objectName,OBJPROP_COLOR,Tncolor); 123 else ObjectSet(objectName,OBJPROP_COLOR,Sncolor); 124 } 125 } 126} 127 128// 129// 130// 131// 132// 133// 134 135string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"}; 136int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200}; 137 138string timeFrameToString(int tf) 139{ 140 for (int i=ArraySize(iTfTable)-1; i>=0; i--) 141 if (tf==iTfTable[i]) return(sTfTable[i]); 142 return(""); 143} 144int stringToTimeFrame(string tf) 145{ 146 for (int i=ArraySize(sTfTable)-1; i>=0; i--) 147 if (tf==sTfTable[i]) return(iTfTable[i]); 148 return(0); 149} 150 151// 152// 153// 154// 155// 156 157void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) 158{ 159 if (id==CHARTEVENT_OBJECT_CLICK && ObjectGet(sparam,OBJPROP_TYPE)==OBJ_BUTTON) 160 { 161 if (StringFind(sparam,UniqueID+":symbol:",0)==0) ChartSetSymbolPeriod(0,ObjectGetString(0,sparam,OBJPROP_TEXT),_Period); 162 if (StringFind(sparam,UniqueID+":time:" ,0)==0) ChartSetSymbolPeriod(0,_Symbol,stringToTimeFrame(ObjectGetString(0,sparam,OBJPROP_TEXT))); 163 if (StringFind(sparam,UniqueID+":back:" ,0)==0) ObjectSet(sparam,OBJPROP_STATE,false); 164 } 165} 166 167// 168// 169// 170// 171// 172 173int start() { return(0); }

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

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

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

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

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

guest

回答1

0

ベストアンサー

OnInitSymbolsTotalでループしている部分で通貨ペアのボタンを作成しているのでそこでフィルタすればいいでしょう。

投稿2020/12/11 14:10

mah

総合スコア591

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

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

nisei2

2020/12/11 21:56

フィルタのやり方はわからなかったのですが、気配値の通貨ペアを消したら同じ結果に出来ました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問