金字塔决策交易系统

标题: 请老师帮忙编写一个指标 [打印本页]

作者: 随心而飘    时间: 2025-1-13 12:31
标题: 请老师帮忙编写一个指标
请老师帮忙编写一个指标。谢谢啦!
可用现金:2000000
当前持股票底仓数量:
300308 (中际旭创):3000股  ;    688008 :(澜起科技)5000股  ;     512480: (半导体ETF):180000股。
底仓价格以交易模板运转日的前一天收盘价为起始基准价。
交易时间为9:30-14:57

用日内BB|、KDJ、均线指标交易。
BBI: (MA(CLOSE, 3) + MA(CLOSE, 6) + MA(CLOSE, 12) + MA(CLOSE, 24)) / 4;
RSV := (CLOSE - LLV(LOW, 9)) / (HHV(HIGH, 9) - LLV(LOW, 9)) * 100;
K: SMA(RSV, 3, 1);
D: SMA(K, 3, 1);
J: 3 * K - 2 * D;

MA5: MA(CLOSE,5),PRECISION0,;                                                   
MA10:MA(CLOSE,10),PRECISION0,;  

买入条件:
如果股价上穿BBI且K线大于D线,并且符合以下条件,则执行买入操作
1、买入信号出现后,在120分钟内,如果连续60分钟买入信号存在,则开仓买入2手;
2、收盘时买入信号仍在则增仓4手;
3、买入价均不高于昨日收盘价的6%;

卖出条件:
1、BBI下穿收盘价且K线小于D线,则卖出所有持仓;
1、开仓买入的股票在买入后的三日内盘中上涨8%以上,买入信号出现即卖出二分之一股票;如当日收盘价涨幅超过9.9%,则卖出所有持仓,反之继续持仓;
2、开仓买入的股票涨幅超过16%以上冲高回落4.5%,则卖出所有持仓;
3、百分比跟踪止损,初始止损价设定为6%:(1)买入的股票下跌6%卖出平仓,(2)如果买入的股票每上涨6%,即止损价比原始买入价提高6%,价格以每日收盘价为准。以此类推


持有底仓的卖出及平仓条件:
1、BBI下穿收盘价且K线小于D线,全部卖出平仓
2、如果当前价格比起始基准价上涨9%,则卖出三分之一持仓;上涨15%再卖出三分之一持仓,上涨20%以上,则卖出所有持仓
3、5日均线下穿10均线,全部卖出平仓
4、如果当前价格比起始基准价低于5%,则卖出二分之一持仓; 低于起始基准价10%,则卖出所有持仓





作者: 技术008    时间: 2025-1-13 13:15
cond1:all(close>bbi and k>d,60);
if cond1 and close<ref(close,todaybar)*1.06 then  
begin
        sellshort(1,holding,marketr);
        buy(1,1,marketr);
END

if close>bbi and k>d and time=closetime(4) and close<ref(close,todaybar)*1.06 then
begin
        sellshort(1,holding,marketr);
        buy(1,4,marketr);
END

if close<bbi and c<d then sell(1,holding,marketr);

if hhv(OPENPROFITPER,enterbars)>0.16 and OPENPROFITPER<(0.16-4.5/100) then sell(1,holding,marketr);

if OPENPROFITPER<-0.06 then sell(1,holding,marketr);
作者: 技术008    时间: 2025-1-13 13:15
细节上可能会哟一点出入,建议用户自己学习下代码编写进行完善
作者: 随心而飘    时间: 2025-1-13 13:33
300308 (中际旭创):3000股  ;    688008 :(澜起科技)5000股  ;     512480: (半导体ETF):180000股。
底仓价格以交易模板运转日的前一天收盘价为起始基准价。
交易时间为9:30-14:57

老师,这些怎么写在模板中,我找不到参考的材料,请老师帮忙直接写上
作者: 技术008    时间: 2025-1-13 13:35
交易品种是你自己图表上选哪个品种就交易哪个品种的不是用代码控制

建议你先学习下金字塔的基本操作把,这一上来先扔出一个相对复杂的策略逻辑而自己对软件使用上都一点不了解的话,根本没法用下去

图表的基本操作先看下这个视频了解下
https://www.weistock.com/univercity_video.html

下单数量的话看下buy函数第二个就是数量,你可以先用100股这种简单的去看信号
作者: 随心而飘    时间: 2025-1-13 13:44
老师,谢谢啦!
我初学,确实许多地方不理解。现在希望老师能助力编写一个稍完整的复杂的策略交易模板,参照学习,可以加快理鲜和进步。
作者: 技术008    时间: 2025-1-13 13:46
先基本操作,这种完整复杂策略可能没法帮你完整实现的
很多地方可能都有歧义需要沟通或者你要自己了解下代码,这样和你想的不同的地方就自己能够修改了

所以最好的方式是,用户自己了解代码的基本逻辑,逻辑上的歧义可以自己去修改。
作者: 随心而飘    时间: 2025-1-13 14:01
老师,说实话,我现在持有一些股票,现在主要想先学会止损止盈的策略,顺便以后慢慢学习程序化交易。

我知道要靠我这种小白编写交易策略没有长时间钻研是不可能成功的,更赚不了钱。

所以麻烦你编写的主要是一些止损止盈的策略
作者: 技术008    时间: 2025-1-13 14:05
先把上面的止损止盈先图上看完没问题再说
没办法一次性所有逻辑全部完完全全都完美编写ok的,底下很多细节都没编写

本身这种复杂度策略编写不是这么简单就实现的,也需要用户自己对代码有一定理解,至少也得有个看得懂的程度

如果完完全全一点看不懂,只提中文需求,是否代码和逻辑不一致自己也没办法看出来,这会很困难的
作者: 技术008    时间: 2025-1-13 14:10
本帖最后由 技术008 于 2025-1-13 14:12 编辑

2、开仓买入的股票涨幅超过16%以上冲高回落4.5%,则卖出所有持仓;
3、百分比跟踪止损,初始止损价设定为6%:(1)买入的股票下跌6%卖出平仓,(2)如果买入的股票每上涨6%,即止损价比原始买入价提高6%,价格以每日收盘价为准。以此类推


比如说你这个,怎么看怎么都是回落止损,所以有社么区别呢。后面第二条上涨6%止损价提6%是什么意思呢,我理解就是涨6个点就回落6个点止损,那和第二条不是接近,但是搞了第二种回落幅度???这种没必要搞一堆的上涨多少回落多少平仓,都是一样的逻辑搞很多组合最后可能都不是你又想要的结果了。建议一开始逻辑清晰,不同模式就一种设计去执行

这些个细节你只是笼统的一说,工作人员很难知道你到底所想是什么的

作者: 随心而飘    时间: 2025-1-13 14:21
持有股票底仓2000手,以昨收盘价为起如基准价。

卖出及平仓条件:

1,如果当前价格比起始基准价上涨9%,则卖出三分之一持仓;上涨15%再卖出三分之一持仓,上涨20%以上,则卖出所有持仓
2、5日均线下穿10均线,全部卖出平仓
3、如果当前价格比起始基准价低于5%,则卖出二分之一持仓; 低于起始基准价10%,则卖出所有持仓。

老师,根据上面条件,我自己编写了,请老师检测下正确吗?谢谢!


INPUT: BASE_PRICE(CLOSE[1]), // 昨收盘价作为起始基准价
       N1(5), N2(10);        // 5日和10日均线周期


MA1: MA(C, N1);
MA2: MA(C, N2);

// 定义持仓量
var holding = 2000;

// 卖出及平仓条件
IF C >= BASE_PRICE * 1.09 AND holding > 0 THEN BEGIN
    SELL("上涨9%", holding / 3, MARKET);
    holding := holding - holding / 3;
END;

IF C >= BASE_PRICE * 1.15 AND holding > 0 THEN BEGIN
    SELL("上涨15%", holding / 3, MARKET);
    holding := holding - holding / 3;
END;

IF C >= BASE_PRICE * 1.20 AND holding > 0 THEN BEGIN
    SELL("上涨20%", holding, MARKET);
    holding := 0;
END;

IF CROSS(MA1, MA2, -1) AND holding > 0 THEN BEGIN
    SELL("5日均线下穿10日均线", holding, MARKET);
    holding := 0;
END;

IF C <= BASE_PRICE * 0.95 AND holding > 0 THEN BEGIN
    SELL("下跌5%", holding / 2, MARKET);
    holding := holding - holding / 2;
END;

IF C <= BASE_PRICE * 0.90 AND holding > 0 THEN BEGIN
    SELL("下跌10%", holding, MARKET);
    holding := 0;
END;
作者: 技术008    时间: 2025-1-13 14:48
// 定义持仓量
variable: flag = 0;

// 卖出及平仓条件
IF C >= BASE_PRICE * 1.09 AND flag = 0 THEN BEGIN
    SELL(1, holding / 3, MARKET);
    flag:=1;
END;

IF C >= BASE_PRICE * 1.15 AND flag=1 THEN BEGIN
    SELL(1, holding / 3, MARKET);
    flag:=2;
END;

IF C >= BASE_PRICE * 1.20 AND flag=2 THEN BEGIN
    SELL(1, hh, MARKET);
    flag:=0;
END;



分批平仓要这么写,用一个变量来记录它走过哪种,这样控制每一个区间只能平仓一次
这个你最好自己思考思考这种设计,比如flag=0平仓后flag就是1了,就不会在走当前这个逻辑,跳到下一个盈利幅度。大致逻辑是这样的
作者: 随心而飘    时间: 2025-1-13 14:51
3、百分比跟踪止损,初始止损价设定为6%:(1)买入的股票下跌6%卖出平仓,(2)如果买入的股票每上涨6%,即止损价比原始买入价提高6%,价格以每日收盘价为准。以此类推

老师,这句话的语法确实错了,应该写成 :  
  
初始止损点设为下跌6% ,(1)买入的股票下跌6%,则卖出所有持仓;

(2)如果买入的股票上涨6%,即止损点比原始买入价提高6%,在这个价位下跌6%触发止损,以此类推,价格以每日收盘价为准。

这个方法能在股票价格上涨时锁定部分利润,并在价格下跌时及时止损,从而有效地管理了风险。
作者: 技术008    时间: 2025-1-13 14:52
如果买入的股票上涨6%,即止损点比原始买入价提高6%,在这个价位下跌6%触发止损,以此类推,价格以每日收盘价为准
还是没理解
作者: 随心而飘    时间: 2025-1-13 14:53
2、开仓买入的股票涨幅超过16%以上冲高回落4.5%,则卖出所有持仓;


这句话是回撤平仓

作者: 技术008    时间: 2025-1-13 14:55
如果买入的股票上涨6%,即止损点比原始买入价提高6%,在这个价位下跌6%触发止损,以此类推,价格以每日收盘价为准
还是没理解

回落平仓是知道的
作者: 随心而飘    时间: 2025-1-13 15:02
打比方说,100元买入,不跌反涨,涨到了6%,变成106元了,以后止损就是以106元为基准,106元跌6%,即平仓卖出
作者: 随心而飘    时间: 2025-1-13 15:09

老师,我自己编写下面条件,请老师检查一下,是否正确

持有底仓2000手的卖出及平仓条件:

1,如果当前价格比起始基准价上涨9%,则卖出三分之一持仓;上涨15%再卖出三分之一持仓,上涨20%以上,则卖出所有持仓
2、5日均线下穿10均线,全部卖出平仓
3、如果当前价格比起始基准价低于5%,则卖出二分之一持仓; 低于起始基准价10%,则卖出所有持仓


INPUT: BASE_PRICE(CLOSE[1]), // 昨收盘价作为起始基准价
       N1(5), N2(10);        // 5日和10日均线周期

// 计算均线
MA1: MA(C, N1);
MA2: MA(C, N2);

// 定义持仓量
var holding = 2000;

// 卖出及平仓条件
IF C >= BASE_PRICE * 1.09 AND holding > 0 THEN BEGIN
    SELL("上涨9%", holding / 3, MARKET);
    holding := holding - holding / 3;
END;

IF C >= BASE_PRICE * 1.15 AND holding > 0 THEN BEGIN
    SELL("上涨15%", holding / 3, MARKET);
    holding := holding - holding / 3;
END;

IF C >= BASE_PRICE * 1.20 AND holding > 0 THEN BEGIN
    SELL("上涨20%", holding, MARKET);
    holding := 0;
END;

IF CROSS(MA1, MA2, -1) AND holding > 0 THEN BEGIN
    SELL("5日均线下穿10日均线", holding, MARKET);
    holding := 0;
END;

IF C <= BASE_PRICE * 0.95 AND holding > 0 THEN BEGIN
    SELL("下跌5%", holding / 2, MARKET);
    holding := holding - holding / 2;
END;

IF C <= BASE_PRICE * 0.90 AND holding > 0 THEN BEGIN
    SELL("下跌10%", holding, MARKET);
    holding := 0;
END;
作者: 随心而飘    时间: 2025-1-13 15:31
老师,我现在最迫切需要的是编写一些较好的实用的止损止盈条件。
手中持有一大堆股票,在元旦期间外出旅游,没有看盘,结果股市大跌,错过止损时机,损失惨重!
所以现在匆忙求助老师帮助编写完善止损策略。
至于真正要量化交易,得花大功夫研究,也不一定能行。谢谢老师啦!
作者: 技术008    时间: 2025-1-13 15:32
分批平仓上面不是写了吗
你先看下啊,先去了解这样的使用
作者: 随心而飘    时间: 2025-1-13 15:45
哦,谢谢老师,我搞错了,这是我咋天写的
作者: 随心而飘    时间: 2025-1-14 14:31
BASE_PRICE

老师,检测显示未定义的变量
作者: 技术008    时间: 2025-1-14 14:32
variable:BASE_PRICE:=close;

用这样定义一个全局变量
作者: 随心而飘    时间: 2025-1-14 14:47
hh
老师也显示未定义的变量
作者: 技术008    时间: 2025-1-14 14:49
也用上面方法定义下就行了
你这些是不是都是初始一个值的那种,是的话都是用variable去定义
作者: 随心而飘    时间: 2025-1-14 15:48
老师,模型取得到账户股票持仓吗?是否可以通过账户持仓判断开平仓?
作者: 技术008    时间: 2025-1-14 15:49
图表不支持读取账户持仓的,图表都是根据图上理论持仓,
要读取账户持仓需要专业版

看下这里图表的机制吧,这个可能一开始非常不好理解,但也只能试着自己去理解
https://www.weistock.com/docs/HE ... 6%E6%9C%BA%E5%88%B6
作者: 随心而飘    时间: 2025-1-14 15:57
券商定制的金字塔软件是什么版本?
作者: 技术008    时间: 2025-1-14 15:59
软件版本是根据登录的账号来决定的,同时登录后点帮助-关于
里面会有版本说明的

或者你也可以联系销售申请试用
021-20339098




欢迎光临 金字塔决策交易系统 (https://www.weistock.com/bbs/) Powered by Discuz! X3.4