Per favore, guidatemi per quanto riguarda lo spread - pagina 3

 
EA starts 
---> Does nothing till there is 0 or 1 order 
----> Makes a 'call open sound' when 2nd order gets triggered 
----> Closes both orders at X amount of pure profit [after considering spread] and makes a 'call close sound' ]

of course, call open and call close sound files can be any small wave files.. easily available on mt4 itself. .. 
I think these things can be achieved in the above EA that I had posted by changing a few things !
Wow ... quello che vuoi è fondamentalmente abbastanza facile da codificare.
 
deysmacro:
Wow ... quello che vuoi è fondamentalmente abbastanza facile da codificare.


Puoi guidarmi a questo? Ho già questo dal web

//+------------------------------------------------------------------+
//|                    CloseTrades_After_Account_Profit_Reached.mq4  |
//|                                     Copyright © 2007, Tradinator |
//|                                          tradinator.fx@gmail.com |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2007, Tradinator"
#property link      "tradinator.fx@gmail.com"


                                       
extern double My_Money_Profit_Target=100;     //The amount of money profit at which you want to close ALL open trades.
extern string Profit_Target= "Enter above To Close all OPEN trades when amount of profit is Reached in Account and not per OPEN trade! ";
                                          
int Slippage=5;
int i;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start()
{
if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
       int type   = OrderType();
               
       bool result = false;
              
       switch(type)
          {
          //Close opened long positions
          case OP_BUY  : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Slippage,Pink);
                         break;
               
          //Close opened short positions
          case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Slippage,Pink);
                          
          }
          
       if(result == false)
          {
            Sleep(0);
          }  
       }
      Print ("Account Profit Reached. All Open Trades Have Been Closed");
      return(0);
   }  
   
   Comment("Balance: ",AccountBalance(),", Account Equity: ",AccountEquity(),", Account Profit: ",AccountProfit(),
           "\nMy Account Profit Target: ",My_Money_Profit_Target);
   
  return(0);
}

Ora, ho detto chiaramente che non sono un codificatore, ma penso che ho bisogno di qualche linea sotto "int start() " che conti il numero di ordini ESEGUITI [non pendenti] e poi passi al prossimo codice solo se sono 2 ed esegua il resto del codice. ..if (AccountProfit()>= My_Money_Profit_Target)... etc

giusto? Come dire tale linea in MQL?

int start()
{
 {
   if (Ordertotal()<=1)  ------>   See , something here which says only execute lower code if total executed orders are two else dont go to lower code.. I know that syntax is totally busted, trying to push the concept                                                                                                             
                                   as a weak non coder mind ;( .. so till total open orders are less than or equal to 1 means not 2, the code below that line wont come into play !         

      if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
 
thrdel:

deVries,

tutto fallisce e non dovrei farlo se lo dici tu, ma visto che non vedo davvero molto aiuto nella tua risposta .....

Capisci che il codice non è un EA commerciale destinato alla vendita ad un cliente pignolo, vero Stiamo cercando di risolvere qualcosa e se non vuoi aiutare, dovresti almeno lasciare perdere.

Credi davvero che se cambio il time frame diverse volte..... cosa? Lo slippage sarà di 3000000 ? Non nel mio MT4 a quanto pare. E se non mi credi, fai un test tu stesso.

Il mio test dice che quando si cambia il time frame, l'EA passa attraverso il ciclo di deinit/init e poiché il codice menzionato è nell'OnInit, lo Slippage sarà proprio a 30 punti ogni volta.

Come chiunque può vedere, cambiare i time frame non porterà lo Slippage a un milione, se questo è ciò che stai suggerendo.

E no, non è un'immagine falsa, è reale, potete controllare il tempo di cambiare ogni time frame.

Spero che aiuti.


questo fallisce .....

per molti scambi il prc non è il prezzo giusto

cosa hai da dire su questo...

leggi Doppie chiamate a OnInit() e OnDeinit()

ci sono problemi con le nuove versioni

(Il problema del doppio OnInit() sembra essere risolto nella build 628 ma non hanno ancora questa versione)

 
deVries:

questo fallisce .....

per molti scambi il prc non è il prezzo giusto

cos'hai da dire su questo...

hehehe, ora voi due vi siete addentrati nella tana del coniglio e state discutendo di qualcosa che sta facendo volare gli uccelli sopra la mia testa! xD ... potreste dare un'occhiata a quella linea di codice zoppo che ho aggiunto? =D

 
tatyawinchu:

hehehe, ora voi due vi siete addentrati nella tana del coniglio e state discutendo di qualcosa che sta facendo volare gli uccelli sopra la mia testa! xD ... potresti dare un'occhiata a quella linea di codice zoppo che ho aggiunto? =D


Ask e Bid corretti sono i prezzi di chartSymbol se il trade è un altro Symbol closingprice è sbagliato

       if(result == false)
          {
            Sleep(0);
          }  

che effetto avrà questo?

sta fallendo??? OrderType è pending trade ???

o è la chiusura fallisce

in questo caso è necessario ottenere l'ultimo errore GetLastError() conoscendone il motivo

 
tatyawinchu:

L'EA si avvia ---> Non fa nulla finché non c'è 0 o 1 ordine ----> Emette un 'suono di apertura di chiamata' quando il secondo ordine viene attivato ----> Chiude entrambi gli ordini a X quantità di puro profitto [dopo aver considerato lo spread] ed emette un 'suono di chiusura di chiamata' ]

Naturalmente, i file audio di apertura e chiusura delle chiamate possono essere qualsiasi piccolo file wave... facilmente disponibile su mt4 stesso. .. penso che queste cose possano essere raggiunte nell'EA che ho postato sopra cambiando alcune cose! hehehehe aiutami plz =D

Ciao tatyawinchu,

Credo che tu non abbia capito bene cosa fa l'EA postato. Lascia che ti guidi passo dopo passo e decidi se è qualcosa che puoi o non puoi usare per il tuo scopo.

Lo stop loss basato sul conto è lì per proteggere chiunque voglia usarlo e non raccomanderei mai di essere sul mercato senza almeno uno stop di emergenza, se hai 10 000 nel tuo conto e vuoi rischiare tutto, basta impostare lo StopLossLimit a 10 000.

Decidete voi.

Ora, torniamo al codice, è facile come 1, 2, 3 :

1. Se leggete il codice nella funzione OnTick - che è la parte che viene eseguita ad ogni tick - vedrete che la prima cosa che fa è : CountMyOrders. Spero che lo vediate. Poi, se myOrders <1 significa che non ci sono ancora ordini, controlla l'equity del conto, lo ricorda e basta.

Non fa altro. Il prossimo tick, se ancora non ci sono ordini, torna ad aspettare. Piuttosto noioso essere un EA, vero?

2. Quando un ordine viene piazzato, myOrders<1 non è più vero, quindi al prossimo tick, salta alla linea successiva e calcola il profitto per l'ordine o gli ordini che sono sul mercato.

3. Successivamente, confronterà la somma di tutti gli ordini con il profitto target.

Facile, no? Se il profitto raggiunge l'obiettivo, la linea successiva dice : ExitAll . E apparirà un avviso (con suono) sullo schermo che vi dirà che gli ordini hanno raggiunto il loro obiettivo!

Non è stato così male, vero?

E ho dimenticato di dire che se il mercato vi va contro e la perdita di capitale raggiunge il livello prestabilito, vi porterà fuori dal mercato per proteggere il capitale rimasto.

E questo è il miglior aiuto che posso darti.

Se hai bisogno di più di questo, probabilmente è un lavoro per i ragazzi che fanno più codice personalizzato di questo.

Spero che sia d'aiuto.

Saluti

 
thrdel:

Ciao tatyawinchu,

Credo che tu non abbia capito bene cosa fa l'EA postato. Lascia che ti guidi passo dopo passo e decidi se è qualcosa che puoi o non puoi usare per il tuo scopo.

Lo stop loss basato sul conto è lì per proteggere chiunque voglia usarlo e non raccomanderei mai di essere sul mercato senza almeno uno stop di emergenza, se hai 10 000 nel tuo conto e vuoi rischiare tutto, basta impostare lo StopLossLimit a 10 000.

Decidete voi.

Ora, torniamo al codice, è facile come 1, 2, 3 :

1. Se leggete il codice nella funzione OnTick - che è la parte che viene eseguita ad ogni tick - vedrete che la prima cosa che fa è : CountMyOrders. Spero che lo vediate. Poi, se myOrders <1 significa che non ci sono ancora ordini, controlla l'equity del conto, lo ricorda e basta.

Non fa altro. Il prossimo tick, se ancora non ci sono ordini, torna ad aspettare. Piuttosto noioso essere un EA, vero?

2. Quando un ordine viene piazzato, myOrders<1 non è più vero, quindi al prossimo tick, salta alla linea successiva e calcola il profitto per l'ordine o gli ordini che sono sul mercato.

3. Successivamente, confronterà la somma di tutti gli ordini con il profitto target.

Facile, no? Se il profitto raggiunge l'obiettivo, la linea successiva dice : ExitAll . E apparirà un avviso (con suono) sullo schermo che vi dirà che gli ordini hanno raggiunto il loro obiettivo!

Non è stato così male, vero?

E ho dimenticato di dire che se il mercato vi va contro e la perdita di capitale raggiunge il livello prestabilito, vi porterà fuori dal mercato per proteggere il capitale rimasto.

E questo è il miglior aiuto che posso darti.

Se hai bisogno di più di questo, probabilmente è un lavoro per i ragazzi che fanno più codice personalizzato di questo.

Spero che sia d'aiuto.

Saluti


Hmm... sembra che ci stiamo allontanando.

Il mio requisito esatto è il seguente:-

Fase 1 L'EA si avvia.

Fase 2 L'EA controlla il profitto del conto corrente in modo da conoscere il punto di partenza da cui calcolare.

Fase 3 L'EA controlla gli ordini aperti in esecuzione [non in sospeso].

Fase 4 L'EA non fa nulla se non c'è nessun ordine in esecuzione o se c'è solo UN ordine in esecuzione.

Fase 5 L'EA emette un suono quando un SECONDO ordine viene attivato. Questo secondo ordine sarà su un'altra coppia.

Passo 6 L'EA chiude ENTRAMBI gli ordini a X profitti dopo aver preso in considerazione lo SPREAD e fa un suono.... qui ENTRAMBI dovrebbero essere TUTTI gli ordini aperti .. non ha bisogno di cancellare gli ordini in sospeso

Ciò di cui l'EA non ha bisogno .. SL o impostazione TP di qualsiasi tipo ...

Preferibilmente, EA dovrebbe lavorare su ordini più di due, ma non necessario se il suo troppo difficile ..

[ Anche se logicamente sento che non sarà difficile, piuttosto molto facile, perché EA si attiva per chiudere TUTTI gli ordini aperti se sono PIÙ DI 1... cioè 2 o PIÙ automaticamente! quindi questo potrebbe essere già coperto da EA... correggetemi se sbaglio!]

 
deysmacro:
Wow ... quello che vuoi è fondamentalmente abbastanza facile da codificare.

Sei divertente. Sottile ma divertente.
 
thrdel:

Sei divertente. Sottile ma divertente.

cosa succede se posso aggiungere un ciclo IF e poi incollare il resto del codice qui sotto che avvia il ciclo?

La condizione IF dovrebbe verificare che OrdersTotal sia => 2 in modo che il controllo venga passato per chiudere tutti gli ordini aperti al profitto X dopo lo spread?

Come dire all'EA di fare delle annotazioni in certi casi?

Diciamo che faccio quanto segue

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


int start() 
{
if (OrdersTotal()=>2)                                     // Can this work? Can a function be directly called like this?
} 
{
 if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
       int type   = OrderType();
               
       bool result = false;
              
       switch(type)
Ok, cant seem to get out of this box yet ! hehe need to know forum stuff more ! but, as you can see above, if that "if (OrdersTotal()=>2)" is valid, it would directly solve my problems .. because the rest of
the stuff would be executed only if the total running market orders are 2 ! =D ..  and some forum guru please release this text from this src prison box ! ;)
 
Bisogna però ricordare che. L'EA chiude solo le operazioni in corso. Devi aprire tu stesso il trade.