# trans2quik Library for importing transactions, entering orders into the QUIK ARQA Technologies trading system via the API. #### Example of use Cargo.toml ``` trans2quik = "1.0.0" tracing = "0.1.40" tracing-subscriber = "0.3.18" lazy_static = "1.5.0" ``` main.rs ``` use lazy_static::lazy_static; use std::error::Error; use std::sync::{Arc, Condvar, Mutex}; use std::time::Duration; use tracing::info; use tracing_subscriber; use trans2quik; lazy_static! { static ref ORDER_CALLBACK_RECEIVED: Arc<(Mutex, Condvar)> = Arc::new((Mutex::new(false), Condvar::new())); static ref TRADE_CALLBACK_RECEIVED: Arc<(Mutex, Condvar)> = Arc::new((Mutex::new(false), Condvar::new())); static ref TRANSACTION_CALLBACK_RECEIVED: Arc<(Mutex, Condvar)> = Arc::new((Mutex::new(false), Condvar::new())); } fn main() -> Result<(), Box> { tracing_subscriber::fmt::init(); let path = r"c:\QUIK Junior\trans2quik.dll"; let terminal = quik::Terminal::new(path)?; terminal.connect()?; terminal.is_dll_connected()?; terminal.is_quik_connected()?; terminal.set_connection_status_callback()?; terminal.set_transactions_reply_callback()?; let class_code = "QJSIM"; let sec_code = "LKOH"; terminal.subscribe_orders(class_code, sec_code)?; terminal.subscribe_trades(class_code, sec_code)?; terminal.start_orders(); terminal.start_trades(); let transaction_str = "ACCOUNT=NL0011100043; CLIENT_CODE=10677; TYPE=L; TRANS_ID=1; CLASSCODE=QJSIM; SECCODE=LKOH; ACTION=NEW_ORDER; OPERATION=B; PRICE=7103,5; QUANTITY=1;"; terminal.send_async_transaction(transaction_str)?; // Waiting for callback or timeout { let order_received = { let (lock, cvar) = ORDER_CALLBACK_RECEIVED.as_ref(); let received = lock.lock().unwrap(); let timeout = Duration::from_secs(10); let (received, timeout_result) = cvar .wait_timeout_while(received, timeout, |received| !*received) .unwrap(); if timeout_result.timed_out() { info!("Timed out waiting for order_status_callback"); } *received }; let trade_received = { let (lock, cvar) = TRADE_CALLBACK_RECEIVED.as_ref(); let received = lock.lock().unwrap(); let timeout = Duration::from_secs(10); let (received, timeout_result) = cvar .wait_timeout_while(received, timeout, |received| !*received) .unwrap(); if timeout_result.timed_out() { info!("Timed out waiting for trade_status_callback"); } *received }; let transaction_received = { let (lock, cvar) = TRANSACTION_CALLBACK_RECEIVED.as_ref(); let received = lock.lock().unwrap(); let timeout = Duration::from_secs(10); let (received, timeout_result) = cvar .wait_timeout_while(received, timeout, |received| !*received) .unwrap(); if timeout_result.timed_out() { info!("Timed out waiting for transaction_reply_callback"); } *received }; if !order_received && !trade_received && !transaction_received { info!("Did not receive all expected callbacks"); } } terminal.unsubscribe_orders()?; terminal.unsubscribe_trades()?; terminal.disconnect()?; Ok(()) } ```