Стратегия "Profit "для бота 1b bot PRO от пользователя Valeriy2010

Дата: 04.09.2014
ОБСУЖДАЕМ СТРАТЕГИЮ НА ОФИЦИАЛЬНОМ ФОРУМЕ 1B BOT


Файлы правил стратегии

ver 1 от 04.09.2014 ProfitStrategy.pas [5,55 Kb] (cкачиваний: 247)

Описание

Valeriy2010:
Никаких зависших партий.
Стратегия работает только в ПЛЮС.
Используйте правила, включенные по умолчанию.
Не удивляйтесь, что вторая колонка не активна.
При желании можете активировать вторую колонку.
При желании можете активировать не активные правила в Третьей колонке - хуже не будет.
При долгом сливе можете активировать Дельту на 12 часов.
Всем хорошего профита


Trade log

Стратегия "Profit "для бота 1b bot PRO от пользователя Valeriy2010




Кошельки для доната (благодарности за стратегию по желанию):

BTC : 1H83yM99e9MtYqGKSaoboibjwPtJ5CvZtP
LTC : LccMPWAfT9UP7RXyuqdXKYb7LKD3aA1CJv

Контакты
e-mail: Ссылка на почту

Исходный код стратегии :


// Стратегия ПРОФИТ от Valeriy2010 версия для PRO 
// Правила продажи выбираются в процедурах CanSell и CanSellMAX
// использование алгоритма Sell или SellMax выбирается в OnCreate() установкой переменной SellMaxORSell (true - продаем через Sell MAX, false - через SELL)

unit code;

interface

uses Bot_RW, BaseStrategy; 

type
TTradeStrategy = class(TBaseStrategy)
  public
     SellMaxORSell : Boolean;

     procedure OnCreate;override;
     procedure CanBuy(var RCanBuy:boolean; var RAmnt, RPrice:Double);override;
     procedure CanSellMax(var RCanSellMax:boolean; var RAmnt, RPrice:Double);override;
     procedure OnWatch(AWriter:IDataWriter);override;
     procedure CanSell(var RCanSell:boolean; var RAmnt, RPrice:Double);override;
   
    function CanCancelOrder(const AID:string;const AType:Boolean;const AAmnt,APrice:Double;const ADate:TDateTime):boolean;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();
begin
 
// Выбираем как будем продавать через SellMAx или Sell (true - продаем через Sell MAX, false - через SELL)
SellMaxORSell :=true;
end;


procedure TTradeStrategy.CanBuy(var RCanBuy:boolean; var RAmnt, RPrice:Double);
begin
if ((currTicker.buy<botInfo.minParty.pPrice/1.005) and  (volStat.sAvg.b1m.delta>80) and (volStat.sAvg.b5m.delta>80) and (volStat.sAvg.b15m.delta>50))
or
((botInfo.c1Amnt<0.011) and (volStat.sAvg.b5m.delta>80)) 
and (minutesbetween(now,botInfo.lastBuyTime)>2) // тут сразу оба правила в одном условии
then
   begin
    RCanBuy:=true;                   // При установке этой переменной метода CanBuy в TRUE  бот выставляет ордер на количество RAmnt по цене RPrice
    RAmnt:=botInfo.c2Amnt/10/currTicker.buy;               // определяем количество в ордере
    RPrice:=currTicker.buy;                     //определяем цену покупки ордера
   end;  
end;

procedure TTradeStrategy.OnWatch(AWriter:IDataWriter);
begin
  // для просмотра значений переменных в окне бота, например
  try
  AWriter.WriteBool('Buy rule',((currTicker.buy<botInfo.minParty.pPrice/1.005) and  (volStat.sAvg.b1m.delta>80) and (volStat.sAvg.b5m.delta>80) and (volStat.sAvg.b15m.delta>50))
or
((botInfo.c1Amnt<0.011) and (volStat.sAvg.b5m.delta>80)) );
  AWriter.WriteBool('Sell MAX',(currTicker.sell/1.01)>=(botInfo.c1Cost/botInfo.c1Amnt) );
  except
  end;
  
end;

procedure TTradeStrategy.CanSell(var RCanSell:boolean; var RAmnt, RPrice:Double);
var FirstRule, SecondRule : Boolean; //Создаем переменные для первого и второго правил
begin
if not SellMaxORSell then
begin
  FirstRule := ((currTicker.sell>GetProfitPrice(botInfo.minParty.pPrice,1)));
 //SecondRule := (volStat.sAvg.b30s.delta<-98) and(volStat.sAvg.b1m.delta<-80);  // Расскомментируем эту строку если нужно использовать это правило
 SecondRule := true; // закомментируем эту строку есди верхнее правило используется

  if FirstRule and SecondRule  then
   begin
       RCanSell:=true;      // При установке этой переменной метода RCanSellMax в TRUE  бот выставляет ордер на количество RAmnt по цене RPrice
       RAmnt:=botInfo.c1Amnt;  // Продаем все ордером
       RPrice:=currTicker.sell;      //определяем цену продажи ордера
   end;
 end;
end;

procedure TTradeStrategy.CanSellMax(var RCanSellMax:boolean; var RAmnt, RPrice:Double);
var FirstRule, SecondRule : Boolean; //Создаем переменные для первого и второго правил

begin
if  SellMaxORSell then
  begin
  try 
	
FirstRule :=  (currTicker.sell/1.01)>=(botInfo.c1Cost/botInfo.c1Amnt);
//SecondRule := (volStat.sAvg.b30s.delta<-98) and(volStat.sAvg.b1m.delta<-80);  // Расскомментируем эту строку если нужно использовать это правило
SecondRule := true; // закомментируем эту строку если верхнее правило используется

  if FirstRule and SecondRule  then
   begin
       RCanSellMax:=true;      // При установке этой переменной метода RCanSellMax в TRUE  бот выставляет ордер на количество RAmnt по цене RPrice
       RAmnt:=botInfo.c1Amnt;  // Продаем все ордером
       RPrice:=currTicker.sell;      //определяем цену продажи ордера
   end;
    
	except
	end;
end;
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;
end;




end.



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