Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Main;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- ExtCtrls, StdCtrls, ComObj;
- type
- TForm1 = class(TForm)
- Label1: TLabel;
- edUserName: TEdit;
- Label2: TLabel;
- edPassWord: TEdit;
- Label3: TLabel;
- cbConnection: TComboBox;
- Label4: TLabel;
- edURL: TEdit;
- btnLogin: TButton;
- btnLogout: TButton;
- lblCoreState: TLabel;
- GroupBox1: TGroupBox;
- clrConnection: TShape;
- GroupBox2: TGroupBox;
- Label5: TLabel;
- edAccount: TEdit;
- Label6: TLabel;
- edCurrencyPair: TEdit;
- Label7: TLabel;
- edLots: TEdit;
- edRate: TEdit;
- Label8: TLabel;
- Label9: TLabel;
- Label10: TLabel;
- edOrderNumberGenerated: TEdit;
- edDialersIntervention: TEdit;
- btnBuy: TButton;
- btnSell: TButton;
- Timer1: TTimer;
- procedure FormCreate(Sender: TObject);
- procedure btnLoginClick(Sender: TObject);
- procedure btnLogoutClick(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- procedure btnSellClick(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure btnBuyClick(Sender: TObject);
- private
- { Private declarations }
- //if tradedesk logged then flag bLogged = true, else bLogged = false;
- bLogged: Boolean;
- //if core initiating then flag bCoreInitiated = true, else bCoreInitiated = false;
- bCoreInitiated: Boolean;
- public
- { Public declarations }
- //initiating core
- function initCore : Boolean;
- //set status label text
- procedure setCoreStateText(txt : String);
- //enable/disable component
- procedure setComponentStatus;
- // if vBuy = true, then Buy Entry, else Sell Entry
- procedure EntryOrders(bBuy: Boolean);
- //get currency pair rate
- function getRate(cur : String; Buy : Boolean; var QuoteID : String) : Double;
- end;
- var
- Form1: TForm1;
- oCore: OleVariant;
- oTradeDesk: OleVariant;
- implementation
- {$R *.dfm}
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- CoInitializeEx(nil,0);
- Timer1.Enabled := True;
- setComponentStatus;
- bCoreInitiated := initCore();
- end;
- procedure TForm1.btnLoginClick(Sender: TObject);
- begin
- setCoreStateText('Connecting to the server');
- //Create new trade desk
- oTradeDesk := oCore.CreateTradeDesk('trader');
- //login
- try
- oTradeDesk.Login(edUserName.Text, edPassWord.Text, edURL.Text,cbConnection.Text);
- bLogged := True;
- setCoreStateText('Connection succeeded');
- setComponentStatus;
- except
- on e:exception do
- begin
- MessageBox(Handle, PAnsiChar(e.message), 'Entry Orders', MB_ICONERROR+MB_OK);
- setCoreStateText('Login failed');
- Exit;
- end;
- end;
- end;
- function TForm1.initCore: Boolean;
- begin
- // Initiating CORE
- Result := False;
- setCoreStateText('Initiating CORE...');
- try
- //Create main object
- oCore := CreateOleObject('Order2Go.Core');
- setCoreStateText('CORE initiated');
- //if object created succesful then result = true
- Result := True;
- except
- on e:exception do
- begin
- setCoreStateText('CORE not initiated');
- //if object not created succesful then result = false
- Result :=False;
- end;
- end;
- end;
- procedure TForm1.setCoreStateText(txt: String);
- begin
- // set text to Status label
- lblCoreState.Caption := txt;
- Application.ProcessMessages;
- end;
- procedure TForm1.setComponentStatus;
- begin
- btnLogin.Enabled := not bLogged;
- edUserName.Enabled := not bLogged;
- edPassWord.Enabled := not bLogged;
- cbConnection.Enabled := not bLogged;
- edURL.Enabled := not bLogged;
- btnLogout.Enabled := bLogged;
- btnBuy.Enabled := bLogged;
- btnSell.Enabled := bLogged;
- edAccount.Enabled := bLogged;
- edCurrencyPair.Enabled := bLogged;
- edRate.Enabled := bLogged;
- edLots.Enabled := bLogged;
- if bLogged then
- clrConnection.Brush.Color := clLime
- else
- clrConnection.Brush.Color := clRed;
- end;
- procedure TForm1.btnLogoutClick(Sender: TObject);
- begin
- oTradeDesk.Logout;
- VarClear(oTradeDesk);
- bLogged := False;
- setComponentStatus;
- setCoreStateText('Core initiated');
- end;
- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- if Not VarIsEmpty(oTradeDesk) then
- bLogged := oTradeDesk.isLoggedIn;
- setComponentStatus;
- Application.ProcessMessages;
- end;
- procedure TForm1.EntryOrders(bBuy : Boolean);
- var
- dRate : Double;
- sQuoteID : String;
- iLots : Integer;
- //out parameters
- vDialerInter : Variant;
- vOrderNumber : Variant;
- begin
- //check "Account" field
- if edAccount.Text = '' then begin
- MessageBox(Handle, 'Please fill "Account" field!', 'Entry Orders', MB_ICONERROR+MB_OK);
- edAccount.SetFocus;
- Exit;
- end;
- //check "Currency Pair" field
- if edCurrencyPair.Text = '' then begin
- MessageBox(Handle, 'Please fill "Currency Pair" field!', 'Entry Orders', MB_ICONERROR+MB_OK);
- edCurrencyPair.SetFocus;
- Exit;
- end;
- //check "Lots" field
- if edLots.Text = '' then
- begin
- MessageBox(Handle, 'Please fill "Lots" field!', 'Entry Orders', MB_ICONERROR+MB_OK);
- edLots.SetFocus;
- Exit;
- end
- else
- try
- iLots := StrToInt(edLots.Text);
- except
- on e : exception do
- begin
- MessageBox(handle, 'Lots must be non-epmty integering number', 'Entry Orders', MB_ICONERROR+MB_OK);
- edLots.SetFocus;
- Exit;
- end;
- end;
- //check "Rate" field
- if edRate.Text = '' then
- begin
- MessageBox(Handle, 'Please fill "Rate" field!', 'Entry Orders', MB_ICONERROR+MB_OK);
- edLots.SetFocus;
- Exit;
- end
- else
- try
- dRate := StrToFloat(edRate.Text);
- except
- on e : exception do
- begin
- MessageBox(handle, 'Rate must be non-epmty floating number', 'Entry Orders', MB_ICONERROR+MB_OK);
- edRate.SetFocus;
- Exit;
- end;
- end;
- try
- oTradeDesk.CreateEntryOrder(edAccount.Text, edCurrencyPair.Text, bBuy,
- iLots, dRate, 0, 0, 0, vOrderNumber,
- vDialerInter);
- edOrderNumberGenerated.Text := VarToStr(vOrderNumber);
- edDialersIntervention.Text := VarToStr(vDialerInter);
- except
- on e : exception do
- MessageBox(Handle, PAnsiChar(e.Message), 'Entry Orders', MB_ICONERROR+MB_OK);
- end;
- Application.ProcessMessages;
- end;
- procedure TForm1.btnSellClick(Sender: TObject);
- begin
- EntryOrders(False);
- end;
- function TForm1.getRate(cur: String; Buy: Boolean; var QuoteID: String): Double;
- var
- oOffers : OleVariant;
- oRows : OleVariant;
- i : Integer;
- Count_ : Integer;
- begin
- Result := -1.0;
- try
- oOffers := oTradeDesk.TablesManager.FindTable('Offers');
- except
- on e : exception do
- begin
- MessageBox(Handle, 'Cannot access to "Offers" tables', 'Entry Orders', MB_ICONERROR+MB_OK);
- Exit;
- end;
- end;
- oRows := oOffers.Rows;
- Count_ := oRows.Count;
- for i := 1 to Count_ do
- begin
- if oRows.Item(i).Instrument = cur then begin
- if Buy then
- Result := oRows.Item(i).Ask
- else
- Result := oRows.Item(i).Bid;
- QuoteID := oRows.Item(i).QuoteID;
- end;
- end;
- end;
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- if not VarIsClear(oTradeDesk) then begin
- if oTradeDesk.IsLoggedIn then
- oTradeDesk.Logout;
- VarClear(oTradeDesk);
- end;
- end;
- procedure TForm1.btnBuyClick(Sender: TObject);
- begin
- EntryOrders(True);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement