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 ); 用户在声明变量时,Var、Vars、Variable、 Variables都是可行的,效果是一样的 非执行单词: the of at //注释1 {注释2} 数值型:int整型 float单精度浮点型 double双精度型 布尔型:True False 字符型:string (“内容 ”) 数学运算符:
Once条件语句(满足条件后只执行一次) IF条件语句 2.If…Then…Else… 3.If…Then Begin…End(如果符合條件就去執行A、B、C…等動作) 4.If…Then Begin…End Else Begin…End For循环语句 While循环语句 Plot绘图语句 Plot1[3](Value1); 想要指定绘图颜色和宽度,不能省略绘图名称, Alert预警语句 发出音频或电子通知
Commentary语句
|
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 可以再发一次