Заявки в AmiSharp из внешних программ
Выставления заявки в AmiSharp из универсального языка программирования. Для примера взят язык autoit. То же самое можно исполнять из любого языка программирования, поддерживающего COM-технологию.
#include-Once
; Выставление ордера
; Если TransactionPrice == 0 - исполняется заявка "по рынку"
; Неисполненное количество снимается
; Возвращает массив с ответом торговой системы
Func AmiSharp_Send_Transaction($TransactionOper, $TransactionPrice, $TransactionSize, $ClassCode, $SecCode, $Account,$ClientCode, $TTP_Table, $dde_ttp_seccode="CODE", $dde_ttp_classcode="CLASS_CODE", $dde_ttp_step="SEC_PRICE_STEP")
local $result,$Oper,$str
if $ClassCode == "" Then ; Устанавливаем код класса
$ClassCode = AmiSharp_GetClassCode($TTP_Table, $SecCode, $m4_dde_ttp_seccode, $dde_ttp_classcode)
EndIf
if $TransactionPrice <> 0 Then ; Лимитированный ордер: округляем до шага цены
$TransactionPrice = Round_To_Step($TransactionPrice, Number_Regional(AmiSharp_GetParameter($dde_ttp_step, $TTP_Table, $ClassCode, $SecCode, $dde_ttp_classcode, $dde_ttp_seccode)))
EndIf
$TransactionOper = StringUpper($TransactionOper)
Select
case $TransactionOper = "SELL" or $TransactionOper = "SHORT"
$Oper = "S"
if $TransactionPrice = 0 AND $ClassCode = "SPBFUT" Then
$TransactionPrice = AmiSharp_MinPrice($TTP_Table,$ClassCode,$Seccode)
EndIf
case $TransactionOper = "BUY" or $TransactionOper = "COVER"
$Oper = "B"
if $TransactionPrice = 0 AND $ClassCode = "SPBFUT" Then
$TransactionPrice = AmiSharp_MaxPrice($TTP_Table,$ClassCode,$Seccode)
EndIf
EndSelect
$str = "ACTION=NEW_ORDER;"
$str &= "OPERATION=" & $Oper & ";"
$str &= "TRANS_ID=" & $AmiSharp.Generate_TransID() & ";"
$str &= "SECCODE=" & $Seccode & ";"
$str &= "QUANTITY=" & $TransactionSize & ";"
$str &= "CLASSCODE=" & $Classcode & ";"
$str &= "ACCOUNT=" & $Account & ";"
If $ClassCode == "SPBFUT" Then
$str &= "TYPE=L;"
$str &= "PRICE=" & $TransactionPrice & ";"
;~ $str &= "EXECUTION_CONDITION=KILL_BALANCE;"
Else
$str &= "TYPE=M;"
$str &= "PRICE=0;"
EndIf
If $ClientCode <> "" Then
$str &= "CLIENT_CODE=" & $ClientCode & ";"
EndIf
$result = StringSplit($AmiSharp.QuikSendSyncTransaction($str),",")
_ArrayAdd($result,$str)
$result[0] += 1
Return $result
EndFunc
Используются несколько дополнительных функций с красноречивыми названиями. Написать их не составит большого труда.