Шаблон программы-стратегии 1b bot PRO

Дата: 02.09.2014
Основной шаблон для написания стратегий(пример программы)


// ТУТ ОПИСАН СТАНДАРТНЫЙ ШАБЛОН СТРУКТУРЫ СТРАТЕГИИ (НАЧАЛЬНЫЙ ВИД)
// это образец, костяк для стратегии

unit code;
// ВНИМАНИЕ! модуль должен называться точно также, как файл, т.е. если файл code.pas - то unit code;

interface

uses Bot_RW, BaseStrategy; 

type
TTradeStrategy = class(TBaseStrategy)
  public
    //тут можно добавить свои переменные
    myVar1 : integer;
    myVar2 : Double;
    procedure OnCreate;override;
    procedure OnDestroy;override;

    procedure CanBuy(var RCanBuy:boolean; var RAmnt, RPrice:Double);override;
    procedure CanSell(var RCanSell:boolean; var RAmnt, RPrice:Double);override;
    procedure CanSellMax(var RCanSellMax:boolean; var RAmnt, RPrice:Double);override;

    procedure OnSaveState(AWriter:IDataWriter);override;
    procedure onloadState(AReader:IDataReader);override;
    procedure OnSendData(AWriter:IDataWriter);override;
    procedure OnWatch(AWriter:IDataWriter);override;

    function CanCancelOrder(const AID:string;const AType:Boolean;const AAmnt,APrice:Double;const ADate:TDateTime):boolean;override;

    procedure OnBuyCompleted(const AAmnt,APrice:double;var RIncome1,RIncome2:Double);override;
    procedure OnSellCompleted(const AAmnt,APrice:double;var RIncome1,RIncome2:Double);override;
    procedure OnProfit(var RIncome1, RIncome2:Double);override;

    procedure OnStart;override;
    procedure OnStop;override;
    procedure OnPause;override;
    procedure OnResume;override;
  end;

implementation

uses Bot_Vars, Bot_Log, Bot_Funcs, Bot_Remote,Bot_Pairs,Bot_Charts,Bot_Orderbook,Bot_Orders,Bot_Parties,Bot_DateTime; //это по потребности


procedure TTradeStrategy.OnCreate();
var i:integer;
begin
  // тут описываем  инициализацию переменных при загрузке бота, например
  myVar1:=GetPairsCnt();

 myVar2:=GetCandleOpen(0);
end;


procedure TTradeStrategy.OnDestroy();
begin
  // выполняется при остановке бота
end;


procedure TTradeStrategy.OnSendData(AWriter:IDataWriter);
begin
  // тут описываем передачу данных другим ботам, например
  AWriter.WriteDouble('buy',currTicker.buy);
end;

procedure TTradeStrategy.CanBuy(var RCanBuy:boolean; var RAmnt, RPrice:Double);
begin
  // тут описываем правила покупки ботом
  //Пример : для покупки 50 единиц валюты по 1.5  
   RCanBuy:=True; RAmnt:=50; RPrice:=1.5;
end;

procedure TTradeStrategy.CanSell(var RCanSell:boolean; var RAmnt, RPrice:Double);
begin
  // тут описываем правила продажи ботом от минимальной к максимальной партии
  //Пример : для продажи 50 единиц валюты по 1.5  
  RCanSell:=True; RAmnt:=50; RPrice:=1.5;
end;

procedure TTradeStrategy.CanSellMax(var RCanSellMax:boolean; var RAmnt, RPrice:Double);
begin
  // тут описываем правила продажи ботом от максимальной к минимальной  партии
  //Пример : для продажи 50 единиц валюты по 1.5  
  RCanSellMax:=True; RAmnt:=50; RPrice:=1.5;
end;

procedure TTradeStrategy.OnSaveState(AWriter:IDataWriter);
begin
  // сохранение состояния при остановке бота, например
  AWriter.WriteDouble('myVar2',myVar2);
end;

procedure TTradeStrategy.onloadState(AReader:IDataReader);
begin
  // восстановление состояния при старте бота, например
  myVar2:=AReader.ReadDouble('myVar2',0.25);
end;

procedure TTradeStrategy.OnWatch(AWriter:IDataWriter);
begin
  // для просмотра значений переменных в окне бота, например
  AWriter.WriteInt('myVar1',myVar1);
  AWriter.WriteDouble('myVar2',myVar2);
  AWriter.WriteDouble('myVars',myVar1+myVar2);
  //смотрим данные другого бота
  //AWriter.WriteDouble('ltc/btc buy',ReadBotDouble('LTCBTC','buy'));
 // AWriter.WriteDouble('ltc/btc sell',ReadBotDouble('LTCBTC','sell'));
end;

function TTradeStrategy.CanCancelOrder(const AID:string;const AType:Boolean;const AAmnt,APrice:Double;const ADate:TDateTime):boolean;override;
begin
  //вызывается для каждого открытого ордера 
  //номер - AID, кол-во AAmnt, цена APrice, дата ордера ADate, тип AType(true=buy, false=sell)
  //по умолчанию: result=true, т.е. ордер сразу отменится 
  //если нужно отменить этот ордер - то вернуть result:=true;
 result:=false; // если убрать эту строку или установить в true то ордера будут автоматически удалятся как в версии LITE
end;

procedure TTradeStrategy.OnBuyCompleted(const AAmnt,
  APrice: double; var RIncome1,RIncome2:Double);
begin
  //вызывается, когда зафиксирована покупка
  //возвращаемые переменные RIncome1,2 - фин. результат операции по обеим валютам пары
  //по умолчанию: RIncome1,2 = 0.000
  //RIncome1:=0.000;
  //RIncome2:=0.000;
end;

procedure TTradeStrategy.OnSellCompleted(const AAmnt,
  APrice: double; var RIncome1,RIncome2:Double);
begin
  //вызывается, когда зафиксирована продажа
  //возвращаемые переменные RIncome1,2 - фин. результат операции по обеим валютам пары
  //по умолчанию: RIncome1=0.000, RIncome2 - расчетная
  //RIncome1:=0.000;
  //RIncome2:=0.000;
end;

procedure TTradeStrategy.OnProfit(var RIncome1, RIncome2: Double);
begin
  //вызывается для отображения фин. результата
  //возвращаемые переменные RIncome1,2 - фин. результат по обеим валютам пары
  //по умолчанию: суммы соотв. Income1, Income2 по строкам торговли
  //RIncome1:=0.000;
  //RIncome2:=0.000;
end;

procedure TTradeStrategy.OnStart();
begin
  //вызывается при начале работы (start)
end;

procedure TTradeStrategy.OnStop();
begin
  //вызывается при остановке работы (stop)
  //например, здесь можно отменить все ордера: cancelAllOrders:=true;
end;

procedure TTradeStrategy.OnPause();
begin
  //вызывается при приостановке работы (pause)
end;

procedure TTradeStrategy.OnResume();
begin
  //вызывается при продолжении работы (resume)
end;

end.



0 комментариев