CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

任意の期間のFXチャートをフーリエ変換して10個の成分として表示するプログラム

2024-12-16 22:20:03 | FX
以下は、前回の「離散データを補間して連続化するインジケータ」に続けて、その生成された「連続データ」からフーリエ変換を行い、10個の周波数成分を三角関数(サイン・コサイン)展開で表示するサンプルコード例です。


ポイント

前回のインジケータをベースにし、補間後のSmoothBufferに対して離散的なフーリエ変換(DFT)を行います。
基本的なDFTを用いて、k=1~10程度の低次のサイン・コサイン成分を求めます。
フーリエ級数展開として、
𝑥[𝑛]𝑎0+𝑘=1〜10[𝑎𝑘cos(2𝜋𝑘𝑛/𝑁)+
𝑏𝑘sin(2𝜋𝑘𝑛/𝑁)]
x[n]≈a0+k=110[akcos(2πkn/N)+
bksin(2πkn/N)]
の形の係数a_k、b_kを計算し、結果をチャート上に表示(Comment)します。



簡易実装のため、滑らかな曲線を生成するインジケータ内部で完結しています。




a_k、b_kの求め方:
𝑎𝑘=2𝑁𝑛=0
𝑁1𝑥[𝑛]cos(2𝜋𝑘𝑛𝑁)
,
𝑏𝑘=2𝑁𝑛=0
𝑁1𝑥[𝑛]sin(2𝜋𝑘𝑛𝑁)
ak=N2
n=0N−1
x[n]cos(N2πkn),bk
=N2
n=0N−1
x[n]sin(N2πkn)
※a_0はk=0の場合で、
𝑎0=1𝑁𝑛=0𝑁1𝑥[𝑛]a 0
=N1
n=0N−1
x[n]

#property copyright "YourCompany"
#property link "http://www.example.com"
#property indicator_separate_window false
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
#property indicator_style1 STYLE_SOLID

extern int InterpolationPoints=5;
extern int NumOfComponents=10; // 表示するフーリエ成分数

double SmoothBuffer[];

//------------------------------------------
int init()
{
IndicatorBuffers(1);
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, SmoothBuffer);

IndicatorShortName("Continuous Curve from M5 + Fourier Components");
return(0);
}

//------------------------------------------
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars < 0) return(-1);

int total_bars = Bars;
string sym = Symbol();
int timeFrame = PERIOD_M5;

int limit = MathMin(1000, total_bars);
ArraySetAsSeries(SmoothBuffer,true);

// M5の終値取得
double closeArray[];
ArraySetAsSeries(closeArray, true);
ArrayResize(closeArray, limit);
for(int i=0; i<limit; i++)
{
closeArray[i] = iClose(sym, timeFrame, i);
}

// 線形補間によるスムースデータ生成
for(int i=0; i<limit*InterpolationPoints; i++)
SmoothBuffer[i] = EMPTY_VALUE;

int outIndex=0;
for(int i=limit-1; i>0; i--)
{
double startVal = closeArray[i];
double endVal = closeArray[i-1];
for(int j=0; j<InterpolationPoints; j++)
{
double t = (double)j/(double)InterpolationPoints;
double val = startVal*(1.0-t) + endVal*t;
SmoothBuffer[outIndex] = val;
outIndex++;
}
}
// 最後の点
SmoothBuffer[outIndex] = closeArray[0];
int N = outIndex+1; // 補間後のデータ数

// DFTによるフーリエ係数算出
// a0, a_k, b_kを計算
// a0 = (1/N)*Σ x[n]
double a0=0.0;
for(int n=0; n<N; n++)
a0 += SmoothBuffer[n];
a0 /= N;

double a[], b[];
ArrayResize(a, NumOfComponents+1);
ArrayResize(b, NumOfComponents+1);

// k=1~NumOfComponentsまで計算
for(int k=1; k<=NumOfComponents; k++)
{
double sum_cos=0.0;
double sum_sin=0.0;
for(int n=0; n<N; n++)
{
double theta = 2.0*MathPi*k*n/(double)N;
sum_cos += SmoothBuffer[n]*MathCos(theta);
sum_sin += SmoothBuffer[n]*MathSin(theta);
}
// a_k, b_kの計算
a[k] = (2.0/(double)N)*sum_cos;
b[k] = (2.0/(double)N)*sum_sin;
}

// 取得したフーリエ成分を表示
// ここではChart上のComment関数を使って表示する
// a0 と a_k, b_kを列挙
string commentStr = "Fourier Components: ";
commentStr += StringFormat("a0 = %.5f ", a0);
for(int k=1; k<=NumOfComponents; k++)
{
commentStr += StringFormat(" k=%d: a%d=%.5f, b%d=%.5f ", k, k, a[k], k, b[k]);
}

Comment(commentStr);

return(0);
}

//------------------------------------------
int deinit()
{
Comment("");
return(0);
}


説明
元データ生成部分:
前回のインジケータと同様に、M5終値データを取得し、InterpolationPointsに応じて線形補間してSmoothBufferに格納。これが「連続的な曲線」に相当します。

フーリエ成分計算:
SmoothBufferに格納されたN点のデータx[n]に対して、DFTを実行し、以下を求めます。




a0 = (1/N)*Σ x[n] (直流成分)
a_k, b_k = 周波数 k のコサイン・サイン係数
計算後、a0、a_k、b_kをComment関数でチャート上に表示します。

拡張・改良:

周波数成分数NumOfComponentsはパラメータで指定。
より大きなデータ数、より高度な平滑化にも対応可能。
FFT(高速フーリエ変換)を実装すればパフォーマンス向上も可能ですが、ここでは簡易的なDFT。
表示結果:
チャート上にはa0をはじめ、a1,b1~a10,b10までの値が表示され、これにより元の波形が10次までのサイン・コサイン成分で近似できることが分かります。

以上のコード例により、前段で生成した「連続データ」をフーリエ変換して、10個の三角関数成分として表示することが可能になります。

※AIで予測とかマヌケな奴等が多いが、好きな時に好きなタイミングで好きなように介入して意図的に相場をいじれるようなものを予測なんかできるわけがない。
フーリエ変換して不当な介入・操作が行われた時期を特定し、相場にその変換が現れる前に検知するしかないのだ。

例えばレンジ相場が続いていたのにいきなり急激なトレンド・大きな変化が発生した場合、その変化が現れる前に不当な介入・操作が必ずあるのだ。
その不当な介入・操作はフーリエ変換して分解した波の成分の中に含まれているのだ。

また逆にトレンドが続いていたのにいきなりレンジ相場になってしまった場合にも同じことが言える。何者かが不当な介入・操作をしたからトレンド相場からいきなりレンジ相場になるのだ。

レンジ⇔トレンドの切り替えの原因となる不当介入・操作の波を検知すべし!


連続的なカーブを描くMQL4プログラム

2024-12-16 21:54:56 | FX
任意の期間の五分足のFXチャートの離散データを連続データ曲線にして表示させるMQL4プログラムを書いて。




【FXチャートのデータ変換】
以下は、MQL4を用いて、任意の期間の5分足(M5)チャート上の離散的な価格データ(例えばClose価格)をもとに、連続的なカーブを表示するカスタムインジケータの一例です。
ここでは、基本的な考え方として、5分足の終値データを取得し、それらをスプライン補間や単純な線形補間でなめらかな曲線に近似したラインを描画します。
以下のコードは一例であり、実行環境や必要に応じて適宜修正ください。

ポイント:

カスタムインジケータとして作成。
期間はチャート上で選択した期間に関係なく、内部でM5のデータを取得して使用。
シンプルな方法として、5分足の終値データから1分ごとの補間を行い、補間結果をバッファに格納し、ライン表示。
より高度な平滑化(スプライン補間)を実装したい場合は、別途補間用関数を定義。ここでは簡易的な線形補間例を示す。
コード例(IndicatorName.mq4)
#property copyright "YourCompany"
#property link "http://www.example.com"
#property indicator_separate_window false // メインチャートに表示
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
#property indicator_style1 STYLE_SOLID

// ---- 入力パラメータ ----
// どれくらい細かく補間するか(1バー=5分なので、その中間点を何点挿入するか)
// 例えば5とすれば、5分間を5等分して1分刻みに近似的なポイントを生成
extern int InterpolationPoints=5;

// ---- バッファ ----
double SmoothBuffer[];

//------------------------------------------
// カスタムインジケータ初期化
int init()
{
IndicatorBuffers(1);
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, SmoothBuffer);

// インジケータ名設定
IndicatorShortName("Continuous Curve from M5 data");
return(0);
}

//------------------------------------------
// スタート時処理(旧OnCalculate的な役割 MQL4)
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars < 0) return(-1);

// 最新バー更新用に全バー再計算を回避するため、必要なら最初から計算
// 今回はシンプルに全部計算
int total_bars = Bars;

// M5データ取得用
// 現在のチャートシンボル・M5から取得
string sym = Symbol();
int timeFrame = PERIOD_M5;

// 必要な過去バー数 (現在表示中のチャートバー数より少なくてもOK)
// 補間を行うので余裕を持った数
int limit = MathMin(1000, total_bars);

// 一旦すべてのバッファをクリア
for(int i=0; i<limit*InterpolationPoints; i++)
SmoothBuffer[i] = EMPTY_VALUE;

// M5バーのクローズ価格を配列に取得
double closeArray[];
if(!SeriesInfoInteger(sym, timeFrame, SERIES_BARS_COUNT, limit)) limit = Bars; // 念のため
ArraySetAsSeries(SmoothBuffer,true);
ArraySetAsSeries(closeArray, true);

// iCloseで取得する場合
ArrayResize(closeArray, limit);
for(int i=0; i<limit; i++)
{
closeArray[i] = iClose(sym, timeFrame, i);
}

// 補間:
// 5分足間をInterpolationPoints分割する場合、たとえばInterpo=5なら
// 1つのM5バーから次のM5バーへの間に、4つの中間点を線形で補間
// バッファには( limit-1 )*InterpolationPoints + 1 個の点が並ぶイメージ
int outIndex=0;
for(int i=limit-1; i>0; i--)
{
double startVal = closeArray[i];
double endVal = closeArray[i-1];
// 1区間(5分)をInterpolationPoints分割
for(int j=0; j<InterpolationPoints; j++)
{
double t = (double)j/(double)InterpolationPoints;
double val = startVal*(1.0-t) + endVal*t; // 線形補間
SmoothBuffer[outIndex] = val;
outIndex++;
}
}

// 最後の終点
SmoothBuffer[outIndex] = closeArray[0];

return(0);
}

//------------------------------------------
int deinit()
{
return(0);
}
説明
概要:
このインジケータは現在のチャート上で表示されますが、データは常にM5足の価格データ(終値)を取得します。そのため、チャートが1時間足だろうが日足だろうが、内部的にはM5の価格データを用いて補間した連続線を描画します。

補間方法:
上記サンプルでは簡易な線形補間を実装しています。例えば、5分足同士の間を指定のInterpolationPoints個に分割し、直線的になめらかな値を生成します。より平滑なカーブを得たい場合は、スプライン補間など高度な数値補間手法を独自実装する必要があります。

表示方法:
DRAW_LINEスタイルでSmoothBuffer内の値をチャート上にラインとして描画します。
InterpolationPointsを増やせば増やすほど、より密なデータ点を生成し、実質的に滑らかなカーブが表示されます。

パフォーマンス等:
例示のコードは特に最適化にはこだわっていません。必要に応じてlimitを調整する、計算部分を軽量化する等の工夫が必要です。また、描画バッファサイズやインジケータ呼び出し頻度についても調整可能です。

上記のサンプルコードをベースとして、より高度な補間、平滑化処理などを加えることで、任意の期間のM5データから連続的なカーブを描画することが可能になります。

FXのチャートは離散データである。任意の期間の離散データを補完して連続データ曲線のチャートをデッチ上げ、フーリエ変換して有限個の三角関数の成分として分解したいのだ。
まずは飛び飛びで歯抜けになっている離散データを連続データとしてデッチ上げるプログラムをChatGPTに書かせてみた。

動くかどうかは知らんけど。


下請法の法の網の目を掻い潜る裏技とは?

2024-12-16 18:53:48 | 日記

多重構造にすることである。




(A)物品の製造・修理委託、情報成果物・役務提供委託
下請法の適用対象は資本金によって決まる。
親会社は資本金3億円以上である場合は下請は資本金3億円以下

親会社が資本金1千万以上で3億円以下である場合、下請は1千万円以下

(B)情報成果物・役務提供委託
親会社は資本金5千万以上の場合、下請は資本金5千万以下

親会社は資本金1千万以上5千万以下の場合、は1千万以下

つまり、資本金が少ない下請同士で取引させれば下請法違反にならない。

元請が上記の資本金に該当する場合、一次請け以下は上記の資本金を満たさない小・零細企業にしておけばよい。一次請けに対してだけ下請法を遵守すれば良い。一次請け以下が上記の資本金を満たさない企業同士であれば、二次請け以下に対してはどのような扱いをしても下請法違反にはならないという裏技が成立する。

俺の働いている会社はいつも二次請け以下として仕事を請け負っている零細企業である。一次請けも上記の資本金を満たさない小企業である。一次請けから赤字になるような仕事ばかりを割り当てられ、報告書の駄目だし・やり直し・支払い遅延・受領拒否などやりたい放題やられていじめられている。

だから俺は社長に、頑張って一次請け以上になりましょう!と言っている。

ドキュモ・ハゲバンク・あうんこ・ファッキューから直接電気通信工事を受注したり、電験三種以上をとって電気設備保安管理の仕事で十分稼いで食っていけるようにすべきだ。

今のままでは、どんなに下請法や独占禁止法の勉強、判例の勉強をしても無駄になってしまう。一次請け以上に対しては抗うことはできない!



外国人技能実習生の社保・厚生年金未加入は違法!

2024-12-16 18:28:43 | 日記

技能実習生の健康保険・雇用保険はどうすればいい?加入手続きなど詳しく解説 | 協同組合ハーモニー|愛知県名古屋市・岐阜・三重で外国人技能実習生の受け入れ

技能実習生の健康保険・雇用保険はどうすればいい?加入手続きなど詳しく解説 | 協同組合ハーモニー|愛知県名古屋市・岐阜・三重で外国人技能実習生の受け入れ

技能実習生を受け入れる場合、健康保険や雇用保険などの各種保険に加入させる義務はあるのかどうか気になる方も多いのではないでしょうか。技能実習生も日本人社員と同じよ...

協同組合ハーモニー|愛知県名古屋市・岐阜・三重で外国人技能実習生の受け入れ

日本人労働者と同様に外国人技能実習生も社保・厚生年金に加入させなければならない。






もちろん最低賃金法も適用されるのだ。

社保・厚生年金は加入させる必要はなく、タダ同然でコキ使い放題だと勘違いしている罪日ブラック企業がいかに多いことか!

家族同士でもETCカード貸し借りすると「違法」になる

2024-12-16 18:16:19 | 日記

ETCカード、貸し借りすると「違法」って本当? “普及率95%”に潜む落とし穴、家族からでもダメなの?(Merkmal)|dメニューニュース

ETCカード、貸し借りすると「違法」って本当? “普及率95%”に潜む落とし穴、家族からでもダメなの?(Merkmal)|dメニューニュース

家族間使用のわな 2024年5月8日、大阪地裁で「電子計算機使用詐欺罪」(刑法246条の2)に関する注目すべき…

ETCカードを家族同士で貸し借りすると「違法」になるとのこと。




去年まで働いていた会社で、自分が使っていた社用車のETCカードを自分の車で使い、現場に向かったら、事務員から不正使用で組合からカードの使用を停止させられると滅茶苦茶怒られたことがある。

その社用車専用に割り当てられたETCカードであり、他の車で使うと違法なるということらしいが、その社用車専用のETCカードが差し込まれた社用車を誰が運転しても構わないと言われた。