Forex Tester 交易策略 - 定义外部参数

在Forex Tester中,用户需要修改策略参数,例如,该策略应该在哪种货币上起作用,或者它应该对订单使用什么止损等。

可以使用以下8种类型参数:

ot_Longword - unsigned integer, 0..4294967295
ot_Integer - signed integer, -2147483648..2147483647
ot_Double - double, 5.0 x 10^-324 .. 1.7 x 10^308
ot_String - text string
ot_Boolean - true/false
ot_EnumType - you can define list of strings for this parameter, internal value will be position in this list 0...N-1
ot_Timeframe - this parameter represents available timeframes PERIOD_M1..PERIOD_W1
ot_Currency - this parameter contains currency name and will allow you to choose currency from currency list in dialog
 

在初始化函数InitStrategy中我们就应该定义参数,可以分为以下5步:

RegOption - 创建新参数

AddSeparator - 添加参数分隔符(可以理解一组参数的小标题 )

AddOptionValue - 添加到下拉列表的枚举值.

SetOptionRange - 检查输入的正确值,可以设置范围。 仅适用于 longword、integer 和 double 类型的参数。

SetOptionDigits - 定义对话框中小数点位数(仅对double类型有效) 

首先我们需要定义一个变量来存放参数:

var
  Delta: double = 3.46;

该参数将在第一次启动时初始化为3.46,之后这个值将自动存储在这个策略的ini文件中。

和一些额外的字符串在InitStrategy过程:

RegOption('Delta', ot_Double, Delta); // 创建参数(名称,类型,选项)
  SetOptionRange('Delta', 0, 100); //定义参数范围0-100
  SetOptionDigits('Delta', 2); //参数小数点后最多2位

全部代码如下:

library DemoStrategy;

uses
  SysUtils, StrategyInterfaceUnit, TechnicalFunctions;

// 外部参数
var
  Delta: double = 3.46;

procedure InitStrategy; stdcall;
begin
  StrategyShortName('DemoStrategy'); //策略名
  StrategyDescription('Demo strategy that does nothing'); //策略简短描述

  RegOption('Delta', ot_Double, Delta); // 创建参数(名称,类型,选项)
  SetOptionRange('Delta', 0, 100); //定义参数范围0-100
  SetOptionDigits('Delta', 2); //参数小数点后最多2位
end;

procedure DoneStrategy; stdcall;
begin

end;

procedure ResetStrategy; stdcall;
begin

end;

procedure GetSingleTick; stdcall;
begin

end;

exports
  InitStrategy,
  DoneStrategy,
  ResetStrategy,
  GetSingleTick;

end.

你也可以省略掉SetOptionRange和SetOptionDigits,这种情况下将不控制范围并默认使用小数点后两位,不过为了出幺蛾子,还是严谨点写上为好.

加载到ForexTester之后的界面如下:


让我们添加更多简单的参数:

StopLoss: integer = 20;
Days: longword = 7;
UseStopLoss: boolean = true;
RegOption('StopLoss', ot_Integer, StopLoss);
RegOption('Days', ot_Longword, Days);
RegOption('UseStopLoss', ot_Boolean, UseStopLoss);

添加完成之后,我们将看到:


下面实例展示使用 AddSeparator 之间添加分隔符。

首先是枚举, 它的内部表示是整数:

List: integer = 0;

在InitStrategy过程中,我们将添加这样的行:

RegOption('List', ot_EnumType, List);
AddOptionValue('List', 'string 1');
AddOptionValue('List', 'string 2');
AddOptionValue('List', 'string 3');
List := 1;

这里我们创建了3个字符串的下拉列表'string 1'..'string 1',设置默认值为字符串2。(因为我们从0开始计数)见下图:

完整的代码如下:

library DemoStrategy;

uses
  SysUtils, StrategyInterfaceUnit, TechnicalFunctions;

// 外部参数
var
  Delta: double = 3.46;
  StopLoss: integer = 20;
  Day: longword = 7;
  UseStopLoss: boolean = true;
  List: Integer = 0;

procedure InitStrategy; stdcall;
begin
  StrategyShortName('DemoStrategy'); //策略名
  StrategyDescription('Demo strategy that does nothing'); //策略简短描述

  RegOption('Delta', ot_Double, Delta); // 创建参数(名称,类型,选项)
  RegOption('止损', ot_Integer, StopLoss); // 创建参数(名称,类型,选项)
  RegOption('天数', ot_Longword, Day); // 创建参数(名称,类型,选项)
  RegOption('是否', ot_Boolean, UseStopLoss); // 创建参数(名称,类型,选项)



  AddSeparator('分隔符');

  RegOption('列表', ot_EnumType, List);
  AddOptionValue('列表', '选项1');
  AddOptionValue('列表', '选项2');
  AddOptionValue('列表', '选项3');

  SetOptionRange('Delta', 0, 100); //定义参数范围0-100
  SetOptionDigits('Delta', 2); //参数小数点后最多2位
end;

procedure DoneStrategy; stdcall;
begin

end;

procedure ResetStrategy; stdcall;
begin

end;

procedure GetSingleTick; stdcall;
begin

end;

exports
  InitStrategy,
  DoneStrategy,
  ResetStrategy,
  GetSingleTick;

end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tmlige

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值