Chiusura Order

Sezione dedicata a metatrader (ed altre piattaforme) ed al suo linguaggio di programmazione per il trading automatico
Andre
Messaggi: 4
Iscritto il: 06/01/2019, 20:07

Chiusura Order

Messaggio da Andre » 09/01/2019, 2:23

Ciao a tutti, scusate volevo chiedervi qualche indicazione su un EA che voglio fare ma non mi riesce
Lo scopo di questo EA è molto semplice:
Se non ci sono ordini in corso:
Se la candela [1] è rialzista apri un ordine buy
Se la candela [1] è ribassista apri un ordine sell
Alla prossima candela
Se ci sono ordini in corso:
Se la candela [1] è rialzista e l'ordine in corso è buy, non fare niente
Se la candela [1] è ribassista e l'ordine in corso è buy, chiudi l'ordine e aprine uno sell
Se la candela [1] è rialzista e l'ordine in corso è sell, chiudi l'ordine e aprine uno buy
Se la candela [1] è ribassista e l'ordine in corso è sell, non fare niente

Praticamente dovrei sempre avere un ordine aperto

Codice: Seleziona tutto

//+------------------------------------------------------------------+
//|                                                      SECONDO.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
//----------------------------------------------------+
void OnTick()
  {
   if(OrdersTotal() == 0) EAcandela();
  }
   void EAcandela()
  {
    double distanzaCandela = iClose(Symbol(),0,1) - iOpen(Symbol(),0,1);
    double OrdineSL,OrdineTP;
    int ticket1;//apertura buy
    int ticket2;//apertura sell
    int PIPP = 2;
    int PIPN = -2;
    int sl = 5000;
    int tp = 5000;
    int TipoOrdine = 0;//1 se buy, 2 se sell
    
    
    if((distanzaCandela >= PIPP*Point) && (TipoOrdine == 0))
      {
       OrdineSL = iOpen(Symbol(),0,0) - (sl*Point);
       OrdineTP = iOpen(Symbol(),0,0) + (tp*Point);
       
       ticket1 = OrderSend(Symbol(),OP_BUY,0.01,Ask,0,OrdineSL,OrdineTP,"Compro",0,0,clrGreen);
       if(ticket1 < 0) Print("Errore");
       
       TipoOrdine = 1;
      }
    
    
   
    if((distanzaCandela <= PIPN*Point) && (TipoOrdine == 0))
      {
       OrdineSL = iOpen(Symbol(),0,0) + (sl*Point);
       OrdineTP = iOpen(Symbol(),0,0) - (tp*Point);
       
       ticket2 = OrderSend(Symbol(),OP_SELL,0.01,Bid,0,OrdineSL,OrdineTP,"Vendo",0,0,clrGreen);
       if(ticket2 < 0) Print("Errore");
       
       TipoOrdine = 2;
      }
      
      //Se l'ordine è buy e la candela [0] è rialzista allora lascia ordine aperto
      //Se l'ordine è sell e la candela [0] è ribassista allora lascia ordine aperto
      
      //Se l'ordine è buy e la candela [0] è ribasisata allora chiudi ordine   
      if((TipoOrdine == 1) && (distanzaCandela <= PIPN*Point)) 
        {
          OrderClose(ticket1,0.01,Bid,0,clrBlack);
          TipoOrdine = 0;
        }
      
       //Se l'ordine è sell e la candela [0] è rialzista allora chiudi ordine
       if((TipoOrdine == 2) && (distanzaCandela >= PIPN*Point))
         {
           OrderClose(ticket2,0.01,Bid,0,clrBlack);
           TipoOrdine = 0;
         }
        
   }   
   

Questo è il codice che ho provato a fare, gli ordini me li apre giusti ma non me li chiude, sapete dove ho sbagliato?
Ho provato più volte a impostarlo diversamente ma non c'è verso che vada, me li apre ma non me li chiude, gli chiude solo se imposto un SL o TP raggiungibili che però qua gli ho impostati alti per far si che l'ordine si chiuda quando c'è la condizione che voglio io e non per il ST/TP.
Se potete darmi qualche indicazione sarei felicissimo non riesco a trovare nulla neanche nel web,
Grazie in anticipo

IntoTheWild1990
Messaggi: 138
Iscritto il: 12/10/2016, 17:44

Re: Chiusura Order

Messaggio da IntoTheWild1990 » 12/01/2019, 14:27

Ma sei serio qua ci mancano i cicli di controllo, e le funzioni dedicate. Ma hai mai aperto un manuale di #c?
Una fenice risorge dalla cenere torna al fuoco per quanto tu la possa uccidere.

Seguici su facebook
https://www.facebook.com/eamt4forex/?mo ... _todo_tour
segui i nostri segnali gratis:
https://t.me/trinacriafx

riccardo1981
Messaggi: 2248
Iscritto il: 11/05/2014, 13:36

Re: Chiusura Order

Messaggio da riccardo1981 » 12/01/2019, 15:32

Se fossimo tutti esperti...
Gli affari si fanno al momento dell'acquisto
Se non sai perdere, lascia perdere

senapazio
Messaggi: 50
Iscritto il: 13/09/2015, 1:47

Re: Chiusura Order

Messaggio da senapazio » 13/01/2019, 17:23

Molto semplicemente senza stravolgere quello che hai fatto fino ad ora:
all'interno della funzione OnTick() hai giustamente inserito la condizione if(OrdersTotal() == 0) EAcandela();
per chiudere gli ordini ti manca la condizione in cui gli ordini totali aperti e' maggiore di 0
Il tutto potrebbe diventare:

Codice: Seleziona tutto

if(OrdersTotal() == 0)
        EAcandela();
else  EAcandelaChiudi();
quindi dovvrai poi creare la funzione EAcandelaChiudi() con dentro il codice che ti chiude gli ordini aperti.
Questa potrebbe essere una possibilita'.

Chi c’è in linea

Visitano il forum: CC [Bot] e 0 ospiti