Chiudere automaticamente l'ordine dopo un determinato periodo e/o SL

 

Ciao a tutti,

Vorrei sapere se è possibile chiudere automaticamente un ordine dopo il raggiungimento di un periodo e/o SL...

Per esempio:

Ho aperto un trade alle 13.00 e voglio far chiudere questo ordine quando la quotazione ha raggiunto il suo StoppLoss o è trascorso un periodo di 2 ore.

Ecco il codice attuale:

// Criteri di acquisto
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20==Hour()) //Segnale di acquisto
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,slb,tpb, "time trader buy order ",BuyMagicNumber,0,Blue);
if(openbuy<1){int buyfail=1;}
}

}// halt1

if((halt2!=1)&&(AllowSell==true)){// halt2
RefreshRates();
// Criteri di vendita
if ((TradeHour12==Hour())||(TradeHour23==Hour()) //segnale di vendita
{
int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,sls,tps, "time trader sell order ",SellMagicNumber,0,Green);
if(opensell<1){int sellfail=1;}
}

}// halt2

Grazie in anticipo

Marc

 

Si prega di utilizzare questo per postare il codice . . rende più facile la lettura.

 
Esegui un loop tra gli ordini aperti controllando quando sono stati aperti usando OrderOpenTime (non dimenticare di usare prima OrderSelect ), poi controlla quel tempo contro TimeCurrent per vedere se sono passate 2 ore... se sono passate chiudi l'ordine.
 
nirvanamac:

Ciao a tutti,

Vorrei sapere se è possibile chiudere automaticamente un ordine dopo il raggiungimento di un periodo e/o SL...

Per esempio:

Ho aperto un trade alle 13.00 e voglio far chiudere questo ordine quando la quotazione ha raggiunto il suo StoppLoss o è trascorso un periodo di 2 ore.

Ecco il codice attuale:

// Criteri di acquisto
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20==Hour()) //Segnale di acquisto
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,slb,tpb, "time trader buy order ",BuyMagicNumber,0,Blue);
if(openbuy<1){int buyfail=1;}
}

}// halt1

if((halt2!=1)&&(AllowSell==true)){// halt2
RefreshRates();
// Criteri di vendita
if ((TradeHour12==Hour())||(TradeHour23==Hour()) //segnale di vendita
{
int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,sls,tps, "time trader sell order ",SellMagicNumber,0,Green);
if(opensell<1){int sellfail=1;}
}

}// halt2

Grazie in anticipo

Marc


// Buy criteria
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20==Hour())) //Signal Buy
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,slb,tpb,"time trader buy order ",BuyMagicNumber,0,Blue);
if(openbuy<1){int buyfail=1;}
}

}// halt1

if((halt2!=1)&&(AllowSell==true)){// halt2
RefreshRates();
// Sell criteria
if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
{
int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,sls,tps,"time trader sell order ",SellMagicNumber,0,Green);
if(opensell<1){int sellfail=1;}
}

}// halt2
 
nirvanamac:
Vorrei sapere se è possibile chiudere automaticamente un ordine dopo il raggiungimento di un periodo e/o SL...
  1. Se lo SL viene raggiunto, si chiude da solo.
  2. Altrimenti, devi solo codificarlo. Dov'è il tuo OrderClose() e il tuo test del tempo?
 
WHRoeder:
  1. Se lo SL viene raggiunto, si chiude da solo.
  2. Altrimenti, devi solo codificarlo. Dov'è il tuo OrderClose() e il tuo test del tempo?


Ciao WHRoeder,

Penso che tu intenda il codice del foro o?

//---- input parameters
extern double    Lots=0.01;
extern int       TakeProfit=200;
extern int       StopLoss=200;
extern int       Slip=50;
extern int BuyMagicNumber =1;
extern int SellMagicNumber =2;
extern bool AllowBuy=true;
extern bool AllowSell=true;
extern int  TradeHour3=3;
extern int  TradeHour4=4;
extern int  TradeHour7=7;
extern int  TradeHour10=10;
extern int  TradeHour17=17;
extern int  TradeHour18=18;
extern int  TradeHour20=20;
extern int  TradeHour12=12;
extern int  TradeHour23=23;
 
//+------------------------------------------------------------------+
//| expert starts                                  |
//+------------------------------------------------------------------+
int start()
  {
//----
int StopMultd,Sleeper=1;
 
 
 
int digits=MarketInfo("EURUSD",MODE_DIGITS);
if(digits==5){StopMultd=10;} else{StopMultd=1;}
double TP=NormalizeDouble(TakeProfit*StopMultd,Digits);
double SL=NormalizeDouble(StopLoss*StopMultd,Digits);
double Slippage=NormalizeDouble(Slip*StopMultd,Digits);
 
// Calculate stop loss
double slb=NormalizeDouble(Ask-SL*Point,Digits);
double sls=NormalizeDouble(Bid+SL*Point,Digits);
 
// Calculate take profit
double tpb=NormalizeDouble(Ask+TP*Point,Digits);
double tps=NormalizeDouble(Bid-TP*Point,Digits);
 
//-------------------------------------------------------------------+
//Check open orders
//-------------------------------------------------------------------+
if(OrdersTotal()>0){
  for(int i=1; i<=OrdersTotal(); i++)          // Cycle searching in orders
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
        {
          if(OrderMagicNumber()==BuyMagicNumber) {int halt1=1;}
          if(OrderMagicNumber()==SellMagicNumber) {int halt2=1;}
        }
     }
}
//-------------------------------------------------------------------+
 
 
if((halt1!=1)&&(AllowBuy==true)){// halt1
 
// Buy criteria
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20==Hour())) //Signal Buy
 {
   int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,slb,tpb,"time trader buy order ",BuyMagicNumber,0,Blue);
   if(openbuy<1){int buyfail=1;}
 }
 
}// halt1
 
if((halt2!=1)&&(AllowSell==true)){// halt2
RefreshRates();
 // Sell criteria
 if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
 {
   int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,sls,tps,"time trader sell order ",SellMagicNumber,0,Green);
   if(opensell<1){int sellfail=1;}
 }
 
}// halt2
 
 
//-------------------------------------------------------------------+
// Error processing
//-------------------------------------------------------------------+
if(buyfail==1||sellfail==1){
int Error=GetLastError();
  if(Error==130){Alert("Wrong stops. Retrying."); RefreshRates();}
  if(Error==133){Alert("Trading prohibited.");}
  if(Error==2){Alert("Common error.");}
  if(Error==146){Alert("Trading subsystem is busy. Retrying."); Sleep(500); RefreshRates();}
 
}
 
// if(openbuy==true||opensell==true)Sleep(1*60*1000*Sleeper);
//-------------------------------------------------------------------
   return(0);
  }
//+-----------------------------------
 

In realtà c'è solo uno stopploss. Voglio solo chiudere l'ordine 2 ore dopo l'apertura di una nuova barra o l'ultimo secondo di 1:59:59... Il mio problema è riempire il codice nel mio attuale...

 
RaptorUK:
Fate un loop tra gli ordini aperti controllando quando sono stati aperti usando OrderOpenTime (non dimenticate di usare prima OrderSelect ), poi controllate quel tempo rispetto a TimeCurrent per vedere se sono passate 2 ore. . se sono passate chiudete l'ordine.
Basta codificare questo . . . non è davvero difficile.
 
RaptorUK:
Basta codificare che . . . non è davvero difficile.

Spero che tu possa darmi dei suggerimenti se fallisco ;-)
 
AFAIK tutti qui vogliono aiutare ma non essere schiavi di nessuno
 
qjol:
AFAIK tutti qui vogliono aiutare ma non essere schiavi di nessuno


Sì, certo che capisco...non voglio avere schiavi per i miei EA....l'unica cosa che devo sapere è come capire in che modo funziona un programma...

Se hai un EA semplice come SMA Cross... questo non è un grande problema... ma più vuoi ottenere e più diventa difficile...(almeno per me)