
【モデレーターの秘訣】フォーラムでコードについて討議される場合、コード(Alt+S)の機能をご活用ください。
- 2025.03.18
- Sky All
- www.mql5.com
皆様 お世話になっております。 フォーラムでコードについて討議されたい場合、そのまま貼り付けると、ロボに勝手に削除される場合がございます。 できれる限り、コード(Alt+S)の機能をご活用いただければ幸甚です...
正しくはないけど表示もデバッグもできます。何か勘違いしていませんか?
ありがとうございます、
表示してます、、、
でも、挙動が怪しすぎる、、
すいません、どうすれば治りますか、、
AIまかせで修正してるので、なにがなんだかわからない、、
どなたかご教示お願いいたします、、
ALT+Sとはどうすればいいのでしょうか?直接貼り付けるのはよくないのは理解いたしました。申し訳ございません。
どうすればいいのでしょうか、、なにもわかってないので、、
本来の処理は、
SnakeFirstCalc
SnakeNextCalc
SnakeFirstCalc
LWMA
の順になるはずですが、最初のSnakeFirstCalcだけでその後の処理が脱落しています。
SnakeNextCalcは関数は追加されていますが一度も呼び出されていません。
変数のTempBufferも使われていません。
変換元はSnake.mq4だと思いますので、それと比較してください。
コードの投稿は編集画面でツールバーの をクリックするか、またはキーボードのALT+Sでコードの編集画面が開きます。
行間の無駄なスペースは削除してください。
この種の質問は、ここではなく「テクニカル指標」https://www.mql5.com/ja/forum/indicators に投稿してください。

「SNAKER.mq5」で検索すればForex Factoryからほぼ完成品のファイルがDLできます。
最後のLWMAの部分がmq4のままなので正しく表示できません。
この部分をmq5の形式に修正すれば使えると思います。
ありがとうございます、
修正していますが、まだうまく表示しません、、一本垂直にラインインジがたっているという状態です、、テクニカル指標というところに引っ越ししてみます。引き続きよろしくお願いします、、

取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
主題の通りです。どすすれば解決できるでしょうか、教えていただけると幸いです。
以下にコードを張り付けておきます。よろしくお願いします。
//+------------------------------------------------------------------+
//| Snake_alfa.mq5 |
//| Copyright 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrWhite
//パラメーター
input int Snake_HalfCycle = 7; // Snake_HalfCycle
input int InpBars = 1000; // Custom_Bars
//バッファ
double Snake_Buffer[];
double TempBuffer[];
//変数
double Snake_Sum, Snake_Weight, Snake_Sum_Minus, Snake_Sum_Plus;
int Snake_FullCycle;
int cnt = 0, cnt_lim = 8;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int draw_begin;
int OnInit()
{
// バッファの設定
SetIndexBuffer(0, Snake_Buffer, INDICATOR_DATA);
SetIndexBuffer(1, TempBuffer, INDICATOR_CALCULATIONS);
// バッファ初期化
ArrayInitialize(Snake_Buffer, EMPTY_VALUE);
ArrayInitialize(TempBuffer, EMPTY_VALUE);
// その他の設定
Snake_FullCycle = Snake_HalfCycle * 2 + 1;
draw_begin = Snake_FullCycle + 1;
PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, draw_begin);
PlotIndexSetInteger(0, PLOT_LINE_STYLE, STYLE_SOLID);
PlotIndexSetInteger(0, PLOT_LINE_WIDTH, 2);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[])
{
int FirstPos, ExtCountedBars = 0;
if(rates_total <= Snake_HalfCycle) return(0);
ExtCountedBars = prev_calculated;
if (ExtCountedBars < 0) return(-1);
if (ExtCountedBars > 0) ExtCountedBars--;
FirstPos = rates_total - ExtCountedBars - 1;
if(FirstPos > rates_total - Snake_HalfCycle - 1)
{
FirstPos = rates_total - Snake_HalfCycle - 1;
}
// Snake計算関数を呼び出し
Snake(FirstPos, rates_total, close, high, low);
// 表示削除処理の修正
for(int i = 0; i < rates_total - InpBars; i++)
{
Snake_Buffer[i] = EMPTY_VALUE;
}
return(rates_total);
}
//+------------------------------------------------------------------+
//| Snake 計算ロジック |
//+------------------------------------------------------------------+
void Snake(int Pos, int rates_total, const double &close_array[], const double &high_array[], const double &low_array[])
{
// グローバル変数のリセット
Snake_Sum = 0;
Snake_Weight = 0;
Snake_Sum_Minus = 0;
Snake_Sum_Plus = 0;
if(Pos <= Snake_HalfCycle + 1)
{
Pos = Snake_HalfCycle + 2;
}
for(int i = Pos; i >= 0; i--)
{
// リセット
Snake_Sum = 0;
Snake_Weight = 0;
Snake_Sum_Minus = 0;
Snake_Sum_Plus = 0;
Snake_Buffer[i] = SnakeFirstCalc(i, close_array, high_array, low_array);
}
}
//+------------------------------------------------------------------+
//| Snake価格取得 |
//+------------------------------------------------------------------+
double SnakePrice(int Shift, const double &close_array[], const double &high_array[], const double &low_array[])
{
return ((2 * close_array[Shift] + high_array[Shift] + low_array[Shift]) / 4);
}
//+------------------------------------------------------------------+
//| Snakeの最初の計算 |
//+------------------------------------------------------------------+
double SnakeFirstCalc(int Shift, const double &close_array[], const double &high_array[], const double &low_array[])
{
int i, j, w;
if(Shift < Snake_HalfCycle)
{
i = 0;
w = Shift + Snake_HalfCycle;
while(w >= Shift)
{
i++;
Snake_Sum += i * SnakePrice(w, close_array, high_array, low_array);
Snake_Weight += i;
w--;
}
while(w >= 0)
{
i--;
Snake_Sum += i * SnakePrice(w, close_array, high_array, low_array);
Snake_Weight += i;
w--;
}
}
else
{
for(j = Shift - Snake_HalfCycle, i = Shift + Snake_HalfCycle, w = 1; w <= Snake_HalfCycle; j++, i--, w++)
{
Snake_Sum += w * (SnakePrice(i, close_array, high_array, low_array) + SnakePrice(j, close_array, high_array, low_array));
Snake_Weight += 2 * w;
Snake_Sum_Minus += SnakePrice(i, close_array, high_array, low_array);
Snake_Sum_Plus += SnakePrice(j, close_array, high_array, low_array);
}
Snake_Sum += (Snake_HalfCycle + 1) * SnakePrice(Shift, close_array, high_array, low_array);
Snake_Weight += Snake_HalfCycle + 1;
Snake_Sum_Minus += SnakePrice(Shift, close_array, high_array, low_array);
}
return Snake_Sum / Snake_Weight;
}
//+------------------------------------------------------------------+
//| Snakeの次の計算 |
//+------------------------------------------------------------------+
double SnakeNextCalc(int Shift, const double &close_array[], const double &high_array[], const double &low_array[])
{
Snake_Sum_Plus += SnakePrice(Shift - Snake_HalfCycle, close_array, high_array, low_array);
Snake_Sum = Snake_Sum - Snake_Sum_Minus + Snake_Sum_Plus;
Snake_Sum_Minus -= SnakePrice(Shift + Snake_HalfCycle + 1, close_array, high_array, low_array) - SnakePrice(Shift, close_array, high_array, low_array);
Snake_Sum_Plus -= SnakePrice(Shift, close_array, high_array, low_array);
return Snake_Sum / Snake_Weight; //修正、Weightで割る。
}