LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > BTC/USD收益18522倍的策略代码详解-Tradingview优秀策略分享(一)

BTC/USD收益18522倍的策略代码详解-Tradingview优秀策略分享(一)

2020-12-13 金金 来源:区块链网络

未来一段时间,我会从tradingview上挑选优秀的策略分享给大家。

如何判定一个策略的优秀呢?

比特币和以太坊进行日线级别回测,平均表现都中等偏上的策略。前期我先主观挑选,后期策略多了之后,在对比平均值。

今天分享的策略是利用不同的加权移动平均线、指数移动平均线、交易量加权移动平均线和MACD等参数综合形成的一个策略,其中运用了多重但并不复杂的运算。

作者:SeaSide420

在Tradingview可以直接搜索,作者和此策略链接见文末。

数据使用:Bitstamp交易所
btc/usd 起始日期 2011年8月18日,时价10.9美元,之后最低2.22美元。
eth/usd 起始日期 2017年8月17日,时价300美元
手续费:千二

截止到当下,回测结果:
btc/usd 收益率 1852288.48%,18522.88倍。
eth/usd 收益率 4419%,44.19倍

这是固定交易策略的收益率,尽量不要和买了就拿着不动对比,否则策略就没了意义。

下面给出策略的完整代码以及每一行代码的详解。

完整代码如下:

strategy(“MultiCross420”, overlay=true, calc_on_order_fills= true, calc_on_every_tick=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)

keh=input(title=”Double HullMA 1”,type=integer,defval=7, minval=1)
teh=input(title=”Double HullMA 2”,type=integer,defval=14, minval=1)
meh=input(title=”VWMA”,type=integer,defval=1, minval=1)

meh1=vwma(close,round(meh))
n2ma=2*wma(close,round(keh/2))
nma=wma(close,keh)
diff=n2ma-nma,sqn=round(sqrt(keh))
n2ma1=2*wma(close[2],round(keh/2))
nma1=wma(close [2],keh)
diff1=n2ma1-nma1,sqn1=round(sqrt(keh))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
b=n1>n2?lime:red
c=n1>n2?green:red
n2ma3=2*wma(close,round(teh/2))
nma2=wma(close,teh)
diff2=n2ma3-nma2,sqn2=round(sqrt(teh))
n2ma4=2*wma(close [2],round(teh/2))
nma3=wma(close [2],teh)
diff3=n2ma4-nma3,sqn3=round(sqrt(teh))
n3=wma(diff2,sqn2)
n4=wma(diff3,sqn3)

fastLength = input(title=”MacD fastLength”, type=integer,defval=7)
slowlength = input(title=”MacD slowlength”, type=integer,defval=14)
MACDLength = input(title=”MacD Length”, type=integer,defval=3)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
a1=plot(n1,color=c),a2=plot(n2,color=c)
plot(cross(n1, n2) ? n1 : na, style = cross, color=b, linewidth = 3)
a3=plot(n3,color=c),a4=plot(n4,color=c)
plot(cross(n3, n4) ? n1 : na, style = cross, color=b, linewidth = 3)
//a5=plot(meh1,color=c)
long = input(title=”TSI Long Length”, type=integer, defval=5)
short = input(title=”TSI Short Length”, type=integer, defval=3)
signal = input(title=”TSI Signal Length”, type=integer, defval=2)
linebuy = input(title=”TSI Upper Line”, type=integer, defval=4)
linesell = input(title=”TSI Lower Line”, type=integer, defval=-4)

price = close
double_smooth(src, long, short) =>
fist_smooth = ema(src, long)
ema(fist_smooth, short)

pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)

closelong = n1<n2 and="" n3meh1
if(closelong)
strategy.close(“Long”)

closeshort = n1>n2 and n3>n4 and n1<meh1
if (closeshort)
strategy.close(“Short”)

longCondition = strategy.opentrades<1 and n1>n2 and MACD>aMACD and n1n4 and ema(tsi_value, signal)>linesell
if (longCondition)
strategy.entry(“Long”,strategy.long)

shortCondition = strategy.opentrades<1 and n1<n2 and="" macdmeh1 and n3<n4 and ema(tsi_value, signal)<linebuy
if (shortCondition)
strategy.entry(“Short”,strategy.short)

定义策略标题和初始参数

strategy(“MultiCross420”, overlay=true, calc_on_order_fills= true, calc_on_every_tick=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)

“MultiCross420”:标题(title),必填参数。
overlay=true:是设置此策略最终现实再K线图上。
calc_on_order_fills=true:是可选布尔参数,当为true时,策略在订单执行后立即执行附加的K线柱内其他的订单计算。
default_qty_type=strategy.percent_of_equity:可选参数,默认订单形式,strategy.percent_of_equity是指基于仓位权益比例的大小下订单。比如每次开单的比例为总仓位的10%等。
default_qty_value=100:可选浮点参数,设置默认订单大小的数量,也就是上面的‘10%’,这里为100,含义是每次开单都是全仓。
pyramiding=0:同一方向可以开单的数量,为0是默认只能开一单。即当下的单子平仓之前,不能再开单子。

定义输入函数

keh=input(title=”Double HullMA 1”,type=integer,defval=7, minval=1)
teh=input(title=”Double HullMA 2”,type=integer,defval=14, minval=1)
meh=input(title=”VWMA”,type=integer,defval=1, minval=1)
利用input()函数来设置输入选项。
Kehteh是两条双HullMA移动平均线的参数输入函数,分别定义了输入类型,默认值和最小值。
Meh是成交量加权移动平均线的参数输入函数,定义了输入类型,默认值和最小值。

计算交易策略变量

meh1=vwma(close,round(meh))
n2ma=2*wma(close,round(keh/2))
nma=wma(close,keh)
diff=n2ma-nma,sqn=round(sqrt(keh))
n2ma1=2*wma(close[2],round(keh/2))
nma1=wma(close[2],keh)
diff1=n2ma1-nma1,sqn1=round(sqrt(keh))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
b=n1>n2?lime:red
c=n1>n2?green:red
n2ma3=2*wma(close,round(teh/2))
nma2=wma(close,teh)
diff2=n2ma3-nma2,sqn2=round(sqrt(teh))
n2ma4=2*wma(close[2],round(teh/2))
nma3=wma(close[2],teh)
diff3=n2ma4-nma3,sqn3=round(sqrt(teh))
n3=wma(diff2,sqn2)
n4=wma(diff3,sqn3)

meh1=vwma(close,round(meh))
定义成交量加权移动平均线,数据源为收盘价,取K线柱数为meh结果的四舍五入值。

n2ma=2*wma(close,round(keh/2))
定义2倍的加权移动平均线n2ma,数据源为收盘价,取K线柱数为(keh/2)结果的四舍五入值。

nma=wma(close,keh)
定义加权移动平均线nma,数据源为收盘价,取K线柱数为整形自变量keh
diff=n2ma-nma,sqn=round(sqrt(keh))
定义两条加权移动平均线的差值diff,变量sqn为—keh的开平方再进行四舍五入
n2ma1=2*wma(close[2],round(keh/2))
定义2倍的加权移动平均线n2ma1,数据源为从当前K线柱往左数两个的K线柱的收盘价,取K线柱数为(keh/2)结果的四舍五入值
nma1=wma(close[2],keh)
定义加权移动平均线nma1,数据源为从当前K线柱往左数两个的K线柱的收盘价,取K线柱数为keh
diff1=n2ma1-nma1,sqn1=round(sqrt(keh))
定义两条加权移动平均线的差值diff,变量sqn为—keh的开平方再进行四舍五入
n1=wma(diff,sqn)
定义加权移动平均线n1,数据源为diff,取数据个数为sqn
n2=wma(diff1,sqn)
定义加权移动平均线n2,数据源为diff1,取数据个数为sqn
b=n1>n2?lime:red
用三元条件运算定义变量b,若n1>n2为true,赋值颜色lime给b,若n1>n2为false,则赋值颜色red给b
c=n1>n2?green:red
用三元条件运算定义变量c,若n1>n2为true,赋值颜色green给c,若n1>n2为false,则赋值颜色red给c
n2ma3=2*wma(close,round(teh/2))
定义2倍的加权移动平均线n2ma3,数据源为收盘价,取K线柱数为取K线柱数为(teh/2)结果的四舍五入值
nma2=wma(close,teh)
定义加权移动平均线nma2,数据源为收盘价,取K线柱数为keh
diff2=n2ma3-nma2,sqn2=round(sqrt(teh))
定义两条加权移动平均线的差值diff2,变量sqn2为—teh的开平方再进行四舍五入
n2ma4=2*wma(close[2],round(teh/2))
定义2倍的加权移动平均线n2ma4,数据源为从当前K线柱往左数两个的K线柱的收盘价,取K线柱数为(teh/2)结果的四舍五入值
nma3=wma(close[2],teh)
定义加权移动平均线nma3,数据源为从当前K线柱往左数两个的K线柱的收盘价,取K线柱数为teh
diff3=n2ma4-nma3,sqn3=round(sqrt(teh))
定义两条加权移动平均线的差值diff3,变量sqn3为—teh的开平方再进行四舍五入
n3=wma(diff2,sqn2)
定义加权移动平均线n3,数据源为diff2,取数据个数为sqn2
n4=wma(diff3,sqn3)
定义加权移动平均线n4,数据源为diff3,取数据个数为sqn3

定义MACD相关输入函数
fastLength = input(title=”MacD fastLength”, type=integer,defval=7)
slowlength = input(title=”MacD slowlength”, type=integer,defval=14)
定义两个Macd数据长度MacD fastLengthhe和MacD slowlength的输入函数,设置了title、类型和默认值
MACDLength = input(title=”MacD Length”, type=integer,defval=3)
定义Macd数据长度MacD Lengthhe的输入函数,设置了title、类型和默认值
MACD = ema(close, fastLength) - ema(close, slowlength)
定义MACD
aMACD = ema(MACD, MACDLength)
定义aMACD
delta = MACD - aMACD
定义差值
a1=plot(n1,color=c),a2=plot(n2,color=c)
两个以n1和n2为自变量的输出变量a1和a2
plot(cross(n1, n2) ? n1 : na, style = cross, color=b, linewidth = 3)
输出显示函数,若n1和n2交叉,则输出显示形式为“+”号,颜色为b,线宽为3,如果无交叉,则不输出。
a3=plot(n3,color=c),a4=plot(n4,color=c)
两个以n3和n4为自变量的输出变量a3和a4
plot(cross(n3, n4) ? n1 : na, style = cross, color=b, linewidth = 3)
输出显示函数,若n3和n4交叉,则输出显示形式为“+”号,颜色为b,线宽为3,如果无交叉,则不输出。
//a5=plot(meh1,color=c)
以meh1为自变量的输出变量a5
long = input(title=”TSI Long Length”, type=integer, defval=5)
定义数据长度TSI Long Length的输入函数long,设置了title、类型和默认值
short = input(title=”TSI Short Length”, type=integer, defval=3)
定义数据长度TSI Short Length的输入函数short,设置了title、类型和默认值
signal = input(title=”TSI Signal Length”, type=integer, defval=2)
定义数据长度TSI Signal Length的输入函数signal,设置了title、类型和默认值
linebuy = input(title=”TSI Upper Line”, type=integer, defval=4)
定义数据长度TSI Upper Line的输入函数linebuy,设置了title、类型和默认值
linesell = input(title=”TSI Lower Line”, type=integer, defval=-4)
定义数据长度TSI Lower Line的输入函数linesell,设置了title、类型和默认值

计算交易策略变量2

price = close
赋值收盘价给变量price
double_smooth(src, long, short) =>
fist_smooth = ema(src, long)
ema(fist_smooth, short)
定义函数double_smooth,自变量为src, long, short,输出为ema (fist_smooth, short)

pc = change(price)
赋值当前收盘价和前一个收盘价的变化量给变量pc
double_smoothed_pc = double_smooth(pc, long, short)
赋值定义变量double_smoothed_pc,为函数double_smooth,自变量为src, long, short
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
赋值定义变量double_smoothed_abs_pc,为函数double_smooth,自变量为abs(pc), long, short
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
赋值定义变量tsi_value,为double_smoothed_pc /和double_smoothed_abs_pc的比值百分比

定义开单条件并建立头寸

closelong = n1<n2 and="" n3meh1
定义关闭做多的条件变量closelong
if(closelong)
strategy.close(“Long”)
退出多头交易头寸命令

closeshort = n1>n2 and n3>n4 and n1<meh1
定义关闭做空的条件变量closeshort
if (closeshort)
strategy.close(“Short”)
退出多头交易头寸命令

longCondition = strategy.opentrades<1 and n1>n2 and MACD>aMACD and n1n4 and ema(tsi_value, signal)>linesell
定义做多的条件变量closeshort
if (longCondition)
strategy.entry(“Long”,strategy.long)
用开单命令建立多头交易头寸

shortCondition = strategy.opentrades<1 and n1<n2 and="" macdmeh1 and n3<n4 and ema(tsi_value, signal)<linebuy
定义做空的条件变量closeshort
if (shortCondition)
strategy.entry(“Short”,strategy.short)
用开单命令建立空头交易头寸

有兴趣的可以复制脚本进行试验,也可以直接点击作者及策略链接。

有想制定自己的指标和交易策略的伙伴,欢迎大家添加微信jinvlog交流。

注册Tradingview平台,点击Tradingview。

—-

编译者/作者:金金

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...