Transaq
СБО "Transaq" => Подсистема ATF => Topic started by: Russu_S on 08.08.2016, 19:56:19
-
Друзья помогите пожалуйста, нужен скрипт, к авто выставлению СТОПЛОСС заданному в скрипте в пунктах, нашел в интернете вот такое, не могу понять что он делает отсекает не пойми как, не могу понять, есть что-то более нормальное для ФЮЧЕРСОВ..
ВОТ ЧТО НАШЕЛ И НЕ МОГУ ПОНЯТЬ..
#line 0 solid blue
extern Stop=5;
extern Take=5;
extern "string" s="В market ставим 1, если торгуем акции, и 2, если фьючерсы";
extern market=1;
var DeleteActive =1;
static pos;
var security;
static predLast=0;
static predPos=0;
static enterPrice=0;
static closeHalf=0;
function setBuyTrailing(var size,var price)
{
var stop = new_object("hash");
stop["operation"] = OP_BUY;
stop["tp_activationprice"] = price;
stop["tp_quantity"] = size;
stop["tp_correction"] = "0%";
trade_action::transactMultiple(stop);
}
function setSellTrailing(var size,var price)
{
var stop = new_object("hash");
stop["operation"] = OP_SELL;
stop["tp_activationprice"] = price;
stop["tp_quantity"] = size;
stop["tp_correction"] = "0%";
trade_action::transactMultiple(stop);
}
function setBuyStop(var size,var price)
{
var stop = new_object("hash");
stop["operation"] = OP_BUY;
stop["sl_activationprice"] = price;
stop["sl_orderprice"]=price;
stop["sl_quantity"] = size;
stop["sl_correction"] = "0%";
stop["usecredit"] = true;
trade_action::transactMultiple(stop);
}
function setSellStop(var size,var price)
{
var stop = new_object("hash");
stop["operation"] = OP_SELL;
stop["sl_activationprice"] = price;
stop["sl_orderprice"]=price;
stop["sl_quantity"] = size;
stop["sl_correction"] = "0%";
stop["usecredit"] = true;
trade_action::transactMultiple(stop);
}
function setBuyStopTrailing(var size, var offset,var price,var start,var stop,var slip)
{
var stopLevel= price+stop;
var stopLevelOrder= price+stop+slip;
var guardSpread=slip+0;
var stop = new_object("hash");
stop["operation"] = OP_BUY;
stop["tp_activationprice"] =price-start;
stop["tp_quantity"] = size;
stop["tp_correction"] = offset;
stop["tp_guardspread"]=guardSpread;
stop["sl_activationprice"] = stopLevel;
//stop["sl_orderprice"] = stopLevelOrder;
stop["sl_quantity"] = size;
stop["usecredit"] = true;
trade_action::transactMultiple(stop);
}
function setSellStopTrailing(var size, var offset,var price,var start,var stop,var slip)
{
var guardSpread=slip+0;
var stopLevel= price-stop;
var stopLevelOrder= price-stop-slip;
var stop = new_object("hash");
stop["operation"] = OP_SELL;
stop["tp_activationprice"] = price+start;
stop["tp_quantity"] = size;
stop["tp_correction"] = offset;
stop["tp_guardspread"]=guardSpread;
stop["sl_activationprice"] = stopLevel;
// stop["sl_orderprice"] = stopLevelOrder;
stop["sl_quantity"] = size;
trade_action::transactMultiple(stop);
}
function Buy(var message, var orderSize)
{
signal::alert(message);
var order = new_object("hash");
order["quantity"] =orderSize;
order["operation"] = OP_BUY;
trade_action::transact(order);
}
function Sell(var message,var orderSize)
{
signal::alert(message);
var order = new_object("hash");
order["quantity"] =orderSize;
order["operation"] = OP_SELL;
trade_action::transact(order);
}
function DeleteAllStopOrders()
{
signal::outputMultiple("Удаляем все стопы");
var arr= getActiveStopOrderIDs() ;
if (arr.size()!=0)
{
var i=0;
while (i < arr.size())
{
trade_action::cancelStopOrder(arr);
i=i+1;
}
}
}
function init()
{
setTimer("f", 1000, TIMER_PERIODICALLY );
pos = new_object("hash");
security = new_object("hash");
var curPos=0;
if (market==1)
{
curPos=getSecBalance();
}
if (market==2)
{
requestFORTSPositions(getClient());
curPos=pos["totalnet"];
if (pos.size()==1)
{
curPos=0;
}
}
predPos=curPos;
DeleteAllStopOrders();
}
function onEnvEvent(var eventname)
{
if (eventname == "CLIENT_HOLDINGS")
{
var info=getSecInfo();
pos = getFORTSPosition(getClient(), info["secid"]);
}
}
function f()
{
if (isHistoryCalculated())
{
var curPos=0;
if (market==1)
{
curPos=getSecBalance();
}
if (market==2)
{
requestFORTSPositions(getClient());
curPos=pos["totalnet"];
if (pos.size()==1)
{
curPos=0;
}
}
if (curPos==0&&predPos!=0)
{
signal::outputMultiple("Позиция закрыта. ");
if (DeleteActive==1)
{
DeleteAllStopOrders();
}
}
if (abs(curPos)!=abs(predPos)&&curPos!=0)
{
DeleteAllStopOrders();
signal::outputMultiple("Позиция открыта.Цена "+enterPrice);
if (curPos>0&&enterPrice!=0)
{
signal::outputMultiple("Ставим стоп и тейк на продажу");
setSellStopTrailing(curPos,0,enterPrice,Take,Stop,0);
}
if (curPos<0&&enterPrice!=0)
{
signal::outputMultiple("Ставим стоп и тейк на покупку");
setBuyStopTrailing(-curPos,0,enterPrice,Take,Stop,0);
}
}
predPos=curPos;
}
}
function onClientTrade(var id)
{
var trade = getTrade(id);
enterPrice=trade["price"]+0;
}
function onATFOrderErr(var str)
{
signal::outputMultiple(str);
}
-
Рабочий скрипт поменяйте строчку function onATFOrderErr(var str) на function onOrderErr(var str)