Easy_language

 

 http://www.guosen.com.cn/gxzq/tradestation/help/operate/operate06.html

 

power language

https://seekingalpha-tainan.blogspot.com/2016/10/ifthen.html

 

KOREA

http://www.fntec.com/xe/ts/8739

 

Adaptrade自动策略生成器

http://www.0762jr.com/index.php

 

 Ralph Nelson Elliott 

艾略特波浪理论

 

 

想法1 

1.整体上涨=  60日 平均和 20日平均上涨

2.     1次 跌以后 上涨的概率

    连续2尺跌以后上涨的概率

    概率高的话买入

 

 

 

Close > highest(close[1],10)
buyPoint = Highest(High,lookBackDays);// 可用于唐启安通道


if(args.Order<>null)then


DateTime.Now.ToString()
numtostr(num,digit)
strtonum(str)

换手率
rate =( volume/getfunddata("CLAS",0))*10000;
plot1(rate," 换手率 %");

函数
Method string AskP(int level)
vars:string nu;
Begin
nu = "";
try
nu = numtostr(xxx);
catch(elsystem.Exception ex)
print(ex.Message); //处理异常,打印出异常的消息提示
End;
return nu;
End;


plot1(MyMACD,!( "MACD" ),red);
plot4("加载中","状态",white);
plot3(0,"zeroLine")
print("Test"+newline+"Test");

aa=IFF( bb,cc,dd );//相当无?: 表达式 如果


布林带

MACD 
inputs:FastLength(12),SlowLength(26),MACDLength(9);
vars:m_MACD(0),m_MACDAvg(0),m_MACDDiff(0);
m_MACD=MACD(close,FastLength,SlowLength);
m_MACDAvg=XAverage(m_MACD,MACDLength);
m_MACDDiff=m_MACD-m_MACDAvg;


RSI
var_RSI = RSI( close, RSI_Length ) ;


KDJ=》Stochastic Slow

inputs:Length(14),OverSold(20) ;

vars:Fast_K(0),Fast_D(0),Slow_K(0),Slow_D(0);

Value1 = Stochastic( H,L,C,Length,3,3,1,Fast_K,Fast_D,Slow_K,Slow_D) ;
condition1 = CurrentBar > 2 and Slow_K crosses over Slow_D and Slow_K < OverSold ;
if condition1 then 
Buy ( "StochLE" ) next bar at market ;

 

 1 //引用命名空间
 2 using tsdata.marketdata;
 3 using elsystem;
 4 //变量声明
 5 vars:tsdata.marketdata.PriceSeriesProvider PSP(null);
 6 //引用命名空间
 7 method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args ) 
 8 Begin
 9     PSP = new PriceSeriesProvider;
10     PSP.Load = False;   //修改属性之前关闭数据连接
11     PSP.RealTime = True;    //设置为True以接收行情数据,设置为False为获取历史数据
12     PSP.TimeZone = tsdata.common.TimeZone.Local;
13     PSP.Symbol = "002413.SZ";   //设置代码.
14     PSP.Interval.ChartType = tsdata.marketdata.DataChartType.Bars;  //设置图形为K线图.
15     PSP.Interval.IntervalType = tsdata.marketdata.DataIntervalType.Ticks;   //设置周期类型为Ticks.
16     PSP.Interval.IntervalSpan = 1;  //设置周期为1Ticks.
17     PSP.Range.Type = tsdata.marketdata.DataRangeType.Bars;  //按照Bars数目设置区间.
18     PSP.Range.Bars = 10;    //设置数据区间的Bars数目共计10.
19     PSP.IncludeVolumeInfo = True;   //设置为True 则包含Volume信息.
20     PSP.IncludeTicksInfo = True;    //设置为True 则包含Ticks信息.
21     PSP.UseNaturalHours = True; //设置为True 则尝试使用自然时间.
22     PSP.StateChanged += PSP_StateChanged ;  // 为PSP绑定状态变化事件PSP_StateChanged.
23     PSP.Updated += PSP_Updated ; // 为PSP绑定更新事件PSP_Updated.
24     PSP.Load = True;    //打开数据连接,只是打开动作,不堵塞进程,异步载入数据
25 End;
26 //PSP状态变化事件
27 method void PSP_StateChanged(elsystem.Object sender,tsdata.common.StateChangedEventArgs args)
28 Begin
29     print("PSP.State: "+PSP.State.ToString() );
30     if(PSP.State = tsdata.common.DataState.Loaded) then     //如果加载状态为已加载(Loaded)
31     Begin
32         //Sample code:
33         print("PSP loaded.");
34     End;
35 End;
36 
37 //PSP更新事件
38 method void PSP_Updated(elsystem.Object sender,tsdata.marketdata.PriceSeriesUpdatedEventArgs args)
39 Begin
40     //使用FileAppend(或StreamWriter)将行情高开低收(HOLC)和成交量(Volume),
41     //写入到文件C:\Users\<<username>>\Documents\Quotes.csv中}
42     FileAppend(Environment.GetFolderPath(9) + "..\Quotes.csv", 
43         DateTime.Now.ToString()+", "+
44         PSP.Time[0].toString()+", "+
45         numtostr(PSP.High[0],2) + ", " +
46         numtostr(PSP.Open[0],2) + ", " +
47         numtostr(PSP.Low[0],2)+ ", " +
48         numtostr(PSP.Close[0],2)+ ", " +
49         numtostr(PSP.Volume[0],2) + newline) ;
50 End;
51 
52 if(PSP.State = DataState.loading)then //正在读取数据
53 if(PSP.State = DataState.failed)then  //读取失败 
54 if(PSP.State = DataState.Loaded)then  //读取完

abs->AbsValue
vol->Volume
Max-Maxlist

1.If…Then…
If average(close,5) cross over average(close,20) and marketposition<>1 then 
buy next bar at market;//动作有分号”;”

2.If…Then Begin…End...
if Close > Average(Close, 20) then 
begin
SetPlotColor(1, Red); //动作有分号”;”
Alert; //动作有分号”;”
End; //End有分号”;”

3.If…Then…Else…
if Close > Average(Close, 20) then
SetPlotColor(1, Red) //动作无分号”;”
Else //Else后面没有分号”;”
SetPlotColor(1, Green); //有分号”;”作为语法结尾

4.If…Then Begin…End Else Begin…End
if Close > Average(Close, 20) then 
begin
SetPlotColor(1, Red);
Alert("Close Above Average");
End //无分号”;”
Else 
begin //没有分号”;”
SetPlotColor(1, Green);
Alert(“Close Below Average”);
end; //有分号”;”

 

 


For Counter=IValue To FValue 
Begin
I1;
I2;
End;

For Counter=IValue DownTo FValue 
Begin
I1;
I2;
End;


If UpTrend = True Then Begin
Buy Next Bar Market;
End // end无";"
Else Begin
SellShort Next Bar Market;
End;


if Close > EMA then begin
Print("Close is above the EMA");
end else if (Close < EMA) then begin
Print("Close is below the EMA");
end else

Print("Close is equal to the EMA");

 

 

If E Then Begin 
I1;
I2;
End
Else Begin
I3;
I4;
End;

 

仓位
EntryPrice(num) 
返回制定仓位的开仓价,Num标示当前第几个仓位(最多为10) 
EntryPrice(2)返回值101.19,标示第2个仓位的建仓价

EntryTime(num)
返回制定仓位的建仓时间,Num标示当前第几个仓位(最多为10) 
EntryTime(2)返回16000,标示第2个建仓时间为下午4点

EntryDate(num)
返回制定仓位的建仓日期,Num标示当前第几个仓位(最多为10) 
EntryDate(2)返回981005,标示第2个建仓日期1998年10月5日


MarketPosition 只能显示多单 无单 和空单 没办法显示现况内有几口
MarketPosition =1 有多单
MarketPosition =0 无单
MarketPosition =-1 有空单
CurrentContracts 只能显示有几口单,没办法显示多单还是空单
CurrentContracts =10 表示有10口单.但不知道是多单憨是空单

取得目前仓位进场后的K棒数量,并存于变数 Value1 :
Value1=BarsSinceEntry;

 

周期判断
BarType:返回 价格数据的周期(0=Tick线,1=分钟线,2=日线,3=周线,4=月线)
BarInterval:返回 周期数值

if(BarType=1 and BarInterval=5) then //假如5分钟图表的话

 

CommentaryCL("<font color='blue'>高値</font>=", High:0:0);
spaces(2) //空两格

Date:7:0 //日期小数点前有7位小数点后没有
年从1900年开始计算
如:1030611标示2003年6月11日
Time:4:0 //时间 小数点前4位 小数点后没有
如:1530 //标示下午3点30分


#Region //大纲开始
#EndRegion //大纲结束

PlotPB(High, Low, “DnBar“, RED);//
SetPlotColor (1, RGB (0,255,255)); // Cyan


Int=Integer(整数)
Double=Double Float(双精度浮点型)
Bool = Boolean(布尔型)
String Text(文本)

 

Highest(hight,3) lowest(low,3) 3根bar当中最大值,最小值
Maxlist(val1,val2,val3);取最大值
Minlist(val1,val2,val3);取最小值
CloseD(n);//n天前的收盘价 n=0标示今天
HighW(n);//n周的最高价 n=0标示本周
LowM(n); //前n个月最低价,n=0标示当月
OpenY(n); //前n年的开盘价,n=0标示当年

Floor(num) //向下取整,Floor(4.5) 返回4 / Floor(-1.72)返回-2 
Ceiling(num) //向上取整 Ceiling(4.5) 返回5 /Ceiling(-1.72) 返回-1
Round(num,prec)//四舍五入 Prec为保留的小数点位数, Round(142.3215,2) 返回142.32 /Round(9.5687,3) 返回9.569
IntPortion(num) //返回整数部分 IntPortion(4.5) 返回4 / IntPortion(-1.72) 返回-1
FracPortion(num) //返回小数部分 FracPortion(4.5) 返回0.5 / FracPortion(-1.72) 返回-0.72

 

 

 

 

 

 

 

 1 https://seekingalpha-tainan.blogspot.com/2019/03/linearregslopelinearregangle.html
 2 https://xshelp.xq.com.tw/lists.aspx?a=TRENDFUNC
 3 https://books.google.co.kr/books?id=g-XyYW7f5kYC&pg=PA401&lpg=PA401&dq=tradestation+LinearRegValue&source=bl&ots=G2mETsN8b4&sig=ACfU3U3iwGZF48SKqf3UHGKuLl4MCqCZ8w&hl=zh-CN&sa=X&ved=2ahUKEwi0mIqvwobkAhWMzIsBHaugCXsQ6AEwEnoECAkQAQ#v=onepage&q=tradestation%20LinearRegValue&f=false
 4 https://kabuist.hatenablog.com/
 5 LinearReg
 6 计算线性迴归的斜率与角度,以及预测资料投影点的位置。
 7 回传数值=LinearReg(数列,期数,预测值的相对K棒位置,输出斜率,输出弧度,输出X轴截距,输出预测值)
 8 传入七个参数:
 9 - 第一个参数是数列,通常是开高低收的价格数列。
10 - 第二个参数是期数。
11 - 第三个参数是预测值的相对K棒位置,和序列引用定义相同,0表当期、1表前一期、-1表后一期。
12 - 第四个参数是输出计算完的线性回归线斜率。
13 - 第五个参数是输出计算完的线性回归线弧度。
14 - 第六个参数是输出计算完的线性回归线X轴截距。
15 - 第七个参数是输出计算完的线性回归线预测值。
16 value1 = linearreg(close,20,-1,value2,value3,value4,value5); //计算收盘价20期的线性迴归
17 plot1(value5);                                               //绘製明天的收盘价线性迴归预测值连线
18 
19 
20 LinearRegAngle
21 计算线性迴归的弧度。
22 回传数值=LinearRegAngle(数列,期数)
23 传入二个参数:
24 - 第一个参数是数列,通常是开高低收的价格数列。
25 - 第二个参数是期数。
26 value1 = LinearRegAngle(close,20); //计算收盘价20期的线性迴归线弧度
27 
28 LinearRegSlope
29 计算线性迴归的斜率。
30 回传数值=LinearRegSlope(数列,期数)
31 传入二个参数:
32 - 第一个参数是数列,通常是开高低收的价格数列。
33 - 第二个参数是期数。
34 value1 = LinearRegSlope(close,20); //计算收盘价20期的线性迴归线斜率
35 
36 LinearRegValue
37 LinRegAngleArray
38 LinRegArray
39 LinRegArray2
40 LinRegForecastArray
41 LinRegForecastArray2
42 LinRegInterceptArray
43 LinRegIntercepArray2
44 LinRegSlopeArray
45 LinRegSlopeArray2

 

 

中级1

 

Inputs: Price( Close ), Length( 9 ), Displace( 0 );
Variables: Avg( 0 ) ;
Avg = AverageFC( Price, Length ) ; 
if Displace >= 0 or CurrentBar > AbsValue( Displace ) then 
begin 
Plot1[Displace]( Avg, "Avg" ) ; 
{ alert criteria } 
if AlertEnabled and Displace <= 0 then 
begin 
if Price crosses over Avg then 
Alert("Price crossing over average" ) 
else if Price crosses under Avg then 
Alert( "Price crossing under average" ) ; 
end ; 
end ;

用户在声明变量时,Var、Vars、Variable、 Variables都是可行的,效果是一样的
EL不区分大小写

非执行单词: the of at //注释1 {注释2} 
" " 双引号,定义字符串、文本、标签
{ } 大括号,多行注释,大括号中间的语句不执行

数值型:int整型 float单精度浮点型 double双精度型
Var: double NetChange(0); 
NetChange = Close[0];

布尔型:True False
Var: UpBar (false); 
UpBar = Close > Close[1];

字符型:string (“内容 ”)
:Var: string text(“1234”); 
text = "申购价格不得为0."

数学运算符:
+ 加 Entryprice + 0.5 (开仓价+0.5) 
- 减 Entryprice + 0.5 (开仓价-0.5) 
* 乘 Entryprice+PriceScale*2 
/ 除法 Entryprice+(H+L)/2 
Mod(n,d) 取余 n mod d 
Power(a,b) 乘方 a^b
*的运算速度高于/ ,在不损失运算精度的情况下,除法最好转换成乘法


关系运算符:=(等于) <>(不等于) > (大于) <(小于) >=(大于等于) <=(小于等于) 
Cross Over = Crosses Over= Cross Above = Crosses Above 
Cross Under = Crosses Under = Cross Below = Crosses Below


Input:输入值名称(默认值); 
例: Input:Facetor(1.005); 
Var: double NetChange(0); //变量声明语句 
NetChange = Close – Close[0]; //变量赋值语句

Once条件语句(满足条件后只执行一次)
Once True/False(逻辑表达式) 
Begin 
Action to be taken(执行的动作); 
Action to be taken(执行的动作); 
… 
End; 
例: Var: Counter(0); 
once ( CurrentBar = 1 ) and ( Counter = 0 ) 
begin 
Counter = 1000;
end;

IF条件语句
1.If…Then…
If average(close,5) cross over average(close,20) and marketposition<>1 then 
buy next bar at market;

2.If…Then…Else…
if Close > Average(Close, 20) then
SetPlotColor(1, Red) //動作A後面沒有分號”;”
Else //Else後面沒有分號”;”
SetPlotColor(1, Green); //動作B後面有分號”;”作為語法結尾

3.If…Then Begin…End(如果符合條件就去執行A、B、C…等動作)
if Close > Average(Close, 20) then begin
SetPlotColor(1, Red); //動作A後面有分號”;”
Alert; //動作B後面有分號”;”
End; //End後面有分號”;”

4.If…Then Begin…End Else Begin…End
if Close > Average(Close, 20) then begin
SetPlotColor(1, Red);
Alert("Close Above Average");
End //沒有分號”;”
Else begin //沒有分號”;”
SetPlotColor(1, Green);
Alert(“Close Below Average”);
end;

For循环语句
For value = value1 to value2 
Begin 
Action to be taken(执行的动作); 
Action to be taken(执行的动作); 
… 
End 
例: Var: int loop(0),int sum(0); 
For loop = 0 to 10 
Begin sum = sum + loop; 
End;

While循环语句
While 逻辑表达式 
Begin 
Action to be taken(执行的动作); 
Action to be taken(执行的动作); 
… 
End; 
例: Var:int sum(0),int loop(1); 
While loop <= 10 
Begin 
sum = sum + loop ; 
loop= loop + 1; 
End;

Plot绘图语句
PlotN(数据表达式, " 图形名称" );其中,N=1,2,…,99
例:Plot1(Open, " 开盘价" );

Plot1[3](Value1); 
将它绘制在图表的之前(左) 3 条柱状线上。使用负数在当前柱状线之后(右) 3 条的柱状线上绘制

想要指定绘图颜色和宽度,不能省略绘图名称, 
例如:Plot1(Volume, "V", Black);

Alert预警语句 发出音频或电子通知
例:If Close > Highest(High,10) then 
Alert ("NewHigh");


Print语句
格式:Print(“标签”, 数值, “标签”, 数值,…); 
例:Print(“Time”,time:4:0,“Value1”,Value1); 
注:time:4:0表示输出时间的数值,小数点前4位,小数点后0位。

Commentary语句
注释语句,适用于图形分析、雷达屏 
格式: Commentary (“标签”, 数值, “标签”, 数值,…); 
例:Commentary(“Date”,Date,“Value1”,Value1);

 


NumToStr(Num, Dec);//数值转化为字符串
如:NumToStr(1170.5, 2)//返回 "1170.50".


vectorname=New vector;

vectorname.push_back(25.50);//集合最后添加一个元素
vector.Pop_Back();//集合最后移除元素
vectorname.Insert(Index,25.50);//添加元素
vectorname.Erase(Index);//删除
vectorname.Erase(iStart,iEnd);
vectorname.Clear();//删除全部数据
val1=vectorname[index];//访问元素
val2=Highest(vectorname,vectorname.count);//获取最高值

if Close>Highest(High,10) then
Alert("newHigh");

 

 

If DayOfWeek(Date) = 3 then // 当今天是 星期3的时候 0是周日
If Date<>Date[1] then //隔日 新的一天开始的时候
If Time>1545 then //下午3点45分以后
If Time<1015 then //上午10点15分之前
Highest(High,8)//突破前8个高点

 

HighestBar(close,Length)//返回 Length内 最高价到 现在的数量
LowestBar(close,Length)//返回 Length内 低价到 现在的数量

data1~data50//数据集 即 data1为默认股票,在同一个图表添加第二个股票为Data2
plot1(ticks,"volume") //添加成交额

 

MRO,求最近1个满足条件的K到当前K的距离(同文华里的BARSLAST)
MRO(con,100,1),过去100根bar里,最近1个满足条件(con)的bar,到当前bar的距离。
MRO(con,200,2),过去200根bar里,倒数第2个满足条件con的bar,到当前bar的距离。
LRO(con,100,1),过去100根bar里,最早一个满足con的bar,到当前bar的距离。
比如,MRO(time=901,300,1),过去300根bar里,最近1个时间等于9点01分的K线(也就是开盘后的第1根K线),到当前K线的距离。

 

Average(Price,Length)//计算平均值
Value1 = Average(Close,9);
Plot1(Value1, "AvgClose");

Xaverage(Price, Length)//加权移动平均值
Value1 = XAverage(Close,9);
Plot1(Value1, "XAvgClose");

AvgTrueRange(Length)//计算平均真实区间。
If marketposition=1 then //0.5倍ATR点数停损
sell next bar at entryprice- AvgTrueRange(20)*0.5 stop;


ADX(Length)//ADX指标
BollingerBand(Price, Length, NumDevs)//布林通道指标
MACD(Price, FastLength, SlowLength)//MACD指标
Parabolic(AfStep)//SAR指标
Stochastic(PriceH, PriceL, PriceC, StochLength, Length1, Length2, SmoothingType, oFastK, oFastD, oSlowK, oSlowD)//KD指标
Correlation(Indep,Dep,Length)//计算相关係数
StdDev(Price, Length)//计算标准差


Summation(Price, Length)//累加 相当于EXCEL的SUM函式
Value1=Summation(Ticks,5);//累加最近5根K棒的成交量

Highest(High, length);//最高价
Lowest(Low, length);//最低价

CloseD(PeriodsAgo)//抓日线的收盘价
CloseD(1);//获取当天收盘价
尚有CloseW(PeriodsAgo)、CloseM(PeriodsAgo)、CloseY(PeriodsAgo)等内建函式可用运。


CountIF(Test,Length)//累计过去一定K棒中,符合特定条件的次数
Value1 = CountIF(Close > Open, 12);//计算过去12根K棒中,收盘大于开盘(红K)总数。

LastBarOnChart//判断程式执行K棒是否是最近一根K棒。传回True或False。
If LastBarOnChart Then
Condition1 = PlaySound("C:\window\ding.wav");

Crosses Under
Crosses Above

 

 

 

 

 

输出内容到 TXT 文本

 1 FileAppend("D:\123.txt", "This symbol gapped up on " + NumToStr(Date, 0) + NewLine);  

 

输出内容到 txt文件

1 If lastbaronchart then
2 Begin
3     Print(File("d:\mydata.txt"), Date, Time, Close);
4     print(Date, Time, Close);
5 end;

 

读取txt 文件内容  先 创建文件

 1 using guosen;
 2 using elsystem;
 3 using tsdata.common; 
 4 using tsdata.marketdata;
 5 using elsystem.collections;
 6 using elsystem.io;
 7 
 8 //初始化的时候只执行1遍
 9 method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args ) 
10 begin
11 ReadFile("D:\test1.txt"); //要读取的文件 路径
12 end;
13 
14 
15 Method void ReadFile(string path)
16 vars:StreamReader sr,string line;
17 Begin
18     Try
19         sr = StreamReader.Create(path); //创建读入流
20         while(true)
21         Begin
22             line = sr.ReadLine(); //读取一行
23             if(line.Trim().Equals(""))then
24             Begin
25                 print("读取完");//读取完 打印
26                 break;
27             End
28             Else
29             Begin
30                 Print(line); //一行一行读取 并打印
31             End;
32         End;
33     catch(elsystem.Exception ex)
34         print("File read exception. Not found or locked.");
35     End;
36 End;

 

读写TXT文件 

 1 using guosen;
 2 using elsystem;
 3 using tsdata.common; 
 4 using tsdata.marketdata;
 5 using elsystem.collections;
 6 using elsystem.io;
 7 
 8 //Push_Back – 向 Vector 集合最末端添加一个元素 
 9 //vectorname.Push_Back( 25.50); 
10  
11 //Insert - 在 Vector 集合的指定位置添加元素,将其他元素的序数向后推一位。 
12 //vectorname.Insert(Index, 25.50); 
13 
14 //Pop_Back – 将Vector集合最末端元素移除 
15 //vectorname.Pop_Back(); 
16 
17 //Erase – 移除指定位置元素并将其他元素向前移一位 vectorname.Erase(Index);  
18 //vectorname.Erase(iStart, iEnd);  
19  
20 //Clear - 将 Vector 内全部数据元素删除  
21 //vectorname.Clear(); 
22  
23 //从 Vector 访问数据元素: 
24 //Value1 = vectorname[index]; 
25  
26 //在函数内使用 Vectors: 
27 //Value1 = Highest(vectorname, vectorname.count); 
28 
29 vars:string Path("");//要保存的路径
30 method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args ) 
31 vars:int loop,Vector vec,string line;
32 begin
33   //Path = elsystem.Environment.GetMyWorkDirectory()+"configure_test.txt"; //程序路径
34   
35   Path="D:\test1.txt";
36   vec=my_ReadLine(path);//读取数据
37   print(vec[0].ToString());//显示第0个数据
38   line="789"; //要写入的数据
39   my_WriteLine(path,line);//写入数据
40 end;
41 
42 //读取文件 不能 用String返回
43 Method vector my_ReadLine(string path)
44 vars:StreamReader sr,string line,vector vec;
45  Begin
46      vec = new Vector;
47     Try
48         sr = StreamReader.Create(path); //创建读入流
49         line = sr.ReadLine(); //读取一行
50         if(line.Trim().Equals("")) then Begin
51             print("File content is empty");//读取的文本为空字符串
52             return null;
53         End
54         Else Begin
55             vec.push_back(line); //
56         end;
57         return vec;
58      catch(elsystem.Exception ex) 
59          print("File read exception. Not found or locked."); //不存在
60          return null;
61      End;
62  End;  
63 
64 
65 //保存配置信息到path
66 Method void my_WriteLine(string path,string line)
67 vars:StreamWriter sw;
68 Begin
69     Try
70         sw = StreamWriter.Create(path);//创建写入流
71         sw.Write(line); //写入数据
72         if(sw<>null)then //空的话
73         Begin
74             sw.Close();//关闭写入流
75         End;
76     catch(elsystem.Exception ex)
77         print("Configure save failed."); //写入失败
78     End;
79 End;

 

读写配置信息(官方例子)

 1 using guosen;
 2 using elsystem.io;
 3 using elsystem.collections;
 4 
 5 vars:string ConfigPath("");
 6 method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args ) 
 7 vars:int loop,Vector vec;
 8 begin
 9     ConfigPath = elsystem.Environment.GetMyWorkDirectory()+"configure_test.txt";
10     print("ConfigPath is: "+ ConfigPath);
11     vec = ReadConfig(ConfigPath); //
12     if(vec=null)then
13     Begin
14         print("Read configure error.");
15     End
16     Else
17     Begin
18         for loop = 0 to vec.Count-1
19         Begin
20             print("Config"+numtostr(loop+1,0)+":"+vec[loop].ToString());
21         End;
22     End;    
23 end;
24 
25 
26 method void AnalysisTechnique_UnInitialized( elsystem.Object sender, elsystem.UnInitializedEventArgs args ) 
27 begin
28     SaveConfig(ConfigPath);
29 end;
30 
31 //从path读取配置文件
32 Method vector ReadConfig(string path)
33 vars:StreamReader sr,string line,vector vec_config;
34 Begin
35     vec_config = new Vector;
36     Try
37         sr = StreamReader.Create(path); //创建读入流
38         line = sr.ReadLine(); //读取一行
39         if(line.Trim().Equals(""))then
40         Begin
41             print("File content is empty");//读取的文本为空字符串
42             return null;
43         End
44         Else
45             vec_config = line.Split(","); //以逗号为分隔拆分
46         Return vec_config;
47     catch(elsystem.Exception ex)
48         print("File read exception. Not found or locked.");
49         Return null;
50     End;
51 End;
52 
53 //保存配置信息到path
54 Method void SaveConfig(string path)
55 vars:StreamWriter sw,string configure;
56 Begin
57     configure = "I'm configure.," + elsystem.DateTime.Now.ToString(); //自定义的配置文件: config,DateTime
58     Try
59         sw = StreamWriter.Create(path);//创建写入流
60         sw.Write(configure);
61         if(sw<>null)then
62         Begin
63             sw.Close();//关闭写入流
64         End;
65     catch(elsystem.Exception ex)
66         print("Configure save failed.");
67     End;
68 End;
69 //打印语句输出栏结果示例
70 //2016/12/6 13:22:53 Config saved.
71 //ConfigPath is: C:\Program Files (x86)\TradeStation 9.5\MyWork\configure_test.txt
72 //Config1:I'm configure.
73 //Config2:2016/12/6 13:22:53

 

发邮件

view-》Message center-》messages(tap)

 

1 Inputs: SendEmail(True), #允许发邮件开关
2         email("kingboy100@naver.com"); //邮件地址 可以写很多
3         
4 Vars:content("");//邮件内容
5 
6 //邮件内容 填写
7 content="Date:"+Numtostr(Date,0)+"Time:"+Numtostr(time,2)+newline+"symbol_"+
8         "Open:"+Numtostr(open,0)+"Close:"+Numtostr(close,0)+"High:"+Numtostr(high,0)+"Low:"+Numtostr(low,0);
9 If SendEmail then print(Pager_send(email,content)); //发邮件并 打印,要是返回不是TRUE 可以再发一次

 

策略编程的结构:

第一部分:参数变量

第二部分:条件

第三部分:进场设计

第四部分:出场设计&止盈止损


轻松交易从量化交易开始
第一部分:策略参数&变量

inputs:参数1(?),参数2(?),参数3(?),参数4(?),参数5(?);

variables:var0(0),var1(0),var2(0),var3(0),var4(0),var5(0),var6(0);

注释:inputs策略编辑中的自变量、variables策略编辑中的应变量。

举例:var0=average(close,参数);

Var0是应变量,并根据“参数”这个自变量的改变而改变。

 


第二部分:条件

均线:

var0=Average(close,周期参数);

均线变量“var0”=以“周期参数”为特定周期的收盘价(close)的算数平均。

var0=Xaverage(close,周期参数);

指数移动平均线“var0”。

布林:

var0=BollingerBand(close,周期参数,标准差参数);

var1=BollingerBand(close,周期参数,-标准差参数);

布林上轨“var0”=布林函数(以“周期参数”为周期,收盘价(close)为样本,“标准差参数”为标准差倍数);

布林下轨“var1”=布林函数(以“周期参数”为周期,收盘价(close)为样本,“标准差参数”为标准差倍数);

RSI:

var0=RSI(close,参数);

RSI变量“var0”=以“参数”为周期,收盘价(close)为样本的RSI值。

DKJ:

Vars:KDJRSV(0), KDJK(0), KDJD(0), KDJJ(0);



If CurrentBar = 1 Then begin

KDJRSV = 0;

KDJK = 50;

KDJD = 50;

KDJJ = 0;

end else begin

KDJRSV = (Close - Lowest(Low, 9)) / iff((Highest(High, 9) - Lowest(Low, 9)) = 0, 1, (Highest(High, 9) - Lowest(Low, 9))) * 100;

KDJK = KDJK[1] * 2/3 + KDJRSV * 1/3;

KDJD = KDJD[1] * 2/3 + KDJK * 1/3;

KDJJ = (3 * KDJK) - (2 * KDJD);

end;

绝对值:absvalue

例句:absvalue(var0-var1);

Var0-var1的绝对值

多周期

var1=rsi(close,ma1);



var2=rsi(close,ma1) of data2;周期2

var3=rsi(close,ma1) of data3;周期3

var4=rsi(close,ma1) of data4;周期4

条件举例

condition1=var0>var1 and var1>var2 and var0>var2;

condition2=var2>var1 and var1>var0 and var2>var0;

condition1=close>average(close,50)

“条件1”=收盘价在均线50线上方

Condition2=average(close,50)>average(close,50)[2]

“条件2”=均线50线值大于前第2天均线50线值(即:均线正在上行)

CountIf(condition1,N)=N

“条件1”持续N个周期



MACD快速线

diff=XAverage(close,12)-XAverage(close,26);

condition3=diff<0 and countif[1](diff>0,tc)=tc;

condition4=diff>0 and countif[1](diff<0,tc)=tc;

“条件3”=现在diff<0 同时上一个周期diff值>0保持“tc”个周期;

“条件4”=现在diff>0 同时上一个周期diff值<0保持“tc”个周期;

线性回归角度

inputs:ma(40),jdj(6),jdc(2);

variables:var0(0),var1(0),var2(0),var3(0),var4(0),var5(0),var6(0),oLRSlope(0), oLRAngle(0), oLRIntercept(0), oLRValueRaw(0),vSize(0);



var3=Average(var2,ma);

var5=LinearReg(var3,3,0,oLRSlope,var4,oLRIntercept,oLRValueRaw);

LinearReg

计算线性回归线的斜率和角度,并允许您确定投影线与未来(或过去)柱状线位置相交的价格。

语法

LinearReg(Price, Length, TgtBar, oLRSlope, oLRAngle, oLRIntercept, oLRValue)

返回(整数)

输出的 oLRSlope、oLRAngle、oLRIntercept 和 oLRValueRaw 参数值返回斜率、角度、截距和回归值。LinearReg 函数本身返回的值为 1。

参数

名称

类型

说明

Price

数值

指定用于计算回归线的柱状线值(价格、函数或公式)。

Length

数值

设置要考虑的柱状线数量。

TgtBar

数值

设置在未来(或过去)的目标柱状线位置。使用负 Integer 表示未来的柱状线,正 Integer 表示过去的柱状线,0 表示当前柱状线。



oLRSlope

数值

输出线性回归线的斜率。

oLRAngle

数值

以度为单位,输出线性回归线的角度。

oLRIntercept

数值

输出线性回归线与当前柱状线位置交叉时的值。

oLRValueRaw

数值

输出线性回归线与 TgtPos 柱状线位置交叉时的回归值。


第三、四部分:进场设计 出场设计&止盈止损

进出场设计

标准进场语序一:

If + 条件 + then buy next bar at market;

如果条件成立,那么在下一根K线开盘时买入;

If + 条件 + then sellshort next bar at market;

如果条件成立,那么在下一根K线开盘时卖出;

标准出场语序一:

If + 条件 + then sell next bar at market;

如果条件成立,那么在下一根K线开盘时卖出平仓;

If + 条件 + then buytocover next bar at market;

如果条件成立,那么在下一根K线开盘时买入平仓;

语序二:

if condition1 and close cross above var0 then begin

buy ("B1") next bar at market;

Var9=currentbar;

end;

如果条件1和收盘价上穿变量0,在下一根bar开盘买入;

Var9=进厂价;

if condition2 and close cross under var0 then begin

sellshort ("S1") next bar at market;

Var9=currentbar;

end;

如果条件2和收盘价下穿变量0,在下一根bar开盘卖出;

Var9=进厂价;

if close>average(close,50) then begin

if close<open then var1=high;

End;

如果收盘价>均线50线(价格在均线上方)的情况下

如果收盘价>开盘价 那么最高价记作变量1;

语序三:

if condition1 and condition2 then Buy next bar at var1 stop;

如果条件1和条件2同时成立,在下一根K线价格触及Var1时做多;

if mp[1]=0 and mp<>0 then var0=currentbar;

if currentbar-var0=5 then sell

进场后第五根K线卖出

Value1 = ParabolicSAR(0.02, 0.2, oParCl, oParOp, var2, oTransition);

if marketposition=1 and var2=-1 then sell ("Lzy") next bar at market;

if marketposition=-1 and var2=1 then buytocover ("Szy") next bar at market;

如果持有多单和SAR指标处于空头在下一根K线做空;

如果持有空单和SRR指标处于多头在下一根K线做多;

mp=marketposition;

if mp<>0 and mp<>mp[1] then var2=

如果持有单和上一根K线持单情况和现在持单情况不同则var2=

if mp[1]=0 and mp<>0 then var0=currentbar;

如果上根K线未持单,现在持单,那么var0=进场价

止损设计

固定百分比止盈止损

value1=(1-止损)*entryprice;

value2=(1+止盈)*entryprice;

value3=(1+止损)*entryprice;

value4=(1-止盈)*entryprice;

if currentbar>varN then begin

sell ("止损平仓") next bar at value1 stop;

sell ("止盈平仓") next bar at value2 limit;

buytocover ("止损平仓") next bar at value3 stop;

buytocover ("止盈平仓") next bar at value4 limit;

end;

if barssinceentry=pm then begin

buytocover("s2") next bar at market;

sell("b2") next bar at market;

end;

进场后PM根K线后平仓出场

进场后N个周期保本平仓

if currentbar>=varN+周期then begin

sell next bar at entryprice limit;

buytocover next bar at entryprice limit;

end;

移动止盈止损

if varN<>currentbar then begin

setpercenttrailing(止盈参数*bigpointvalue,参数);

setstoploss(entryprice*止损参数*bigpointvalue);

end;

倍投:

if positionprofit(1)<0

and positionprofit(2)<0

and positionprofit(3)<0

then n=2 else n=1

Buy n contracts next bar at highest(high,2)stop;

如果上次笔交易盈利小于0,上上笔交易盈利小于0,上上上笔交易盈利小于0,则交易2手在下一根K线,最近2根K线的最高点。

指定交易部位

buy/sellshort(“xxx”)

sell/buytocover from entry(“xxx”)

先给进场的信号取个名字,出场时平仓指定名字的单子

Sell 1 contract from total next bar at entryprice+10 stop;

多单向上跳十跳平仓1手

If condion1 then buy 2 contract next bar at market;

满足条件1买入2手多单

Barsinceentry(0)=15 then

进场后15根K线平单

If barsinceentry(0)=10 then sell next bar at market;

开仓后第十根K线平仓

mp=marketposition;

if mp[1]=0 and mp<>0 then var5=currentbar;

var6=ma+var5-currentbar;

if var6<=ma2 then var6=ma2;

if mp[1]<>0 and mp=0 then var6=ma;

var0=Average(open,var6);

if marketposition=1 then sell next bar at var0 stop;

if marketposition=-1 then buytocover next bar at var0 stop;

自适应均值:进场后,设置自适应移动均值,首日自适应移动均值为过去ma日收盘价均值,即为中轨。之后持仓时间每多一个交易日,计算移动平值的天数减去1。但移动均值的计算天数最小递减到ma2。如果达到了ma2,则不再递减。

if marketposition<>1 当前持单不是多仓

currentcortracts=1 持仓是1

股票买整数手(100股为一手)

inputs: vCapital(10000);

variables: vSize(0);

if 条件 then begin

vSize=intportion(vCapital/close/100)*100;

buy ("B1") vSize contract next bar at market;

end;

once cleardebug;

inputs:Startime(0900),Endtime(0930);

var:vSumVolume(0);

if time=Endtime then begin

vSumVolume=0;

for value1=0 to 50 begin

if time[value1]>=Startime then vSumVolume=ticks[value1]+vSumVolume else break;

end;

end;

if adate=20190606 then

print(adate,"/",time,"/",value1,"/",time[value1],"/",ticks[value1],"/",vSumVolume);

计算9点-9点30的成交量总和

 

posted @ 2019-08-12 12:27  kingboy100  阅读(521)  评论(0编辑  收藏  举报