Two orders at two different time Expand / Collapse
Author
Message
Posted 8/19/2010 9:25:56 AM
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

Group: Forum Members
Last Login: 7/28/2011 3:11:04 AM
Posts: 26, Visits: 109
Hello, I would like to write a strategy for placing two orders at two different time.
For example I wolud like buy EUR/USD at 15.00.00 and then at 15.02.00.
Below my strategy, but it doesn't work....if someone can help me...thanks.

Tanti saluti dall' Italia,

Massimo



const
StrategyName = 'TimeStrategy 01';

var
History: TCandleHistory;
Account: TAccount;
Amount, Point: Double;
Stop, Limit, TraderRange: Integer;
LastTime: TDateTime;
Time1, Time2 : String;

procedure OnCreate;

begin

AddCandleHistorySetting(@History, 'Candle History', '', CI_15_Minutes, 100); //setting up the chart history
History.OnNewRateEvent := @OnNewRate; //indicating the procedure to run when a new rate is received
AddAccountSetting(@Account, 'Account', ''); //the account number
AddFloatSetting(@Amount, 'Amount(Lots)', 2); //the number of lots

AddStringSetting(@Time1, 'Entry Orders Time', '15.00.00');
AddStringSetting(@Time2, 'Entry Orders Time', '15.02.00');

AddIntegerSetting(@ESPrice, 'Entry Stop Distance', 20); //setting up entry stop distance in pips
AddIntegerSetting(@Stop, 'Stop', 15); //setting up stop in pips
AddIntegerSetting(@Limit, 'Limit', 25); //setting up limit in pips

end;


// this procedure runs when a new candle opens
procedure OnStart;
begin
LastTime:=Time;
end;


// this procedure runs when a new rate is received
procedure OnNewRate;
begin
Point:= History.Instrument.POintSize;

//at the specified time, create two entry stop orders
if (Time >= StrToTime(Time1))
and (LastTime < StrToTime(Time1)) then

begin

CreateOrder(History.Instrument, Account, Amount, bsBuy,
History.Instrument.sell - Stop*Point,
History.Instrument.sell + Limit*Point,
TraderRange, 'MyTrade');

if (Time >= StrToTime(Time2))
and (LastTime < StrToTime(Time2)) then

begin

CreateOrder(History.Instrument, Account, Amount, bsBuy,
History.Instrument.sell - Stop*Point,
History.Instrument.sell + Limit*Point,
TraderRange, 'MyTrade');

end;
end;

LastTime:=Time;
end;
Post #1865
Posted 8/19/2010 11:39:45 PM
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

Group: Forum Members
Last Login: 7/28/2011 3:11:04 AM
Posts: 26, Visits: 109

Ok, this strategy place two orders at two given time.
Now I want some more difficult.
How can I place two orders, two different pairs at to given time ?

Saluti,

Massimo

const
StrategyName = 'x Time 02';

var
History: TCandleHistory;
Account: TAccount;
Amount, Point: Double;
ESPrice, Stop, Limit: Integer;
LastTime: TDateTime;
Time1, Time2 : String;


procedure OnCreate;
begin
AddCandleHistorySetting(@History, 'Candle History', 'EURUSD', CI_15_Minutes, 100);
History.OnNewRateEvent := @OnNewRate;
AddAccountSetting(@Account, 'Account', '');
AddFloatSetting(@Amount, 'Amount(Lots)', 1);

AddStringSetting(@Time1, 'Time 1', '15.00.00');
AddStringSetting(@Time2, 'Time 2', '15.02.00');

AddIntegerSetting(@ESPrice, 'Entry Stop Distance', 20);
AddIntegerSetting(@Stop, 'Stop', 15);
AddIntegerSetting(@Limit, 'Limit', 25);
end;


procedure OnStart;
begin
LastTime:=Time;
end;



procedure OnNewRate;
begin
Point:= History.Instrument.POintSize;


if (Time >= StrToTime(Time1))
and (LastTime < StrToTime(Time1)) then

begin
CreateEntryOrder(History.Instrument, Account, Amount, bsBuy,
History.Instrument.Buy + ESPrice*Point,
History.Instrument.Sell + ESPrice*Point-Stop*Point,
History.Instrument.Sell + ESPrice*Point+Limit*Point,
otEStop,'EntryStopBuy');

end;

if (Time >= StrToTime(Time2))
and (LastTime < StrToTime(Time2)) then

begin
CreateEntryOrder(History.Instrument, Account, Amount, bsBuy,
History.Instrument.Buy + ESPrice*Point,
History.Instrument.Sell + ESPrice*Point-Stop*Point,
History.Instrument.Sell + ESPrice*Point+Limit*Point,
otEStop,'EntryStopBuy');

end;

LastTime:=Time;
end;
Post #1871
Posted 9/30/2010 9:15:59 AM


Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

Group: Forum Members
Last Login: 10/6/2010 8:50:07 AM
Posts: 46, Visits: 84
Hi, Massimo!

It seems that this code is working)

Enjoy

Best regards




br,
Phil Richter

  Post Attachments 
x_Time_02.act (105 views, 1.86 KB)
Post #2058
Posted 10/4/2010 10:35:35 AM
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

Group: Forum Members
Last Login: 7/28/2011 3:11:04 AM
Posts: 26, Visits: 109
Thanks Phil, it works !!!
Tanti saluti dall' Italia,

Massimo
Post #2085
Posted 10/18/2010 12:53:05 PM
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

Group: Forum Members
Last Login: 7/28/2011 3:11:04 AM
Posts: 26, Visits: 109
Phyl, I would like to place the orders setting also the date, so I can place the orders over the 24h.
I wrote this sample strategy but no orders is placed.
Please tell me where is the error. Thanks, again, Massimo



const
StrategyName = 'x GT 07';

var

Chart1, Chart2: TCandleHistory;

Account: TAccount;
Amount: Double;
Point : array [1..2] of Double;
Profit, TraderRange, Passo: Integer;
LastTime: TDateTime;
Time1, Time2: String;

procedure OnCreate;

begin

AddIntegerSetting(@Passo, 'Passo', 60);

AddStringSetting(@Time1, 'Time 1', '18/10/2010 18.44.00');
AddStringSetting(@Time2, 'Time 2', '18/10/2010 18.45.00');





AddCandleHistorySetting(@Chart1, 'Chart 1', 'GBPUSD', CI_15_Minutes, 50);
Chart1.OnNewRateEvent := @OnNewRate;
AddCandleHistorySetting(@Chart2, 'Chart 2', 'EURCAD', CI_15_Minutes, 50);
Chart2.OnNewCandleEvent := @OnNewCandle2;



AddFloatSetting(@Amount, 'Amount(Lots)', 1);
AddAccountSetting(@Account, 'Account', '');

end;


procedure OnNewRate;
begin

Point[1] := Chart1.Instrument.PointSize;
Point[2] := Chart2.Instrument.PointSize;


if (Time >= StrToDateTime(Time1))
and (LastTime < StrToDateTime(Time1)) then

begin


CreateEntryOrder(Chart1.Instrument, Account, Amount, bsBuy, ////////////////////////////////
Chart1.Instrument.Buy - Passo*Point[1] ,
NullRate,
NullRate,
otELimit,'EntryLimitBuy');


CreateEntryOrder(Chart1.Instrument, Account, Amount, bsSell,
Chart1.Instrument.Sell + Passo*5*Point[1] ,
NullRate,
NullRate,
otELimit,'EntryLimitSell');

end;

if (Time >= StrToDateTime(Time2))
and (LastTime < StrToDateTime(Time2)) then

begin

CreateEntryOrder(Chart2.Instrument, Account, Amount, bsBuy, ////////////////////////////////
Chart2.Instrument.Buy - Passo*Point[2] ,
NullRate,
NullRate,
otELimit,'EntryLimitBuy');



CreateEntryOrder(Chart2.Instrument, Account, Amount, bsSell,
Chart2.Instrument.Sell + Passo*5*Point[2] ,
NullRate,
NullRate,
otELimit,'EntryLimitSell');

end;

LastTime:=Time;
end;
Post #2164
Posted 10/19/2010 12:13:35 PM
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

Group: Forum Members
Last Login: 7/28/2011 3:11:04 AM
Posts: 26, Visits: 109

Ok, I have found a solution to my problem, below the script.
Greetings from Italy,

Massimo




const
StrategyName = 'x GT 08';

var

Chart1, Chart2: TCandleHistory;

Account: TAccount;
Amount: Double;
Point : array [1..2] of Double;
Profit, TraderRange, Passo: Integer;
LastTime: TDateTime;
Time1, Time2: String;

procedure OnCreate;

begin

AddIntegerSetting(@Passo, 'Passo', 60);

AddStringSetting(@Time1, 'Time 1', '20/10/2010 17.00.00');
AddStringSetting(@Time2, 'Time 2', '20/10/2010 17.55.00');


AddCandleHistorySetting(@Chart1, 'Chart 1', 'GBPUSD', CI_1_Day, 100);
Chart1.OnNewRateEvent := @OnNewRate;
AddCandleHistorySetting(@Chart2, 'Chart 2', 'EURCAD', CI_1_Day, 100);
Chart2.OnNewCandleEvent := @OnNewCandle2;

AddFloatSetting(@Amount, 'Amount(Lots)', 1);
AddAccountSetting(@Account, 'Account', '');

end;


procedure OnNewRate;
begin

Point[1] := Chart1.Instrument.PointSize;
Point[2] := Chart2.Instrument.PointSize;


if (Now >= StrToDateTime(Time1))
and (LastTime < StrToDateTime(Time1)) then

begin


CreateEntryOrder(Chart1.Instrument, Account, Amount, bsBuy, ////////////////////////////////
Chart1.Instrument.Buy - Passo*Point[1] ,
NullRate,
NullRate,
otELimit,'EntryLimitBuy');


CreateEntryOrder(Chart1.Instrument, Account, Amount, bsSell,
Chart1.Instrument.Sell + Passo*5*Point[1] ,
NullRate,
NullRate,
otELimit,'EntryLimitSell');

end;

if (Now >= StrToDateTime(Time2))
and (LastTime < StrToDateTime(Time2)) then

begin

CreateEntryOrder(Chart2.Instrument, Account, Amount, bsBuy, ////////////////////////////////
Chart2.Instrument.Buy - Passo*Point[2] ,
NullRate,
NullRate,
otELimit,'EntryLimitBuy');



CreateEntryOrder(Chart2.Instrument, Account, Amount, bsSell,
Chart2.Instrument.Sell + Passo*5*Point[2] ,
NullRate,
NullRate,
otELimit,'EntryLimitSell');

end;

LastTime:=Now;
end;

Post #2168
« Prev Topic | Next Topic »


Reading This Topic Expand / Collapse
Active Users: 0 (0 guests, 0 members, 0 anonymous members)
No members currently viewing this topic.
Forum Moderators: Admin

All times are GMT -5:00, Time now is 8:29pm


© 2009 Actforex.com Terms of Use