Hi!! Tesla can you help me? I've writing an EA that send pending orders when the price are inside a calculated zone. My problem, if I set the EA to trading from 1-20 hour, for example, I want taht EA send only one buy stop and only one sell stop pending orders in this period. I've been trying with OrdersTotal but dosen't work.
Thanks for your help!
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
void start(){
if(OrdersTotal()>0){
for(int i=0;i<=OrdersTotal()-1;i++){
OrderSelect(i, SELECT_BY_POS);
if(OrderType()==0 || OrderType()==1){
if(OrderProfit()==ProfitProtectStart && OrderType()==0 && ticketID!=OrderTicket()){
OrderModify(OrderTicket(),OrderOpenPrice(),buystart+(Point*ProtectProfit),OrderTakeProfit(),0,Blue);
ticketID=OrderTicket();
}
else if(OrderProfit()==ProfitProtectStart && OrderType()==1 && ticketID!=OrderTicket()){
OrderModify(OrderTicket(),OrderOpenPrice(),sellstart-(Point*ProtectProfit),OrderTakeProfit(),0,Blue);
ticketID=OrderTicket();
}
}
}
}
if(Hour()>FromHour && Hour()<ToHour && OrdersTotal()==0){
setZone();
sendOrder();
}
if(Hour()==ToHour && Minute()==1 && OrdersTotal()>0){
CloseAllOrder();
}
}
void setZone(){
high=
low=
buystart=
sellstart=
}
double getLotSize(){
double lot;
if(UseMM){
lot = NormalizeDouble((Risk*AccountBalance())/1000,1);
if(lot>MaxLots){lot=MaxLots;}
else if(lot<MinLots){lot=MinLots;}
}
return(lot);
}
void sendOrder(){
if((Ask<(high-0.0015)) && (Bid>(low+0.0015))){
OrderSend(Symbol(),OP_BUYSTOP,getLotSize(),buystart,2,buystart-sl,buystart+tp,NULL,0,0,CLR_NONE);
OrderSend(Symbol(),OP_SELLSTOP,getLotSize(),sellstart,2,sellstart+sl,sellstart-tp,NULL,0,0,CLR_NONE);
}
}
void CloseAllOrder(){
int totalpos=OrdersTotal()-1;
for(int i=0;i<=totalpos;i++){
OrderSelect(0, SELECT_BY_POS);
int Ordertype=OrderType();
int ticketnumber=OrderTicket();
if(Ordertype==0){
OrderClose(ticketnumber,OrderLots(),Bid,20);
Sleep(1000);
}
if(Ordertype==1){
OrderClose(ticketnumber,OrderLots(),Ask,20);
Sleep(1000);
}
if(Ordertype==2 || Ordertype==3){
OrderDelete(ticketnumber);
Sleep(1000);
}
else{
OrderDelete(ticketnumber);
Sleep(1000);
}
}
}
Thanks for your help!
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
void start(){
if(OrdersTotal()>0){
for(int i=0;i<=OrdersTotal()-1;i++){
OrderSelect(i, SELECT_BY_POS);
if(OrderType()==0 || OrderType()==1){
if(OrderProfit()==ProfitProtectStart && OrderType()==0 && ticketID!=OrderTicket()){
OrderModify(OrderTicket(),OrderOpenPrice(),buystart+(Point*ProtectProfit),OrderTakeProfit(),0,Blue);
ticketID=OrderTicket();
}
else if(OrderProfit()==ProfitProtectStart && OrderType()==1 && ticketID!=OrderTicket()){
OrderModify(OrderTicket(),OrderOpenPrice(),sellstart-(Point*ProtectProfit),OrderTakeProfit(),0,Blue);
ticketID=OrderTicket();
}
}
}
}
if(Hour()>FromHour && Hour()<ToHour && OrdersTotal()==0){
setZone();
sendOrder();
}
if(Hour()==ToHour && Minute()==1 && OrdersTotal()>0){
CloseAllOrder();
}
}
void setZone(){
high=
low=
buystart=
sellstart=
}
double getLotSize(){
double lot;
if(UseMM){
lot = NormalizeDouble((Risk*AccountBalance())/1000,1);
if(lot>MaxLots){lot=MaxLots;}
else if(lot<MinLots){lot=MinLots;}
}
return(lot);
}
void sendOrder(){
if((Ask<(high-0.0015)) && (Bid>(low+0.0015))){
OrderSend(Symbol(),OP_BUYSTOP,getLotSize(),buystart,2,buystart-sl,buystart+tp,NULL,0,0,CLR_NONE);
OrderSend(Symbol(),OP_SELLSTOP,getLotSize(),sellstart,2,sellstart+sl,sellstart-tp,NULL,0,0,CLR_NONE);
}
}
void CloseAllOrder(){
int totalpos=OrdersTotal()-1;
for(int i=0;i<=totalpos;i++){
OrderSelect(0, SELECT_BY_POS);
int Ordertype=OrderType();
int ticketnumber=OrderTicket();
if(Ordertype==0){
OrderClose(ticketnumber,OrderLots(),Bid,20);
Sleep(1000);
}
if(Ordertype==1){
OrderClose(ticketnumber,OrderLots(),Ask,20);
Sleep(1000);
}
if(Ordertype==2 || Ordertype==3){
OrderDelete(ticketnumber);
Sleep(1000);
}
else{
OrderDelete(ticketnumber);
Sleep(1000);
}
}
}