金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 809|回复: 14

分批次止损止盈-股票(请老师用均线金叉编写代码)

[复制链接]

28

主题

100

帖子

100

积分

等级: 免费版

注册:
2025-1-2
曾用名:
发表于 2025-3-4 09:03 | 显示全部楼层 |阅读模式

       5日均线上穿10日均线买入8手股票

[size=14.6667px]1如果当前价格(收盘价)[size=14.6667px]比买入价上涨5%,则卖出前次买入的二分之一[size=14.6667px]票
[size=14.6667px]2如果当前价格(收盘价)[size=14.6667px]比买入价上涨15%以上,则卖出所有前次买入[size=14.6667px]票;
3如果当前价格(收盘价)[size=14.6667px]比
买入价下跌7%,则卖出二分之一前次买入[size=14.6667px]票;
4如果当前价格(收盘价)[size=14.6667px]比买入价下跌10%,则卖出所有前次买入[size=14.6667px]票





回复

使用道具 举报

28

主题

100

帖子

100

积分

等级: 免费版

注册:
2025-1-2
曾用名:
 楼主| 发表于 2025-3-4 14:34 | 显示全部楼层
谢谢老师指教
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-3-4 14:20 | 显示全部楼层
1.建议在模拟上先测试下程序逻辑
2.后台程序化的操作不同于图表程序化,建议先看下帮助说明:https://www.weistock.com/docs/HE ... BA%8F%E5%8C%96.html

3.你这种半自动的,除了初始开仓之外最好不要有其他的手工干预。否则程序是无法知晓你手工操作了什么的。

[PEL] 复制代码

if not(TACCOUNT(53)) then exit;//账户没登陆直接退出

inital_str:stklabel&'_lots';//记录初始持仓数量的全局变量字符串变量
base_str:stklabel&'_lots';//记录初始基准价的全局变量字符串变量


全部持仓:tbuyholdingex('','',2);
可用:tbuyholdingex('','',1); 


initial_lots:=extgbdata(inital_str);//读值
if tbuyholdingex('','',2)<>0 and initial_lots=0 and tglobalsubmitex(0,'','',0)=0 then
begin
  extgbdataset(inital_str,全部持仓);         // 记录初始买入量
  extgbdataset(base_str,callstock('',vtclose,6,-1));//记录基准价
end
 
 if tbuyholdingex('','',2)=0 and initial_lots<>0 then
begin
  extgbdataset(inital_str,0);    
  extgbdataset(base_str,0);
end
 

initial_lots:=extgbdata(inital_str);//初始持仓量
基准价:=extgbdata(base_str);//基准价格


涨幅:=(close / 基准价 - 1);//基于基准价的涨幅
跌幅:=(1 - close / 基准价);
 


if time>=093500 and time<=145500 then
begin
// 卖出条件1:价格上涨8%,卖出一半持仓,仅执行一次

if 可用 > 0 and 涨幅>= 0.08 and 涨幅<0.2 and 基准价>0 and 可用 = initial_lots then
begin
tsell(1, initial_lots / 2, mkt);
end
  
// 卖出条件2:价格上涨20%以上,卖出全部持仓
if 可用> 0 and 涨幅>= 0.2 then
begin
tsell(1,0, mkt);
extgbdataset(inital_str,0);// 清空初始持仓量    
extgbdataset(base_str,0);                
end
  
// 卖出条件3:价格下跌8%,卖出全部持仓
if 可用> 0 and 跌幅>= 0.08 then
begin
tsell(1, 0, mkt);
extgbdataset(inital_str,0);
extgbdataset(base_str,0);
end
 
end
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

28

主题

100

帖子

100

积分

等级: 免费版

注册:
2025-1-2
曾用名:
 楼主| 发表于 2025-3-4 13:47 | 显示全部楼层
老师,

我的思路是只交易持仓量的止盈止损

只取持仓仓位时候的前一天的收盘价,基准价不改变

止损条件改为一次,跌幅超过8%,全部平仓,这样可以避免您说的减仓25%的情况了。




回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-3-4 13:30 | 显示全部楼层
你的代码逻辑上有一些没有处理的情况。

1. 12 和34 是可能穿插发生的。先涨到第一次止盈减半仓位置,然后又跌到第一次止损减半仓位置。这种情况 还继续按照半仓处理(相当于初始仓位的25%了)?

2.你的基准价是隔一天变一次,还是取持仓仓位时候的前一天的收盘价。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

28

主题

100

帖子

100

积分

等级: 免费版

注册:
2025-1-2
曾用名:
 楼主| 发表于 2025-3-4 11:08 | 显示全部楼层
我即将使用金字塔软件专业版,麻烦老师按后台程序化交易重新编写我的交易思路,  不开仓买入股票  ,  只按持仓量进行止盈止损





回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-3-4 10:54 | 显示全部楼层
不行。

图表程序化做不到这种半自动,你删除了开仓语句,平仓语句也会消失,平仓信号是基于理论持仓而不是实际持仓来出信号的。

你如果是自己手工买入 程序卖出,只能用后台程序化,前提是你有后台程序号使用权限。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

28

主题

100

帖子

100

积分

等级: 免费版

注册:
2025-1-2
曾用名:
 楼主| 发表于 2025-3-4 10:50 | 显示全部楼层
谢谢老师!
我的思路是利用原有持仓做止盈止损,不设买入条件。
根据您的编写
我只要把买入条件取消就行了吧!
回复

使用道具 举报

19

主题

256

帖子

341

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
发表于 2025-3-4 10:36 | 显示全部楼层
稍微改一下,就可以了。开仓部分代码还是用原来的。‘注释部分,也是沿用原来的,没有专门修改。

更改部分为:(1)加入时间限制
                    (2)基准价,由原来的开仓价,变为昨收。您看看
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

19

主题

256

帖子

341

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
发表于 2025-3-4 10:33 | 显示全部楼层
[PEL] 复制代码
INPUT:SS(8000,100,10000,100);
MA5: MA(CLOSE, 5);    // 5日均线
MA10: MA(CLOSE, 10);  // 10日均线
 
 
 
// 定义全局变量:记录初始持仓量和当前持仓状态
VARIABLE: initial_lots := 0; // 记录初始买入的手数,初始为0
VARIABLE: current_lots := 0; // 记录当前剩余持仓的手数,初始为0
VARIABLE: half_sold := 0;    // 标记是否已卖出一半持仓,0表示未卖出,1表示已卖出

基准价:=CALLSTOCK('',VTCLOSE,6,-1);//基准价
 
// 买入条件:MA5上穿MA10时,买入8手股票
if CROSS(MA5, MA10) and HOLDING = 0 then
begin
  BUY(1, ss, MARKET);         // 以市价买入8手
  initial_lots := ENTERVOL;         // 记录初始买入量为8手
  current_lots := ENTERVOL;         // 当前持仓量初始化为8手
  half_sold := 0;            // 重置卖出一半的标记为未卖出
end
 
 
可用:HOLDING-DAYHOLDING;

if time>=093500 and time<=145500 THEN
begin
// 卖出条件1:价格上涨5%,卖出一半持仓(4手),仅执行一次
if 可用 > 0 and (CLOSE / 基准价 - 1) >= 0.08 and half_sold = 0 and current_lots = initial_lots then
begin
  止盈1:SELL(1, initial_lots / 2, MARKET);  // 卖出初始买入量的一半(4手)
  current_lots := current_lots / 2;   // 更新当前持仓量为4手
  half_sold := 1;                     // 标记已卖出一半持仓,避免重复触发
end
 
// 卖出条件2:价格上涨15%以上,卖出全部持仓
if 可用 > 0 and (CLOSE / 基准价 - 1) >= 0.2 then
begin
  止盈2:SELL(1, HOLDING, MARKET);           // 卖出全部持仓
  initial_lots := 0;                  // 清空初始持仓量
  current_lots := 0;                  // 清空当前持仓量
  half_sold := 0;                     // 重置卖出一半的标记
end
 
// 卖出条件3:价格下跌7%,卖出一半持仓(4手),仅执行一次
if 可用 > 0 and (1 - CLOSE / 基准价) >= 0.05 and half_sold = 0 and current_lots = initial_lots then
begin
  止损1:SELL(1, initial_lots / 2, MARKET);  // 卖出初始买入量的一半(4手)
  current_lots := current_lots / 2;   // 更新当前持仓量为4手
  half_sold := 1;                     // 标记已卖出一半持仓,避免重复触发
end
 
// 卖出条件4:价格下跌10%,卖出全部持仓
if 可用 > 0 and (1 - CLOSE / 基准价) >= 0.095 then
begin
  止损2:SELL(1, HOLDING, MARKET);           // 卖出全部持仓
  initial_lots := 0;                  // 清空初始持仓量
  current_lots := 0;                  // 清空当前持仓量
  half_sold := 0;                     // 重置卖出一半的标记
end

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-28 04:36 , Processed in 0.160026 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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