MetaTrader5のチャート上で動くインジケータをChatGPTで作成
作成方法
MetaTraderの最低限の知識しかない私がChatGPTでMetaTraderのチャート上で「日本時間・欧州時間・米国時間」によって背景色を切り替えるインジケータを作ってみました。分からない事もすべてChatGPTに根気よく質問します。
指定したプロンプト
- EAのプログラミングできますか?
- 日本時間・欧州時間・米国時間で背景を変える事出来ますか?
- MQL5でお願いします。
- 背景の透過度(半透明表示)とテキストラベル(「東京」「ロンドン」などの表示)
最終的に出来たコード
#property indicator_chart_window
#property indicator_plots 0
#property strict
// 色と透明度設定
input color TokyoColor = clrYellow;
input int TokyoAlpha = 40;
input color LondonColor = clrDodgerBlue;
input int LondonAlpha = 40;
input color NewYorkColor = clrLimeGreen;
input int NewYorkAlpha = 40;
input bool ShowLabels = true;
// セッション時刻(UTCベース)
datetime sessionTimes[][2];
int OnInit()
{
EventSetTimer(10); // 10秒ごとに更新
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason)
{
EventKillTimer();
ClearObjects();
}
void OnTimer()
{
ClearObjects();
DrawSessions();
}
void ClearObjects()
{
int total = ObjectsTotal(0);
for (int i = total - 1; i >= 0; i--)
{
string name = ObjectName(0, i);
if (StringFind(name, "SESSION_") == 0)
ObjectDelete(0, name);
}
}
void DrawSessions()
{
int bars = iBars(_Symbol, _Period);
if (bars < 1)
return;
datetime t0;
if (!SeriesInfoInteger(_Symbol, _Period, SERIES_FIRSTDATE, t0))
return;
MqlRates rates[];
int copied = CopyRates(_Symbol, _Period, t0, TimeCurrent(), rates);
if (copied <= 0)
return;
for (int i = 0; i < copied; i++)
{
datetime barTime = rates[i].time;
MqlDateTime dt;
TimeToStruct(barTime, dt);
dt.hour = 0;
dt.min = 0;
dt.sec = 0;
datetime dayStart = StructToTime(dt);
DrawSession(dayStart, 0, TokyoColor, TokyoAlpha, "Tokyo", 0, 6);
DrawSession(dayStart, 1, LondonColor, LondonAlpha, "London", 8, 16);
DrawSession(dayStart, 2, NewYorkColor, NewYorkAlpha, "NY", 13, 21);
}
}
void DrawSession(datetime base, int id, color baseColor, int alpha, string label, int startHourUTC, int endHourUTC)
{
datetime t1 = base + startHourUTC * 3600;
datetime t2 = base + endHourUTC * 3600;
double top = iHigh(_Symbol, _Period, iHighest(_Symbol, _Period, MODE_HIGH, 100, 0));
double bottom = iLow(_Symbol, _Period, iLowest(_Symbol, _Period, MODE_LOW, 100, 0));
string name = "SESSION_" + label + "_" + TimeToString(base, TIME_DATE);
if (!ObjectCreate(0, name, OBJ_RECTANGLE, 0, t1, top, t2, bottom))
return;
ObjectSetInteger(0, name, OBJPROP_COLOR, ColorToARGB(baseColor, alpha));
ObjectSetInteger(0, name, OBJPROP_STYLE, STYLE_SOLID);
ObjectSetInteger(0, name, OBJPROP_WIDTH, 1);
ObjectSetInteger(0, name, OBJPROP_BACK, true);
if (ShowLabels)
{
string textName = name + "_label";
ObjectCreate(0, textName, OBJ_TEXT, 0, t1 + 1800, top);
ObjectSetInteger(0, textName, OBJPROP_COLOR, baseColor);
ObjectSetInteger(0, textName, OBJPROP_FONTSIZE, 10);
ObjectSetString(0, textName, OBJPROP_TEXT, label);
}
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
return rates_total;
}
出来上がり画面
修正もChatGPTまかせ
コードにはコンパイル時にいくつかエラーがありましたのでその状況をChatGPTへ丸投げ・・・
ChatGPTは一つ一つ問題を解決していきます。途中何度もやめよかと諦めかけますが根気よく続けます。
で、エラーが無くなってようやく動くかな?と思ったら表示されず強制表示テスト版を試してと支持がありコンパイルするとエラー・・・
爆発寸前!グッとこらえてプロンプトすると、
「ありがとうございます、それで完全に原因が特定できました!」
ChatGPT・・・俺を試したな!!!
色々説明が表示されるのですが、なんかChatGPTの学習をお手伝いしているように感じます。でもMQLをかじった程度の知識しかない私でも実装まで1時間かかりませんでした。これは便利と受け入れるのか脅威ととらえるべきか受け取り方次第ですね!
まだ時間がずれているけど無料版の制限でAIが変わるとメッセージが表示されたのでなんかお気に入りのキャバ嬢が違う指名客へ行ったような気になりここまでにします。