come posso ottenere il più alto dopo che orderopenprice è stato aperto. - pagina 6

[Eliminato]  

Ho risolto il primo problema (ho fatto un errore Grazie diostar)

// dovrei mettere if(OrdersTotal()>0){
if ((lastOpenedOpenPriceBuy()-0.0030)>MarketInfo("EURUSD",MODE_BID)))
{ SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1, "if ( (lastOpenedOpenPriceBuy()-0.0030>MarketInfo(EURUSD,MODE_BID) ) )" ) ;}
}

per la seconda:

if ( ((lastOpenedOpenPriceBuy()-lastOpenedOpenPriceSell() )>=0.0060) &&( lastClosedClosePrice()<beforelastClosedClosePrice()) )
{ CLOSESHORT("EURUSD") ;}

Non so cosa dovrei fare:

per tua informazione la funzione CLOSESHORT è:

int CLOSESHORT(string symbol_c) {
CloseAllPositions(symbol_c,OP_SELL,MagicNumberShort);
CloseAllPositions(symbol_c,OP_SELL,MagicNumberShort);
return(0);
}


Grazie

 

Ora sono confuso.

Stai rispondendo sulla prima funzione lastOpenedOpenPriceBuy()

Potrei essere in grado di occuparmi solo di questo per ora. Quindi, quali correzioni stavi facendo esattamente. Com'è il codice ora?

 
diostar:

Ora sono confuso.

Non sei l'unico... smettila di perdere tempo.
 
RaptorUK:
Non sei l'unico . . smettila di perdere tempo.

Sai, questo thread è probabilmente uno dei più lunghi. E dopo 6 pagine, confuso. No, continuo a dire che non è uno "spreco".

(Significa solo che è il momento di una nuova direzione, una nuova vita, un nuovo inizio. Per tutti).

 
Ho passato del tempo anche su questo thread, ho aggiunto codice e dato suggerimenti. . quando trascini il cavallo all'acqua, la insaporisci con il fieno e aggiungi delle mele e il cavallo ancora non vuole bere, è il momento di rendersi conto che il cavallo non vuole bere. . vuole una flebo intravenosa per la sua assunzione di acqua. . . a quel punto, per quanto mi riguarda, il cavallo è da solo.
 
RaptorUK:
Anche io ho passato del tempo su questo thread, ho aggiunto codice e dato suggerimenti. . quando trascini il cavallo all'acqua, la insaporisci con il fieno e aggiungi delle mele e il cavallo ancora non vuole bere, è il momento di rendersi conto che il cavallo non vuole bere... vuole una flebo intravenosa per la sua assunzione di acqua... a quel punto, per quanto mi riguarda, il cavallo è da solo.

Capisco. La ricompensa finale può non essere "destinata" ad avere il cavallo nutrito, allora la ricompensa per chi ci ha provato deve essere un'altra.

Ringrazia il cavallo per questo.

[Eliminato]  

Grazie diostar per il tuo aiuto.

Ora ho l'85% per correggere i bug. Vediamo:

1- abbiamo creato 4 funzioni (vedi alla fine di questa pagina)

*LastOpenedOpenPriceBuy()

* LastOpenedOpenPriceSell()

*lastClosedClosePrice()
*beforelastClosedClosePrice()

2- Abbiamo affrontato il primo problema quando abbiamo usato:

if (  ((lastOpenedOpenPriceBuy()-0.0030)>MarketInfo("EURUSD",MODE_BID))  ) 
   {  SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}
  if (  ((lastOpenedOpenPriceSell()+0.0030)<MarketInfo("EURUSD",MODE_BID))  ) 
   {  BUY("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceSell()+0.0030)<MarketInfo(EURUSD,MODE_BID) )  )") ;}

Lo correggiamo aggiungendo :

if(OrdersTotal()>0){
  if (  ((lastOpenedOpenPriceBuy()-0.0030)>MarketInfo("EURUSD",MODE_BID))  ) 
   {  SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}
  if (  ((lastOpenedOpenPriceSell()+0.0030)<MarketInfo("EURUSD",MODE_BID))  ) 
   {  BUY("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceSell()+0.0030)<MarketInfo(EURUSD,MODE_BID) )  )") ;}
  }

3- Il secondo problema è:

if ( ((lastOpenedOpenPriceBuy()-lastOpenedOpenPriceSell())>=0.0060)&&(((lastOpenedOpenPriceBuy()+lastOpenedOpenPriceSell())/2)<MarketInfo("EURUSD",MODE_BID))
         &&(lastClosedClosePrice()< beforelastClosedClosePrice()) )  
   {  CLOSESHORT("EURUSD") ;}

se rimuovo &&(lastClosedClosePrice()< beforelastClosedClosePrice()) . allora tutto andrà bene

nessun problema con :

*((lastOpenedOpenPriceBuy()-lastOpenedOpenPriceSell())>=0.0060)

*(((lastOpenedOpenPriceBuy()+lastOpenedOpenPriceSell())/2)<MarketInfo("EURUSD",MODE_BID))

l'unico problema si presenta con &&(lastClosedClosePrice()< beforelastClosedClosePrice())

prendere un esempio:

se l'ordine numero 5 ha aperto ed era per vendere poi l'ordine numero 6 ha aperto e chiuso che l'ordine era per comprare poi l'ordine numero 7 ha aperto ed era per comprare.

Il caso sarà (lastClosedClosePrice()< beforelastClosedClosePrice())

( Ordine numero 6 < Ordine numero 4 ) // poiché l'ordine numero 5 non si è ancora chiuso.

Cosa devo fare? Non lo so. Ho provato a usare if(OrdersHistoryTotal()>0){allorainserire tutte le condizioni ma non c'è verso }

double lastOpenedOpenPriceBuy()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_BUY && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }


double lastOpenedOpenPriceSell()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_SELL && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }



double lastClosedClosePrice()
  {
   double ret = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = OrderClosePrice();
      }
   }
   
   return(ret);
  }


double beforelastClosedClosePrice()
  {
   double ret = 0;
   double ret2 = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = ret2;
         ret2 = OrderClosePrice();
      }
   }
   if(ret==0) {
      ret = ret2;
   }
   
   return(ret);
  }
 
double lastOpenedOpenPriceBuy()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_BUY && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }

Questo NON è stato suggerito da me, e "noi" non l'abbiamo creato. Questo è al 100% tuo.