Forex Forum

EA e trailing stop

Forum dedicato allo sviluppo di Expert Advisors e alle recensioni dei robot attualmente in commercio.

EA e trailing stop

Messaggioda spettinato » 07/10/2010, 14:41

Ciao a tutti,
sono un novizio nella programmazione di EA, e sto cimentandomi con un EA.
Quello che vorrei ottenere è di inserire un trailing stop, ovvero che se quando apro una posizione e va in profitto, il mio stop loss segua al rialzo (o al ribasso ovviamente) il prezzo, così che se c'è un ritracciamento non chiuda la posizione a zero ma in positivo.

Accetto qualunque consiglio, codice, aiuto, insulto. Grazie!
spettinato
Studente
Studente
 
Messaggi: 7
Iscritto il: 07/10/2010, 10:26

Re: EA e trailing stop

Messaggioda dail » 08/10/2010, 0:13

Ciao spettinato :)
Com'è andata con il codice? Sei riuscito a realizzare il trailing stop?
Avatar utente
dail
Moderatore
Moderatore
 
Messaggi: 306
Iscritto il: 12/03/2010, 13:38

Re: EA e trailing stop

Messaggioda spettinato » 08/10/2010, 11:56

E ciao. Si, ci sono riuscito, scrivendo questo:

Codice: Seleziona tutto
  //MODIFICHE (BREAKEVEN)
  for (l_pos_12 = 0; l_pos_12 < OrdersTotal(); l_pos_12++) {
      if (OrderSelect(l_pos_12, SELECT_BY_POS)) {
        if (OrderMagicNumber() == MAGIC_NUMBER) {
            if (OrderType() == OP_BUY && OrderOpenPrice() + BREAKEVEN * poin <= Bid)
              OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + BREAKEVEN * poin ,OrderTakeProfit(),0,Blue);

            if (OrderType() == OP_SELL && OrderOpenPrice() - BREAKEVEN * poin >= Ask)
              OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BREAKEVEN * poin,OrderTakeProfit(),0,Blue);
        }
      }
  }


e in teoria parrebbe funzionare. Solo che mi crasha la metatrader quando inizia effettivamente a funzionare. L'errore della metatrader è il seguente
Codice: Seleziona tutto
There has been a critical error
Time        : 2010.10.08 11:46
Program     : Client Terminal
Version     : 4.00 (build: 226, 24 Mar 2009)
OS          : Windows Vista Professional 6.0 Service Pack 1 (Build 6001)
Processors  : 2 x X86 (level 6)
Memory      : 2087448/325888 kb
Exception   : C0000005
Address     : 00554EFB
Access Type : read
Access Addr : 00000007

Registers   : EAX=00000002 CS=001b EIP=00554EFB EFLGS=00010206
            : EBX=0489F0F0 SS=0023 ESP=079AB27C EBP=079AB3E0
            : ECX=00000000 DS=0023 ESI=079AF865 FS=003b
            : EDX=00000000 ES=0023 EDI=079AF858 GS=0000

Stack Trace : 005542E8 0315D1E0 00000000 00000000
            : 00000000 00000000 00000000 00000000
            : 00000000 00000000 00000000 00000000
            : 00000000 00000000 00000000 00000000

Modules     :
          1 : 00400000 004BB000 c:\program files\fxpro - metatrader\terminal.exe
          2 : 62D80000 0011B000 c:\windows\system32\mfc42.dll
          3 : 69500000 00065000 c:\windows\system32\odbc32.dll
          4 : 69B10000 00038000 c:\windows\system32\odbcint.dll
          5 : 74A70000 00039000 c:\windows\system32\oleacc.dll
          6 : 74AB0000 00032000 c:\windows\system32\winmm.dll
          7 : 74D20000 0019E000 c:\windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6001.18000_none_5cdbaa5a083979cc\comctl32.dll
          8 : 75020000 0003F000 c:\windows\system32\uxtheme.dll
          9 : 75370000 0003B000 c:\windows\system32\rsaenh.dll
         10 : 75450000 00005000 c:\windows\system32\wshtcpip.dll
         11 : 755B0000 0003B000 c:\windows\system32\mswsock.dll
         12 : 755F0000 00005000 c:\windows\system32\msimg32.dll
         13 : 75FF0000 00144000 c:\windows\system32\ole32.dll
         14 : 76140000 00009000 c:\windows\system32\lpk.dll
         15 : 76150000 0009D000 c:\windows\system32\user32.dll
         16 : 761F0000 000E6000 c:\windows\system32\wininet.dll
         17 : 762E0000 000AA000 c:\windows\system32\msvcrt.dll
         18 : 76390000 000DB000 c:\windows\system32\kernel32.dll
         19 : 76470000 000C8000 c:\windows\system32\msctf.dll
         20 : 76540000 000C2000 c:\windows\system32\rpcrt4.dll
         21 : 76610000 0004B000 c:\windows\system32\gdi32.dll
         22 : 76660000 0007D000 c:\windows\system32\usp10.dll
         23 : 76730000 000C6000 c:\windows\system32\advapi32.dll
         24 : 76800000 0008D000 c:\windows\system32\oleaut32.dll
         25 : 76890000 00073000 c:\windows\system32\comdlg32.dll
         26 : 76910000 00058000 c:\windows\system32\shlwapi.dll
         27 : 76970000 001E8000 c:\windows\system32\iertutil.dll
         28 : 76B60000 00B10000 c:\windows\system32\shell32.dll
         29 : 77670000 00133000 c:\windows\system32\urlmon.dll
         30 : 77940000 00127000 c:\windows\system32\ntdll.dll
         31 : 77A70000 0001E000 c:\windows\system32\imm32.dll
         32 : 77A90000 00003000 c:\windows\system32\normaliz.dll
         33 : 77AD0000 00006000 c:\windows\system32\nsi.dll
         34 : 77AE0000 0002D000 c:\windows\system32\ws2_32.dll

Call stack  :


Grazie a chiunquer vorrà aiutare.
spettinato
Studente
Studente
 
Messaggi: 7
Iscritto il: 07/10/2010, 10:26

Re: EA e trailing stop

Messaggioda spettinato » 08/10/2010, 11:57

Aggiungo la gestione dello stop loss, che magari impippa tutto.

Codice: Seleziona tutto
  //CHIUSURE (STOP LOSS)
  for (int l_pos_12 = 0; l_pos_12 < OrdersTotal(); l_pos_12++) {
      if (OrderSelect(l_pos_12, SELECT_BY_POS)) {
        if (OrderMagicNumber() == MAGIC_NUMBER) {
            if (OrderType() == OP_BUY && OrderOpenPrice() - STOP_LOSS * poin >= Bid) OrderClose(OrderTicket(), LOTS, Bid, 2, Blue);
            if (OrderType() == OP_SELL && OrderOpenPrice() + STOP_LOSS * poin <= Ask) OrderClose(OrderTicket(), LOTS, Ask, 2, Blue);
        }
      }
  }
spettinato
Studente
Studente
 
Messaggi: 7
Iscritto il: 07/10/2010, 10:26

Re: EA e trailing stop

Messaggioda dail » 08/10/2010, 12:08

Sintatticamente parlando non vedo problemi, il crash potrebbe essere dovuto ad un loop infinito...anche se in questi due pezzi di codice non mi sembra.
Potresti postare tutto il resto?

Oppure....togliere tutto il resto e mettere solo questi due pezzetti di codice nell'EA?
Avatar utente
dail
Moderatore
Moderatore
 
Messaggi: 306
Iscritto il: 12/03/2010, 13:38

Re: EA e trailing stop

Messaggioda dail » 08/10/2010, 12:12

Magari la doppia dichiarazione del contatore da fastidio...provato nel secondo loop a mettere solo for(l_pos_12 = 0 ...) ?
Avatar utente
dail
Moderatore
Moderatore
 
Messaggi: 306
Iscritto il: 12/03/2010, 13:38

Re: EA e trailing stop

Messaggioda spettinato » 08/10/2010, 12:25

dail ha scritto:Magari la doppia dichiarazione del contatore da fastidio...provato nel secondo loop a mettere solo for(l_pos_12 = 0 ...) ?


Quale doppia dichiarazione?
spettinato
Studente
Studente
 
Messaggi: 7
Iscritto il: 07/10/2010, 10:26

Re: EA e trailing stop

Messaggioda dail » 08/10/2010, 12:33

tu hai postato due for, con la variabile contatore con lo stesso nome, solo che hai fatto due volte "int", magari gli da fastidio quello, oppure l'hai messe in funzione separate?

Ha provato a togliere il codice e mettere solo questi due spezzoni?
Avatar utente
dail
Moderatore
Moderatore
 
Messaggi: 306
Iscritto il: 12/03/2010, 13:38

Re: EA e trailing stop

Messaggioda spettinato » 15/10/2010, 21:20

Ciao a tutti,
ecco il codice che ho scritto. Mi dà un problema però.
Infatti se compro a 10.00000 e il prezzo sale a 10.00110 e ho un breakeven di 5 pips, il prezzo di stop loss diventa giustamente 10.00060, e ok. Ma se il prezzo riscende, anche il prezzo dello stoploss scende, e invece dovrebbe restare fermo!

La condizione che ho usato è:
Codice: Seleziona tutto
if(OrderStopLoss()<=OrderOpenPrice())

con l'idea che se lo stoploss già impostato è maggiore di quello che andrebbe a mettere non deve modificarlo. Dove sbaglio? ecco il codice completo.

Grazie a tutti!



Codice: Seleziona tutto
for (int l_pos_12 = 0; l_pos_12 < OrdersTotal(); l_pos_12++)
  {
      if (OrderSelect(l_pos_12, SELECT_BY_POS))
      {
        if (OrderMagicNumber() == MAGIC_NUMBER)
        {           
            if (OrderType() == OP_BUY && OrderOpenPrice() + BREAKEVEN * poin <= Bid)
            {
               if(OrderStopLoss()<=OrderOpenPrice())
               {
               //se non è ancora mai stato impostato lo stop loss
                  if(OrderStopLoss()<=Bid - BREAKEVEN * poin)
                  {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid - BREAKEVEN * poin ,OrderTakeProfit(),0,Blue);
                  }
               }
               else
               {
               //se lo stop loss è stato impostato precedentemente
                  if(OrderStopLoss()<=Bid - BREAKEVEN * poin)
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid - BREAKEVEN * poin ,OrderTakeProfit(),0,Blue);
               }
            }

            if (OrderType() == OP_SELL && OrderOpenPrice() - BREAKEVEN * poin >= Ask)
            {
            if(OrderStopLoss()>=OrderOpenPrice())
               {
               //se non è ancora mai stato impostato lo stop loss
                  if(OrderStopLoss()>=Ask + BREAKEVEN * poin)
                  {
                  OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BREAKEVEN * poin,OrderTakeProfit(),0,Blue);
                  }
               }
               else
               {
                //se lo stop loss è stato impostato precedentemente
               if(OrderStopLoss()>=Ask + BREAKEVEN * poin)
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask + BREAKEVEN * poin ,OrderTakeProfit(),0,Blue);
               }
            }
           
            if (OrderType() == OP_BUY && OrderOpenPrice() - STOP_LOSS * poin >= Bid) OrderClose(OrderTicket(), LOTS, Bid, 2, Blue);
           
            if (OrderType() == OP_SELL && OrderOpenPrice() + STOP_LOSS * poin <= Ask) OrderClose(OrderTicket(), LOTS, Ask, 2, Blue);
        }
      }
  }
spettinato
Studente
Studente
 
Messaggi: 7
Iscritto il: 07/10/2010, 10:26

Re: EA e trailing stop

Messaggioda spettinato » 18/10/2010, 19:47

nessuna idea?
spettinato
Studente
Studente
 
Messaggi: 7
Iscritto il: 07/10/2010, 10:26

Prossimo

Torna a Expert Advisors

Chi c’è in linea

Visitano il forum: CommonCrawl [Bot] e 0 ospiti