Germany | Finland | Saint Petersburg | Drive

Выставление заявок из AmiBroker

Опубликовано в AmiSharp

Как выставить заявку из Амиброкера в 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 в случае ошибки. Вся дополнительная информация об ошибке также доступна. Аналогичным образом будет выглядеть функция, выставляющая условные стоп-заявки.

Добавить комментарий


Майнинг в браузере