信頼性の低い取引のアイデアを見てください. この記事では,このアイデアと,この脚本を実行しようとします.
K線面積戦略は,価格のK線と平均線との間の面積関係に基づいた取引戦略である.その主な考え方は,価格傾向の幅と変化と,買い物情勢の転換を分析することによって,株式市場の価格の潜在的な動向を予測し,そのために取引開始と終了のタイミングを決定することである.この戦略は,K線と平均線との間の面積,およびKDJ指標の数値に依存し,多頭および空頭取引信号を生成する.
K線面積は,価格のK線と均線との間の空間面積を指し,各バーの閉じる価格を均線値から減算し,それから求和を計算する. 価格上昇傾向幅が大きい場合,時間が長い場合,K線面積は大きくなり,波動市場または波動後逆転する場合,K線面積は小さくなります. ペットの反発必然性原理によると,上昇傾向が大きいほど,時間が長いほど,対応するK線面積は大きいほど,逆転の可能性は大きいほど,弾丸のように長く引き上げられ,反発力も大きい.したがって,K線面積の
トレンドの転機が迫っていることをさらに確認するために,買い売り感情の転機を判断するためにKDJ指標を導入する.この戦略の
K線面積戦略の利点は,価格傾向の幅と変化と,買い買い感情の転換を組み合わせて,比較的完全な量化取引戦略を提供することにある.その利点は以下のとおりである.
K線面積戦略には利点があるものの,リスクもあります.
K線面積戦略を最適化するために,次の方向性を考慮することができます:
K線面積を計算する
市場を切り開く信号:
(1) 下降傾向の
(2) KDJの指標値は80以上
"空売りシグナル"
(1) 上昇傾向の
(2) KDJ指標値は20未満
多頭/空頭出場:ATR 追跡停止損失停止
コード実装
// 参数
var maPeriod = 30
var threshold = 50000
var amount = 0.1
// 全局变量
let c = KLineChart({})
let openPrice = 0
let tradeState = "NULL" // NULL BUY SELL
function calculateKLineArea(r, ma) {
var lastCrossUpIndex = null
var lastCrossDownIndex = null
for (var i = r.length - 1 ; i >= 0 ; i--) {
if (ma[i] !== null && r[i].Open < ma[i] && r[i].Close > ma[i]) {
lastCrossUpIndex = i
break
} else if (ma[i] !== null && r[i].Open > ma[i] && r[i].Close < ma[i]) {
lastCrossDownIndex = i
break
}
if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close < ma[i - 1] && r[i].Close > ma[i]) {
lastCrossUpIndex = i
break
} else if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close > ma[i - 1] && r[i].Close < ma[i]) {
lastCrossDownIndex = i
break
}
}
var area = 0
if (lastCrossDownIndex !== null) {
for (var i = r.length - 1 ; i >= lastCrossDownIndex ; i--) {
area -= Math.abs(r[i].Close - ma[i])
}
} else if (lastCrossUpIndex !== null) {
for (var i = r.length - 1 ; i >= lastCrossUpIndex ; i--) {
area += Math.abs(r[i].Close - ma[i])
}
}
return [area, lastCrossUpIndex, lastCrossDownIndex]
}
function onTick() {
var r = _C(exchange.GetRecords)
if (r.length < maPeriod) {
LogStatus(_D(), "K线数量不足")
return
}
var ma = TA.MA(r, maPeriod)
var atr = TA.ATR(r)
var kdj = TA.KDJ(r)
var lineK = kdj[0]
var lineD = kdj[1]
var lineJ = kdj[2]
var areaInfo = calculateKLineArea(r, ma)
var area = _N(areaInfo[0], 0)
var lastCrossUpIndex = areaInfo[1]
var lastCrossDownIndex = areaInfo[2]
r.forEach(function(bar, index) {
c.begin(bar)
c.plotcandle(bar.Open, bar.High, bar.Low, bar.Close, {overlay: true})
let maLine = c.plot(ma[index], "ma", {overlay: true})
let close = c.plot(bar.Close, 'close', {overlay: true})
c.fill(maLine, close, {color: bar.Close > ma[index] ? 'rgba(255, 0, 0, 0.1)' : 'rgba(0, 255, 0, 0.1)'})
if (lastCrossUpIndex !== null) {
c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
} else if (lastCrossDownIndex !== null) {
c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
}
c.plot(lineK[index], "K")
c.plot(lineD[index], "D")
c.plot(lineJ[index], "J")
c.close()
})
if (tradeState == "NULL" && area < -threshold && lineK[lineK.length - 1] > 70) {
// long
let tradeInfo = $.Buy(amount)
if (tradeInfo) {
openPrice = tradeInfo.price
tradeState = "BUY"
}
} else if (tradeState == "NULL" && area > threshold && lineK[lineK.length - 1] < 30) {
// short
let tradeInfo = $.Sell(amount)
if (tradeInfo) {
openPrice = tradeInfo.price
tradeState = "SELL"
}
}
let stopBase = tradeState == "BUY" ? Math.max(openPrice, r[r.length - 2].Close) : Math.min(openPrice, r[r.length - 2].Close)
if (tradeState == "BUY" && r[r.length - 1].Close < stopBase - atr[atr.length - 2]) {
// cover long
let tradeInfo = $.Sell(amount)
if (tradeInfo) {
tradeState = "NULL"
openPrice = 0
}
} else if (tradeState == "SELL" && r[r.length - 1].Close > stopBase + atr[atr.length - 2]) {
// cover short
let tradeInfo = $.Buy(amount)
if (tradeInfo) {
tradeState = "NULL"
openPrice = 0
}
}
LogStatus(_D(), "area:", area, ", lineK[lineK.length - 2]:", lineK[lineK.length - 2])
}
function main() {
if (exchange.GetName().includes("_Futures")) {
throw "not support Futures"
}
while (true) {
onTick()
Sleep(1000)
}
}
戦略的論理は単純です.
1 まず,いくつかのグローバル変数とパラメータを定義します.
戦略パラメータ
グローバル変数
計算関数
主回転関数
onTick関数: これは主要なポリシー実行関数で,関数内の操作は以下のとおりです.
a. 最新のK線データを取得し,K線数が maPeriod よりも少ないことを確認し,そうでなければ状態を記録して返します.
b. 移動平均 ma と ATR の指標 atr と KDJ の指標を計算する.
c. areaInfoから面積情報,最後に交差したK文字列のインデックスと最後に交差したK文字列のインデックスを取得する.
d. K線グラフオブジェクトcを使用して,K線と指標線を描き,同時に価格と移動平均線との関係に応じて異なる色を記入する.
(e) 条件による購入および売却の時期:
tradeState が NULL
買取状態の場合,前日のATRをマイナス1日前の取引日の閉じる価格より低い価格で平衡します.
売り切れた状態の場合,前取引日の閉じる価格と前日のATRを上回る価格で平衡します.
main関数:これは主実行入力で,取引所の名前に
一般的には,この戦略は,主にK線チャートと技術指標を頼りに買い買い決定を行い,同時に停止損失と停止上昇の戦略を用いてリスクを管理する.ただし,これは例策に過ぎず,実際の使用では,市場状況と特定のニーズに応じて調整と最適化が必要であることを注意してください.
在FMZ.COM上使用JavaScript语言没有用多少行代码,很简单的就实现了这个模型。并且使用KLineChart函数很容易实现了K线面积的图形表示。策略设计用于加密货币现货市场,使用了「数字货币现货交易类库」模板,使用模板封装的函数下单,也是非常简单易用、易懂。
ランダムに回見期間を選んで,損をしていないが,継続的に利益も蓄積していない場合,回帰問題は比較的大きい. この戦略には他の最適化方向と空間があるはずです. 興味のある人は,この戦略をアップグレードしてみることができます.
この戦略によって,比較的な取引の考え方を学ぶだけでなく,図を描く方法,K線と均線を囲む面積を表す方法,KDJ指標を描く方法なども学びました.
K線面積戦略は,価格傾向幅とKDJ指標に基づいた取引戦略であり,K線と平均線との間の面積と売り込み情勢の転換を分析することで,トレーダーが市場の動きを予測するのを助けます.リスクがあるにもかかわらず,継続的な最適化と調整によって,この戦略は強力な取引ツールを提供し,トレーダーが市場の変動によりうまく対応するのを助けます.重要なことに,トレーダーは,特定の状況と市場の条件に応じて,戦略のパラメータとルールを柔軟に調整して,より良い取引パフォーマンスを実現する必要があります.