Forex Forum

Problemi con buy/sell orders

Trading System Automatico sul forex. Nel trading Forum Impara a realizzare indicatori e Forex Expert Advisors; visiona alcuni Forex EA gratuiti ed i trading broker che li permettono.

Problemi con buy/sell orders

Messaggioda tiziana.foglio » 09/04/2010, 23:17

Ciao a tutti!
Sto costruendo con enorme fatica un expert advisor, ma mi sono bloccata. Vorrei che il sistema effettuasse una singola operazione in long ed eventualmente, una singola operazione in short, in modo da evitare ulteriori rientri.
Chi mi sa spiegare come si fa?
Grazie infinite ;)
tiziana.foglio
Studente
Studente
 
Messaggi: 7
Iscritto il: 09/04/2010, 23:13

Re: Problemi con buy/sell orders

Messaggioda dail » 10/04/2010, 12:35

Ciao Tiziana, innanzitutto benvenuta :)
Ho creato un semplicissimo script da mettere nella funzione start(), che ti conta il numero di operazioni LONG/SHORT eseguite. Alla fine puoi notare due condizioni IF, tramite le quali potrai aprire l'ordine che vorrai qualora non ci siano già ulteriori trade attivi.

Codice: Seleziona tutto
int start(){

   int op_short, op_long;
   
   for(int i=0; i < OrdersTotal(); i++){         
      if(OrderSelect(i, SELECT_BY_POS)){   
         if(OrderType()==OP_BUY)  op_long++;               
         if(OrderType()==OP_SELL) op_short++;     
      }             
   }
   
   if (op_long < 1){
      Print("Non sono state effettuate operazioni long");
     //Aprire ordine LONG
   }
   if (op_short < 1){
      Print("Non sono state effettuate operazioni short"); 
      //Aprire ordine SHORT
   }   

   return(0);
}


Fammi sapere se ti serve altro.
Buona giornata
Avatar utente
dail
Moderatore
Moderatore
 
Messaggi: 306
Iscritto il: 12/03/2010, 13:38

Re: Problemi con buy/sell orders

Messaggioda tiziana.foglio » 11/04/2010, 13:37

Grazie infinite per l'aiuto!
In questo momento non ho la possibilità di mettermi subito all'opera, ma appena torno a casa provo il tuo script, sei stato gentilissimo. Grazie ancora ;)
tiziana.foglio
Studente
Studente
 
Messaggi: 7
Iscritto il: 09/04/2010, 23:13

Re: Problemi con buy/sell orders

Messaggioda tiziana.foglio » 11/04/2010, 20:02

Ciao Dail,
Grazie ancora per aver creato lo script. Sto provando a farlo girare, ma c'è qualcosa di sbagliato, non riesco a capire cosa sia. Potrei postarti l'expert, se non ti crea troppo disturbo? Non me la cavo un granché con la programmazione... :cry:
tiziana.foglio
Studente
Studente
 
Messaggi: 7
Iscritto il: 09/04/2010, 23:13

Re: Problemi con buy/sell orders

Messaggioda dail » 12/04/2010, 8:56

Ciao Tiziana,
Come deve funzionare il tuo EA?
Puoi postare il codice per intero senza nessun problema(utilizza il bottone code del forum per racchiudere il codice di programmazione).
Ti aiuto volentieri,
fammi sapere

ciao
Avatar utente
dail
Moderatore
Moderatore
 
Messaggi: 306
Iscritto il: 12/03/2010, 13:38

Re: Problemi con buy/sell orders

Messaggioda tiziana.foglio » 12/04/2010, 16:55

Ciao Dail,
grazie ancora per la disponibilità, sei davvero gentile a starmi dietro.
sto elaborando una strategia basata sulla media adattiva di kaufman su un timeframe a 5m, ma non riesco a fare in modo che l'EA effettui una singola operazione per volta, ovvero una singola operazione in long ed, eventualmente, una singola operazione in short.
Inoltre, non riesco ad inserire l'orario, mi spiego meglio. Vorrei operare sul derivato del dow jones e dato che il mercato apre alle 15.30 mi piacerebbe far partire il sistema a quell'ora, ma non riesco ad inserire la mezz'ora, non riesco proprio a capire come si fa. Ti posto l'expert, così dai un occhio al paziente...
Grazie di nuovo, ciao

Codice: Seleziona tutto
//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder                  |
//|                http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//|                                                                  |
//|  In no event will author be liable for any damages whatsoever.   |
//|                      Use at your own risk.                       |
//|                                                                  |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+

extern bool EachTickMode = True;
extern double Lots = 0.10;
extern bool UseTakeProfit= false;
extern double TakeProfit = 10;
extern bool UseStopLoss = true;
extern double TrailingStop = 15;
extern int StopLoss = 35;
extern bool UserOra= true;
extern int OraInizio = 15.30;
extern int OraFine =16.00;

int BarCount;
int Current;
bool TickCheck = False;


//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+


int start()
  {
   double Var1, Var2, Var3;
   int cnt, ticket, total;
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external
// variables (Lots, StopLoss, TakeProfit,
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0); 
     }
   if(TakeProfit<5)
     {
      Print("TakeProfit less than 10");
      return(0);  // check TakeProfit
     }
// to simplify the coding and speed up access
// data are put into internal variables
Var1 = iCustom(NULL, PERIOD_M5, "KAMA", 9, 2, 1.5, 0, Current + 0);
Var2 = iCustom(NULL,PERIOD_M5, "KAMA", 18, 2, 1.5, 0, Current + 0);
Var3= Close [0];

   
   
   total=OrdersTotal();
   if(total<1)
     {
      // no opened orders identified
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0); 
        }
      // check for long position (BUY) possibility
      if(OraInizio<OraFine)
   {
      if(Hour()>=OraInizio && Hour() < OraFine)
      {
      if(Var1>Var2 && Var3 > Var1)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3, Bid-StopLoss*Point,0,"macd sample",16384,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError());
         return(0);
        }
      // check for short position (SELL) possibility
      if(Var1<Var2 && Var3 < Var2 )
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3 ,Ask+StopLoss*Point,0,"macd sample",16384,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError());
         return(0);
        }
      return(0);
     }
        }
   }   
   // it is important to enter the market correctly,
   // but it is more important to exit it correctly...   
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
            // should it be closed?
           
           
            // check for trailing stop
            if(TrailingStop>0) 
              {                 
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else // go to short position
           {
            // should it be closed?
           
            // check for trailing stop
            if(TrailingStop>0) 
              {                 
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }
// the end
tiziana.foglio
Studente
Studente
 
Messaggi: 7
Iscritto il: 09/04/2010, 23:13

Re: Problemi con buy/sell orders

Messaggioda dail » 14/04/2010, 18:41

Ciao Tiziana,
in serata guardo bene il codice che hai postato e vedo di correggerlo integrando il codice che ti avevo fornito.
A presto

Ciao.
Avatar utente
dail
Moderatore
Moderatore
 
Messaggi: 306
Iscritto il: 12/03/2010, 13:38

Re: Problemi con buy/sell orders

Messaggioda tiziana.foglio » 14/04/2010, 20:23

Ciao Damiano,

Ho immaginato fossi impegnato, non devi preoccuparti, anzi. Sei davvero molto gentile a dedicarmi del tempo per la costruzione dell'EA. Fai pure con calma, quando puoi mi fai sapere.
Grazie ancora! ;)
tiziana.foglio
Studente
Studente
 
Messaggi: 7
Iscritto il: 09/04/2010, 23:13

Re: Problemi con buy/sell orders

Messaggioda dail » 15/04/2010, 11:37

Ciao Tiziana!
Ti allego l'EA pronto, ho dato una bella pulita al codice perché in quello che mi avevi fornito tu c'erano cose che non servivano. Ora il codice è sicuramente più leggibile.

EA.mq4

L'EA in input ha le seguenti variabili:

Codice: Seleziona tutto
LOTS       = Numero di lotti da tradare
STOPLOSS   = Numero di pips di stoploss
GMT_OFFSET = Fuso orario GMT, se il broker si trova a Londra mettere -1. Praticamente bisogna indicare il numero di ore di distanza da GreenWich
START      = Ora d'inizio trading
END        = Ora di fine trading
FRIDAY     = Mettere true se deve tradare il venerdi, false se non deve tradare


Per quanto riguarda l'orario, come ho scritto nella leggenda sopra, praticamente in GMT_OFFSET dovrai mettere le ore di distanza da Greenwich, questo perché molti broker sono su fusi orari differenti.
Se il broker è avanti rispetto a Greenwich allora dovra mettere le ore di distanza precedute da segno meno(numero negativo, esempio: -1), l'opposto se il broker sia indietro (esempio: America).

Ovviamente, impostando l'ora su Greenwich nelle variabili START/END dovrai mettere l'orario d'inizio/fine trading facendo riferimento sempre all'ora di Greenwich.
Quindi, se il trading deve iniziare alle 15(ora italiana) e finire alle 19(ora Italiana) e il broker si trova a Londra, dovrai mettere:

Codice: Seleziona tutto
GMT_OFFSET = -1
START      =  13
END        =  17

(Ricordati di modificare gli orari per l'ora legale)

Nel codice che mi avevi dato ho trovato un pò di codice riguardo il trailing stop, se mi spieghi come vuoi portare avanti lo stop loss, integro questo codice.

Fammi sapere

Ciao
Questo messaggio ha dei contenuti visibli solo dagli iscritti, effettua il login oppure iscriviti.
Avatar utente
dail
Moderatore
Moderatore
 
Messaggi: 306
Iscritto il: 12/03/2010, 13:38

Re: Problemi con buy/sell orders

Messaggioda tiziana.foglio » 15/04/2010, 14:44

Ciao Damiano!

Grazie infinite per l'EA :P
Ora lo provo subito e ti faccio sapere. Riguardo al trailing non ho ancora le idee molto chiare, non so se è il caso di usarlo con un adeguato margine di stoploss oppure usare soltanto il take profit. Ti faccio sapere.
Ancora grazie!
tiziana.foglio
Studente
Studente
 
Messaggi: 7
Iscritto il: 09/04/2010, 23:13

Prossimo

Torna a Trading Automatico

Chi c’è in linea

Visitano il forum: CommonCrawl [Bot] e 1 ospite