Выставление заявок из AmiBroker
Как выставить заявку из Амиброкера в QUIK?
В интернете много обсуждений этого вопроса. Все я видел - это выставление заявок через .tri файл. В какой-то мере это выход из положения, но для реальной торговли малопригодно. И исполняется с задержкой, и файл разрастается до неприличия в случае активной торговли, да и вообще...
AmiSharp умеет передавать транзакции в терминал QUIK, используя программный интерфейс последнего. Можно использовать как синхронный, так и асинхронный режимы. Вот так может выглядеть функция, отправляющая заявки из скрипта Amibroker в терминал:
function SetTransParameter(ParameterString,ParameterName,ParameterValue)
{
return ParameterString + ParameterName + "=" + ParameterValue + ";" ;
}
function Make_Order(ClassCode,SecCode,TransactionOper,TransactionPrice,TransactionSize)
{ local result,trans_result,Oper,str,step;
if (transactionSize <= 0)
error("Неправильное количество в заявке");
if (ClassCode == "")
ClassCode = Get_ClassCode(TTP_Table,SecCode,"CODE","CLASS_CODE");
str = SetTransParameter("", "ACTION", "NEW_ORDER");
str = SetTransParameter(str,"TRANS_ID", amisharp.Generate_TransID());
str = SetTransParameter(str,"SECCODE", Seccode);
str = SetTransParameter(str,"PRICE", TransactionPrice);
str = SetTransParameter(str,"QUANTITY", TransactionSize);
str = SetTransParameter(str,"OPERATION", StrToUpper(StrLeft(TransactionOper,1)));
str = SetTransParameter(str,"CLASSCODE", ClassCode);
str = SetTransParameter(str,"ACCOUNT", Account);
if (ClientCode != "")
str = SetTransParameter(str,"CLIENT_CODE", ClientCode);
if (TransactionPrice)
str = SetTransParameter(str,"TYPE", "L");
else
str = SetTransParameter(str,"TYPE", "M");
write_log("Транзакция: " + str);
trans_result = amisharp.QuikSendSyncTransaction(str);
write_log("Результат отправки транзакции: " + trans_result);
result = StrExtract( trans_result,1);
write_log("Номер ордера " + result);
if (result == "0")
error("Ошибка транзакции: " + trans_result);
return result;
}
Я взял кусок из первого попавшегося реального робота. В нём используются две функции - error (фиксация факта ошибки) и write_log (это просто запись строки в лог-файл). Ну и вспомогательная функция SetTransParameter(), необходимая лишь для повышения читабельности. Функция выставляет лимитированный ордер, если цена отлична от нуля и рыночный в ином случае. Возвращает номер установленной заявки либо 0 в случае ошибки. Вся дополнительная информация об ошибке также доступна. Аналогичным образом будет выглядеть функция, выставляющая условные стоп-заявки.