貝塞爾曲線,是通過幾個簡單的參數(shù)描述一條曲線的一種參數(shù)曲線。 貝塞爾曲線是由 皮埃爾·貝塞爾 發(fā)明的,目的是輔助做汽車的主體設(shè)計,現(xiàn)如今已經(jīng)被廣泛使用在計算機輔助設(shè)計和計算機圖形學(xué)系統(tǒng)中。 三階貝塞爾曲面參數(shù)方程: 首先打開visual studio 2015 或者更高的版本,復(fù)制粘貼 #include <iostream> #include <cmath> #include <vector> #include <algorithm> void BezierFit(int DataLen, float* pfOUT, in?t* pfINa, float* pfINb) { int controlPointCount = 4; std::vector<float> controlPoints(controlPointCount); int windowSize = (*pfINb); // 計算每個窗口的平均值作為初始控制點位置 for (int i = 0; i < DataLen; i += windowSize) { int windowEnd = (std::min)(i + windowSize, DataLen); float sum = 0.0f; for (int j = i; j < windowEnd; ++j) { sum += pfINa[j]; } float avg = sum / (windowEnd - i); for (int j = 0; j < controlPointCount; ++j) { controlPoints[j] = avg; }
// 使用數(shù)值優(yōu)化方法調(diào)整控制點位置(這里仍然使用簡單的梯度下降法) const int iterationCount = 2000; const float learningRate = 0.01f; for (int iter = 0; iter < iterationCount; ++iter) { std::vector<float> gradient(controlPointCount); for (int j = 0; j < controlPointCount; ++j) { gradient[j] = 0.0f; } for (int j = i; j < windowEnd; ++j) { float t = static_cast<float>(j - i) / (windowEnd - i); float curveValue = (1.0f - t) * (1.0f - t) * (1.0f - t) * controlPoints[0] + 3.0f * t * (1.0f - t) * (1.0f - t) * controlPoints[1] + 3.0f * t * t * (1.0f - t) * controlPoints[2] + t * t * t * controlPoints[3]; float diff = curveValue - pfINa[j]; gradient[0] += (1.0f - t) * (1.0f - t) * (1.0f - t) * diff; gradient[1] += 3.0f * t * (1.0f - t) * (1.0f - t) * diff; gradient[2] += 3.0f * t * t * (1.0f - t) * diff; gradient[3] += t * t * t * diff; } for (int j = 0; j < controlPointCount; ++j) { controlPoints[j] -= learningRate * gradient[j]; } }
// 根據(jù)控制點計算擬合曲線的輸出值 for (int j = i; j < windowEnd; ++j) { float t = static_cast<float>(j - i) / (windowEnd - i); pfOUT[j] = (1.0f - t) * (1.0f - t) * (1.0f - t) * controlPoints[0] + 3.0f * t * (1.0f - t) * (1.0f - t) * controlPoints[1] + 3.0f * t * t * (1.0f - t) * controlPoints[2] + t * t * t * controlPoints[3]; } } }
貝塞爾曲線需要提供幾個點的參數(shù),首先是 曲線的起點和終點。 然后再提供任意數(shù)量的控制點。控制點數(shù)量為 2,則為三階貝塞爾曲線。 如圖所示 之后生成Dll文件 最后,在通達信新建指標(biāo),輸入代碼
展示圖 證畢 更好的自用指標(biāo),期貨自動化交易程序與股票自動化程序在星球 |
|
來自: 常熟老李jlr5mr > 《量化對沖套利》