Advertisement
Guest User

zzzzoooo

a guest
Jul 6th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.16 KB | None | 0 0
  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. ExtCtrls, StdCtrls, ComObj;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Label1: TLabel;
  12. edUserName: TEdit;
  13. Label2: TLabel;
  14. edPassWord: TEdit;
  15. Label3: TLabel;
  16. cbConnection: TComboBox;
  17. Label4: TLabel;
  18. edURL: TEdit;
  19. btnLogin: TButton;
  20. btnLogout: TButton;
  21. lblCoreState: TLabel;
  22. GroupBox1: TGroupBox;
  23. clrConnection: TShape;
  24. GroupBox2: TGroupBox;
  25. Label5: TLabel;
  26. edAccount: TEdit;
  27. Label6: TLabel;
  28. edCurrencyPair: TEdit;
  29. Label7: TLabel;
  30. edLots: TEdit;
  31. edRate: TEdit;
  32. Label8: TLabel;
  33. Label9: TLabel;
  34. Label10: TLabel;
  35. edOrderNumberGenerated: TEdit;
  36. edDialersIntervention: TEdit;
  37. btnBuy: TButton;
  38. btnSell: TButton;
  39. Timer1: TTimer;
  40. procedure FormCreate(Sender: TObject);
  41. procedure btnLoginClick(Sender: TObject);
  42. procedure btnLogoutClick(Sender: TObject);
  43. procedure Timer1Timer(Sender: TObject);
  44. procedure btnSellClick(Sender: TObject);
  45. procedure FormDestroy(Sender: TObject);
  46. procedure btnBuyClick(Sender: TObject);
  47. private
  48. { Private declarations }
  49. //if tradedesk logged then flag bLogged = true, else bLogged = false;
  50. bLogged: Boolean;
  51. //if core initiating then flag bCoreInitiated = true, else bCoreInitiated = false;
  52. bCoreInitiated: Boolean;
  53. public
  54. { Public declarations }
  55. //initiating core
  56. function initCore : Boolean;
  57. //set status label text
  58. procedure setCoreStateText(txt : String);
  59. //enable/disable component
  60. procedure setComponentStatus;
  61. // if vBuy = true, then Buy Entry, else Sell Entry
  62. procedure EntryOrders(bBuy: Boolean);
  63. //get currency pair rate
  64. function getRate(cur : String; Buy : Boolean; var QuoteID : String) : Double;
  65. end;
  66.  
  67. var
  68. Form1: TForm1;
  69. oCore: OleVariant;
  70. oTradeDesk: OleVariant;
  71.  
  72. implementation
  73.  
  74. {$R *.dfm}
  75.  
  76. procedure TForm1.FormCreate(Sender: TObject);
  77. begin
  78. CoInitializeEx(nil,0);
  79. Timer1.Enabled := True;
  80. setComponentStatus;
  81. bCoreInitiated := initCore();
  82. end;
  83.  
  84. procedure TForm1.btnLoginClick(Sender: TObject);
  85. begin
  86. setCoreStateText('Connecting to the server');
  87. //Create new trade desk
  88. oTradeDesk := oCore.CreateTradeDesk('trader');
  89. //login
  90. try
  91. oTradeDesk.Login(edUserName.Text, edPassWord.Text, edURL.Text,cbConnection.Text);
  92. bLogged := True;
  93. setCoreStateText('Connection succeeded');
  94. setComponentStatus;
  95. except
  96. on e:exception do
  97. begin
  98. MessageBox(Handle, PAnsiChar(e.message), 'Entry Orders', MB_ICONERROR+MB_OK);
  99. setCoreStateText('Login failed');
  100. Exit;
  101. end;
  102. end;
  103. end;
  104.  
  105. function TForm1.initCore: Boolean;
  106. begin
  107. // Initiating CORE
  108. Result := False;
  109. setCoreStateText('Initiating CORE...');
  110. try
  111. //Create main object
  112. oCore := CreateOleObject('Order2Go.Core');
  113. setCoreStateText('CORE initiated');
  114. //if object created succesful then result = true
  115. Result := True;
  116. except
  117. on e:exception do
  118. begin
  119. setCoreStateText('CORE not initiated');
  120. //if object not created succesful then result = false
  121. Result :=False;
  122. end;
  123. end;
  124. end;
  125.  
  126. procedure TForm1.setCoreStateText(txt: String);
  127. begin
  128. // set text to Status label
  129. lblCoreState.Caption := txt;
  130. Application.ProcessMessages;
  131. end;
  132.  
  133. procedure TForm1.setComponentStatus;
  134. begin
  135. btnLogin.Enabled := not bLogged;
  136. edUserName.Enabled := not bLogged;
  137. edPassWord.Enabled := not bLogged;
  138. cbConnection.Enabled := not bLogged;
  139. edURL.Enabled := not bLogged;
  140. btnLogout.Enabled := bLogged;
  141. btnBuy.Enabled := bLogged;
  142. btnSell.Enabled := bLogged;
  143. edAccount.Enabled := bLogged;
  144. edCurrencyPair.Enabled := bLogged;
  145. edRate.Enabled := bLogged;
  146. edLots.Enabled := bLogged;
  147. if bLogged then
  148. clrConnection.Brush.Color := clLime
  149. else
  150. clrConnection.Brush.Color := clRed;
  151. end;
  152.  
  153. procedure TForm1.btnLogoutClick(Sender: TObject);
  154. begin
  155. oTradeDesk.Logout;
  156. VarClear(oTradeDesk);
  157. bLogged := False;
  158. setComponentStatus;
  159. setCoreStateText('Core initiated');
  160. end;
  161.  
  162. procedure TForm1.Timer1Timer(Sender: TObject);
  163. begin
  164. if Not VarIsEmpty(oTradeDesk) then
  165. bLogged := oTradeDesk.isLoggedIn;
  166. setComponentStatus;
  167. Application.ProcessMessages;
  168. end;
  169.  
  170. procedure TForm1.EntryOrders(bBuy : Boolean);
  171. var
  172. dRate : Double;
  173. sQuoteID : String;
  174. iLots : Integer;
  175. //out parameters
  176. vDialerInter : Variant;
  177. vOrderNumber : Variant;
  178. begin
  179. //check "Account" field
  180. if edAccount.Text = '' then begin
  181. MessageBox(Handle, 'Please fill "Account" field!', 'Entry Orders', MB_ICONERROR+MB_OK);
  182. edAccount.SetFocus;
  183. Exit;
  184. end;
  185. //check "Currency Pair" field
  186. if edCurrencyPair.Text = '' then begin
  187. MessageBox(Handle, 'Please fill "Currency Pair" field!', 'Entry Orders', MB_ICONERROR+MB_OK);
  188. edCurrencyPair.SetFocus;
  189. Exit;
  190. end;
  191. //check "Lots" field
  192. if edLots.Text = '' then
  193. begin
  194. MessageBox(Handle, 'Please fill "Lots" field!', 'Entry Orders', MB_ICONERROR+MB_OK);
  195. edLots.SetFocus;
  196. Exit;
  197. end
  198. else
  199. try
  200. iLots := StrToInt(edLots.Text);
  201. except
  202. on e : exception do
  203. begin
  204. MessageBox(handle, 'Lots must be non-epmty integering number', 'Entry Orders', MB_ICONERROR+MB_OK);
  205. edLots.SetFocus;
  206. Exit;
  207. end;
  208. end;
  209. //check "Rate" field
  210. if edRate.Text = '' then
  211. begin
  212. MessageBox(Handle, 'Please fill "Rate" field!', 'Entry Orders', MB_ICONERROR+MB_OK);
  213. edLots.SetFocus;
  214. Exit;
  215. end
  216. else
  217. try
  218. dRate := StrToFloat(edRate.Text);
  219. except
  220. on e : exception do
  221. begin
  222. MessageBox(handle, 'Rate must be non-epmty floating number', 'Entry Orders', MB_ICONERROR+MB_OK);
  223. edRate.SetFocus;
  224. Exit;
  225. end;
  226. end;
  227. try
  228. oTradeDesk.CreateEntryOrder(edAccount.Text, edCurrencyPair.Text, bBuy,
  229. iLots, dRate, 0, 0, 0, vOrderNumber,
  230. vDialerInter);
  231. edOrderNumberGenerated.Text := VarToStr(vOrderNumber);
  232. edDialersIntervention.Text := VarToStr(vDialerInter);
  233. except
  234. on e : exception do
  235. MessageBox(Handle, PAnsiChar(e.Message), 'Entry Orders', MB_ICONERROR+MB_OK);
  236. end;
  237. Application.ProcessMessages;
  238. end;
  239.  
  240. procedure TForm1.btnSellClick(Sender: TObject);
  241. begin
  242. EntryOrders(False);
  243. end;
  244.  
  245. function TForm1.getRate(cur: String; Buy: Boolean; var QuoteID: String): Double;
  246. var
  247. oOffers : OleVariant;
  248. oRows : OleVariant;
  249. i : Integer;
  250. Count_ : Integer;
  251. begin
  252. Result := -1.0;
  253. try
  254. oOffers := oTradeDesk.TablesManager.FindTable('Offers');
  255. except
  256. on e : exception do
  257. begin
  258. MessageBox(Handle, 'Cannot access to "Offers" tables', 'Entry Orders', MB_ICONERROR+MB_OK);
  259. Exit;
  260. end;
  261. end;
  262. oRows := oOffers.Rows;
  263. Count_ := oRows.Count;
  264. for i := 1 to Count_ do
  265. begin
  266. if oRows.Item(i).Instrument = cur then begin
  267. if Buy then
  268. Result := oRows.Item(i).Ask
  269. else
  270. Result := oRows.Item(i).Bid;
  271. QuoteID := oRows.Item(i).QuoteID;
  272. end;
  273. end;
  274. end;
  275.  
  276. procedure TForm1.FormDestroy(Sender: TObject);
  277. begin
  278. if not VarIsClear(oTradeDesk) then begin
  279. if oTradeDesk.IsLoggedIn then
  280. oTradeDesk.Logout;
  281. VarClear(oTradeDesk);
  282. end;
  283. end;
  284.  
  285. procedure TForm1.btnBuyClick(Sender: TObject);
  286. begin
  287. EntryOrders(True);
  288. end;
  289.  
  290. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement