金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1306|回复: 9

你好,我想写一个策略

[复制链接]

21

主题

54

帖子

54

积分

等级: 免费版

注册:
2024-6-4
曾用名:
发表于 2024-7-16 16:13 | 显示全部楼层 |阅读模式
你好,我想写一个策略,但我自己实在没办法编写,你们能不能有偿帮我编写一下,或者推荐一个人帮我编写一下
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-7-16 16:22 | 显示全部楼层
你可以把需求在论坛这边提下
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

21

主题

54

帖子

54

积分

等级: 免费版

注册:
2024-6-4
曾用名:
 楼主| 发表于 2024-7-17 21:54 来自手机 | 显示全部楼层
我想写一篇在金字塔决策交要求一下: 1.在(WA)5日均线上做多,在5日均线下做空。 2.止盈止损3眺(或者说3个点)。 3.首次买入1手,如果盈下一次继续买1手,如果输下一次就买入2手(从输的第一次开始到买入2手结束,胜负率需达到50%),之后在从1手开始买入。不知能不能帮我写成一个代码,我是怎么搞都有问题,谢谢。
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-7-18 10:24 | 显示全部楼层
cond1:close>ma(c,5);
cond2:close<ma(c,5);
variable:ss=1;


if cond1 then buy(1,ss,marketr);
if cond2 then buyshort(1,ss,marketr);

//平多
IF C-AVGENTERPRICE>3*MINDIFF THEN BEGIN
SELL(1,HOLDING,marketr);
ss:+1;
END
//平空
IF AVGENTERPRICE-c>3*MINDIFF THEN BEGIN
SELLshort(1,HOLDING,marketr);
ss:=1;
END

//平多
IF AVGENTERPRICE-3>3*MINDIFF THEN BEGIN
SELL(1,HOLDING,marketr);
ss:=ss+1;
END
//平空
IF c-AVGENTERPRICE>3*MINDIFF THEN BEGIN
SELLshort(1,HOLDING,marketr);
ss:=ss+1;
END

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

21

主题

54

帖子

54

积分

等级: 免费版

注册:
2024-6-4
曾用名:
 楼主| 发表于 2024-7-18 15:30 | 显示全部楼层
//平多
IF C-AVGENTERPRICE>3*MINDIFF THEN BEGIN
SELL(1,HOLDING,marketr);
ss:+1;
保存显示编释错误,变量名ss重复

补充内容 (2024-7-18 16:14):
你好楼主,可能是我表达不清楚,这个策略一定是先平后买,手里的期货一直只有1-2手(在胜率达到50%的时候手里就只有一手,在没达到胜率50%的时候手里就有2手)谢谢
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-7-18 15:32 | 显示全部楼层
cond1:close>ma(c,5);
cond2:close<ma(c,5);
variable:ss=1;


if cond1 then buy(1,ss,marketr);
if cond2 then buyshort(1,ss,marketr);

//平多
IF C-AVGENTERPRICE>3*MINDIFF THEN BEGIN
SELL(1,HOLDING,marketr);
ss:=1;
END
//平空
IF AVGENTERPRICE-c>3*MINDIFF THEN BEGIN
SELLshort(1,HOLDING,marketr);
ss:=1;
END

//平多
IF AVGENTERPRICE-3>3*MINDIFF THEN BEGIN
SELL(1,HOLDING,marketr);
ss:=ss+1;
END
//平空
IF c-AVGENTERPRICE>3*MINDIFF THEN BEGIN
SELLshort(1,HOLDING,marketr);
ss:=ss+1;
END
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

21

主题

54

帖子

54

积分

等级: 免费版

注册:
2024-6-4
曾用名:
 楼主| 发表于 2024-7-18 16:53 | 显示全部楼层
variable: ss = 1;
average_price = 0;  # 记录开仓均价

// 计算 5 日均线
ma5 = talib.SMA(close, timeperiod=5);

// 平多
IF C - average_price > 3 * MINDIFF THEN
BEGIN
    SELL(1, HOLDING, marketr);
    ss := 1;
    average_price := 0;  // 平仓后重置开仓均价
END

// 平空
IF average_price - C > 3 * MINDIFF THEN
BEGIN
    SELLSHORT(1, HOLDING, marketr);
    ss := 1;
    average_price := 0;  // 平仓后重置开仓均价
END

// 先执行平仓操作,再进行买入或卖空操作
IF C > ma5 THEN
BEGIN
    // 如果有空仓,则先平空
    IF HOLDING < 0 THEN
    BEGIN
        SELLSHORT(1, HOLDING, marketr);
        ss := 1;
        average_price := 0;  // 平仓后重置开仓均价
    END
    // 买入开仓
    BUY(ss, marketr);
    average_price := C;  // 记录开仓均价
    IF ss == 2 AND HOLDING > 0 THEN  // 如果之前是亏损后买入 2 手且盈利了,则恢复为买 1 手
        ss := 1;
END

IF C < ma5 THEN
BEGIN
    // 如果有多仓,则先平多
    IF HOLDING > 0 THEN
    BEGIN
        SELL(1, HOLDING, marketr);
        ss := 1;
        average_price := 0;  // 平仓后重置开仓均价
    END
    // 卖空开仓
    BUYSHORT(ss, marketr);
    average_price := C;  // 记录开仓均价
    IF ss == 2 AND HOLDING < 0 THEN  // 如果之前是亏损后买入 2 手且盈利了,则恢复为买 1 手
        ss := 1;
END
你好这是我请朋友帮我写的但是始终无法通过测试,到底是哪里不对,能不能帮我修改一下,谢谢
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-7-18 16:56 | 显示全部楼层
variable: ss = 1;
variable: average_price = 0;  
// 计算 5 日均线
ma5 := ma(close, 5);

// 平多
IF C - average_price > 3 * MINDIFF THEN
BEGIN
    SELL(1, HOLDING, marketr);
    ss := 1;
    average_price := 0;  // 平仓后重置开仓均价
END

// 平空
IF average_price - C > 3 * MINDIFF THEN
BEGIN
    SELLSHORT(1, HOLDING, marketr);
    ss := 1;
    average_price := 0;  // 平仓后重置开仓均价
END

// 先执行平仓操作,再进行买入或卖空操作
IF C > ma5 THEN
BEGIN
    // 如果有空仓,则先平空
    IF HOLDING < 0 THEN
    BEGIN
        SELLSHORT(1, HOLDING, marketr);
        ss := 1;
        average_price := 0;  // 平仓后重置开仓均价
    END
    // 买入开仓
    BUY(1,ss, marketr);
    average_price := C;  // 记录开仓均价
    IF ss = 2 AND HOLDING > 0 THEN  // 如果之前是亏损后买入 2 手且盈利了,则恢复为买 1 手
        ss := 1;
END

IF C < ma5 THEN
BEGIN
    // 如果有多仓,则先平多
    IF HOLDING > 0 THEN
    BEGIN
        SELL(1, HOLDING, marketr);
        ss := 1;
        average_price := 0;  // 平仓后重置开仓均价
    END
    // 卖空开仓
    BUYSHORT(1,ss, marketr);
    average_price := C;  // 记录开仓均价
    IF ss = 2 AND HOLDING < 0 THEN  // 如果之前是亏损后买入 2 手且盈利了,则恢复为买 1 手
        ss := 1;
END
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

21

主题

54

帖子

54

积分

等级: 免费版

注册:
2024-6-4
曾用名:
 楼主| 发表于 2024-7-19 11:49 | 显示全部楼层
技术008 发表于 2024-7-18 16:56
variable: ss = 1;
variable: average_price = 0;  
// 计算 5 日均线

// 该策略适用图表程序化交易
// 该策略适用日线周期、分钟周期
INPUT:N1(13,1,1000,1),N2(11,1,1000,1),N3(1,1,100,1),SS(1,1,100,1);
// 中间变量
VAR2:=EMA(C,N2);  // 尝试使用指数移动平均
VAR3:=EMA(VAR2,N1);
VAR4:=IF((H+L)<=(REF(H,1)+REF(L,1)),0,MAX(ABS(H-REF(H,1)),ABS(L-REF(L,1))));
VAR5:=IF((H+L)>=(REF(H,1)+REF(L,1)),0,MAX(ABS(H-REF(H,1)),ABS(L-REF(L,1))));
VAR6:=SUM(VAR4,N1)/(SUM(VAR4,N1)+SUM(VAR5,N1));
VAR7:=SUM(VAR5,N1)/(SUM(VAR4,N1)+SUM(VAR5,N1));
VAR8:=VAR6-VAR7;
VAR9:=EMA(VAR8,2*N1);  // 同样使用指数移动平均
VAR10:=EMA(VAR9,N1);
// 开平仓条件
CONKD:=BARPOS>N2 AND C>VAR2 AND VAR2>VAR3 AND VAR8>0 AND VAR9>VAR10 AND C > MA(C,5);  // 增加短期均线的参考
CONKK:=BARPOS>N2 AND C<VAR2 AND VAR2<VAR3 AND VAR8<0 AND VAR9<VAR10 AND C < MA(C,5);
CONPD:C<VAR2 AND C>ENTERPRICE*(1+0.02*N3);  // 略微调整止损比例
CONPK:C>VAR2 AND C<ENTERPRICE*(1-0.02*N3);
// 止损条件
DTZS:=C<ENTERPRICE*(1-0.02*N3);
KTZS:=C>ENTERPRICE*(1+0.02*N3);
// 交易系统
SELL(HOLDING>0 AND CONPD,HOLDING,MARKET);
SELLSHORT(HOLDING<0 AND CONPK,HOLDING,MARKET);
BUY(HOLDING=0 AND CONKD,SS,MARKET);
BUYSHORT(HOLDING=0 AND CONKK,SS,MARKET);
SELL(HOLDING>0 AND DTZS,HOLDING,MARKET);
SELLSHORT(HOLDING<0 AND KTZS,HOLDING,MARKET);
以上代码的买入条件是每次买入1手,麻烦你能不能帮我改为,每次买入条件为总金额的百分之40-百分之60,我自己改老是出问题,谢谢
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-7-19 13:17 | 显示全部楼层
// 该策略适用图表程序化交易
// 该策略适用日线周期、分钟周期
INPUT:N1(13,1,1000,1),N2(11,1,1000,1),N3(1,1,100,1),SS(1,1,100,1);
// 中间变量
VAR2:=EMA(C,N2);  // 尝试使用指数移动平均
VAR3:=EMA(VAR2,N1);
VAR4:=IF((H+L)<=(REF(H,1)+REF(L,1)),0,MAX(ABS(H-REF(H,1)),ABS(L-REF(L,1))));
VAR5:=IF((H+L)>=(REF(H,1)+REF(L,1)),0,MAX(ABS(H-REF(H,1)),ABS(L-REF(L,1))));
VAR6:=SUM(VAR4,N1)/(SUM(VAR4,N1)+SUM(VAR5,N1));
VAR7:=SUM(VAR5,N1)/(SUM(VAR4,N1)+SUM(VAR5,N1));
VAR8:=VAR6-VAR7;
VAR9:=EMA(VAR8,2*N1);  // 同样使用指数移动平均
VAR10:=EMA(VAR9,N1);
// 开平仓条件
CONKD:=BARPOS>N2 AND C>VAR2 AND VAR2>VAR3 AND VAR8>0 AND VAR9>VAR10 AND C > MA(C,5);  // 增加短期均线的参考
CONKK:=BARPOS>N2 AND C<VAR2 AND VAR2<VAR3 AND VAR8<0 AND VAR9<VAR10 AND C < MA(C,5);
CONPD:C<VAR2 AND C>ENTERPRICE*(1+0.02*N3);  // 略微调整止损比例
CONPK:C>VAR2 AND C<ENTERPRICE*(1-0.02*N3);
// 止损条件
DTZS:=C<ENTERPRICE*(1-0.02*N3);
KTZS:=C>ENTERPRICE*(1+0.02*N3);
// 交易系统
SELL(HOLDING>0 AND CONPD,HOLDING,MARKET);
SELLSHORT(HOLDING<0 AND CONPK,HOLDING,MARKET);
BUY(HOLDING=0 AND CONKD,40%,MARKET);
BUYSHORT(HOLDING=0 AND CONKK,40%,MARKET);
SELL(HOLDING>0 AND DTZS,HOLDING,MARKET);
SELLSHORT(HOLDING<0 AND KTZS,HOLDING,MARKET);
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-7-24 07:57 , Processed in 0.149665 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表