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

 
deysmacro:
Bisogna però ricordare che. L'EA chiude solo le operazioni in corso. Devi aprire tu stesso il trade.

100%, nessun problema, anzi, è esattamente quello che sto cercando di ottenere... non voglio che l'EA apra qualsiasi commercio, questo è il MIO lavoro... voglio solo che lo chiuda se più di 2 ordini sono aperti a X profitto e deve considerare lo spread! Lentamente mi ci sto avvicinando... questa cosa della programmazione avrebbe dovuto essere insegnata nelle scuole... hehe peccato che io sia degli anni 80, non ho mai pensato che avrei dovuto passarci, ma più leggo il file di aiuto, lo trovo sempre più intrigante... inoltre, questo forum è pieno di aiuti, grazie a ragazzi come voi.
 
tatyawinchu:

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 a X di profitto dopo lo spread?



Non sono sicuro di cosa intendiate davvero con "La condizione IF dovrebbe controllare che OrdersTotal sia => 2 in modo che il controllo venga passato per chiudere tutti gli ordini aperti a X profitti dopo lo spread".

ma sono abbastanza sicuro che non succederà nulla di veramente brutto se ci provi. E se non funziona, non c'è niente da perdere. Almeno ci hai provato.

 
tatyawinchu:

100%, nessun problema, anzi questo è esattamente quello che sto cercando di ottenere ... non voglio che l'EA apra qualsiasi commercio, questo è il MIO lavoro ... voglio solo che lo chiuda se più di 2 ordini sono aperti a X profitto e deve considerare lo spread! Lentamente mi ci sto avvicinando... questa cosa della programmazione avrebbe dovuto essere insegnata nelle scuole... hehe peccato che io sia degli anni 80, non ho mai pensato che avrei dovuto passarci, ma più leggo il file di aiuto, lo trovo sempre più intrigante... inoltre, questo forum è pieno di aiuti, grazie a ragazzi come voi.

Basta includere spread in totalprofit.
 
thrdel:


Non sono sicuro di cosa intendiate veramente con "La condizione IF dovrebbe controllare che OrdersTotal sia => 2 in modo che il controllo venga passato per chiudere tutti gli ordini aperti a X profitti dopo lo spread".

ma sono abbastanza sicuro che non succederà nulla di veramente brutto se ci provi. E se non funziona, non c'è niente da perdere. Almeno ci hai provato.


Non sono sicuro di cosa intendi con "La condizione IF dovrebbe controllare che OrdersTotal sia => 2 in modo che il controllo venga passato per chiudere tutti gli ordini aperti a X profitti dopo lo spread".

Hmm... Ok, quello che voglio dire è

Se ... il numero totale di ordini aperti è maggiore o uguale a 2 ... solo allora andare avanti e seguire il resto del codice ...

SE il numero totale di ordini aperti .. [ OrdersTotal() ?? ] .. è inferiore a 2 .. che significa che è o 1 o 0, allora non fare nulla ..

Ora, qui c'è un problema per me, il file di aiuto di mql 4 dice che OrdersTotal() conta tutti gli ordini, a mercato E in sospeso ... Sto cercando di cercare una funzione che possa ottenere solo gli ordini a mercato dal vivo, non quelli in sospeso, OPPURE, può essere calcolato matematicamente, dato che per lo più ho solo max 2 operazioni in corso alla volta.

Questa spiegazione è più chiara?

Grazie per il tempo che mi stai dedicando.

 

thrdel vuole che proviate prima e vediate cosa succede anche se sono abbastanza sicuro di quello che potrebbe succedere.

 
deysmacro:

thrdel vuole che tu provi prima e veda cosa succede.



Sì, andando attraverso il file di aiuto per trovare la funzione corretta che dà solo gli ordini aperti.
 
Mostraci il tuo codice quando riesci a completarlo e ti aiuteremo se possiamo.
 
deysmacro:
Mostraci il tuo codice quando riesci a completarlo e ti aiuteremo se possiamo.

Ricevuto! Grazie mille...

..

e non sono riuscito a trovare una funzione che restituisca solo gli scambi aperti... Questo va bene, quindi ho aggiunto il ciclo IF come segue...

//+------------------------------------------------------------------+
//|                    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()

//+------------------------------------------------------------------+
//| This is just the single line of code that I have added
//+------------------------------------------------------------------+
{ 
 if (OrdersTotal()>=2)

 {
   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);
   }
 }

Ho aggiunto la condizione IF all'inizio che va if (OrdersTotal()>=2) .. [ Evidenziato nel codice sopra con un commento ]

Ora, c'era un problema di chiusura del {} come al primo tentativo ho provato come

{ 
 if (OrdersTotal()>=2)
}

 {
   if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       { .. etc etc 
     

quindi fondamentalmente come codificatore per la prima volta, ho provato a mettere quella condizione if fuori per essere controllata PRIMA .. non ha compilato ..

Così ho chiuso il {} ottenendo la condizione all'interno... ora ha compilato con solo 2 avvertimenti e nessun errore...

il valore di ritorno di 'OrderSelect' dovrebbe essere controllato Testcode 1.mq4 56 8

non tutti i percorsi di controllo restituiscono un valore Testcode 1.mq4 86 2

Quindi compila... è logicamente corretto?

[Inoltre, non sto rimuovendo nessuna informazione sul copyright, sto solo aggiungendo una riga, rimuovere i suoi dettagli sarebbe totalmente scorretto da parte mia .. qual è la regola riguardo a questo? ]

 
tatyawinchu:

sì, andando attraverso il file di aiuto per trovare la funzione corretta che dà solo gli ordini aperti.


Mi dispiace molto amico, come ho detto prima, non sono molto bravo a spiegare. Capisco che tu voglia trovare una funzione che conti solo gli ordini di acquisto o di vendita aperti, ti ho chiesto di guardare il mio codice, te l'ho spiegato al meglio delle mie capacità e non sono stato così bravo come ho sperato.

Ti ricordi il primo passo che ho menzionato riguardo a quel codice?

Era : CountMyOrders. Ora, se tu guardassi il codice come ti ho chiesto, ecco cosa troveresti

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CountMyOrders()
  {
   myOrders=0;
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
         Print("Failed to select order, error : "+ErrorDescription(GetLastError()));
      //skip orders placed by other EA's
      if(OrderMagicNumber()>0)continue;
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
        {
         myOrders++;
        }
     }
   return(myOrders);
  }

C'è scritto :

if(OrderType()==OP_BUY || OrderType()==OP_SELL)

Devi sapere cosa significa OP_BUY e OP_SELL.

Nessun ordine pendente conta, nessun open buy stop, nessun open sell stop, nessun buy limit o sell limit, solo open buy e open sell.

Come posso spiegare meglio questo pezzo di codice e cosa fa?

Puoi continuare a cercare nella documentazione e familiarizzare con essa, ma posso dirti che la funzione che stai cercando non c'è.

Il mio EA dice che se non ci sono ancora ordini, aspetta:

if(myOrders<1)

Vuoi che il tuo aspetti 2 ordini. Se avessi prestato un po' di attenzione a quello che ho detto, probabilmente avresti notato che tutto quello che devi fare è :

if(myOrders<2)

Voilla. Ora aspetta che i 2 ordini siano in posizione - nessun pendente, solo acquisto o vendita!

Vi prego di capire che ho cercato di mettere insieme il codice per soddisfare anche altri che potrebbero essere alla ricerca di un modo per gestire i trade aperti e non tanto un custom progettato per uno scopo specifico.

È inteso come un esempio, prendete quello che pensate sia buono, lasciate fuori il resto, miglioratelo, cambiatelo, imparate da esso se potete e sperimentate con esso.

Spero che abbia senso.

 
thrdel:


Mi dispiace molto amico, come ho detto prima, non sono molto bravo a spiegare. Capisco che tu voglia trovare una funzione che conti solo gli ordini di acquisto o di vendita aperti, ti ho chiesto di guardare il mio codice, te l'ho spiegato al meglio delle mie capacità e non sono stato così bravo come ho sperato.

Ti ricordi il primo passo che ho menzionato riguardo a quel codice?

Era : CountMyOrders. Ora, se tu guardassi il codice come ti ho chiesto, ecco cosa troveresti

C'è scritto :

Devi sapere cosa significa OP_BUY e OP_SELL.

Nessun ordine pendente conta, nessun open buy stop, nessun open sell stop, nessun buy limit o sell limit, solo open buy e open sell.

Come posso spiegare meglio questo pezzo di codice e cosa fa?

Puoi continuare a cercare nella documentazione e familiarizzare con essa, ma posso dirti che la funzione che stai cercando non c'è.

Il mio EA dice che se non ci sono ancora ordini, aspetta:

Vuoi che il tuo aspetti 2 ordini. Se avessi prestato un po' di attenzione a quello che ho detto, probabilmente avresti notato che tutto quello che devi fare è :

Voilla. Ora aspetta che i 2 ordini siano in posizione - nessun pendente, solo acquisto o vendita!

Vi prego di capire che ho cercato di mettere insieme il codice per soddisfare anche gli altri che potrebbero essere alla ricerca di un modo per gestire gli scambi aperti e non tanto un custom progettato per uno scopo specifico.

È inteso come un esempio, prendete ciò che pensate sia buono, lasciate fuori il resto, miglioratelo, cambiatelo, imparate da esso se potete e sperimentate con esso.

Spero che abbia senso.

Grazie mille... in primo luogo, non sei tu! Sono io! hehe sono il principiante qui... le tue spiegazioni sono perfette! solo un po' difficile da digerire ora come sto andando passo dopo passo... parola per parola attraverso i file di aiuto =) e chiedendo aiuto come mi blocco... piuttosto, ora a causa del tuo codice, sto leggendo la sezione FUNCTION nel file di aiuto! ! Inoltre, potresti compilare il codice che ho incollato sopra alla tua fine e vedere se c'è qualcosa di sbagliato nella logica di quella condizione IF? Tralasciamo per ora che conta tutti gli ordini... diciamo che se questo EA viene eseguito quando non ci sono ordini aperti, poi il primo ordine è stato aperto e qualche tempo dopo viene attivato un altro ordine... il flusso logico di quella condizione IF è corretto? Inoltre, ora sono quasi sicuro che questo codice ha solo bisogno di una linea di correzione o simili[Inoltre, ho abbandonato l'idea di postare questo come un lavoro ... ], non devo complicarlo per analizzare se omettere o meno gli ordini da altri EA perché per me questo sarà l'unico EA in esecuzione, quindi non devo assegnare specificamente un numero magico ad ogni ordine ecc ... ora ho solo bisogno di scoprire se la logica del mio IF è corretta ^^