Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 71

 
trader781:

Ok, facciamo così.

for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }

giusto?

Avete anche bisogno di parentesi graffe, altrimenti solo la prima linea dopoif() funzionerà. Avete molte staffe dove non ne avete bisogno, e poi non ci sono staffe dove ne avete bisogno. Questo rompe la logica del programma, a volte molto. E il contatore non deve essere globale, ma non è così importante.

for(i=OrdersTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()
         && OrderMagicNumber()==Magic && OrderType()<2)
         {
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
         }
}
 
sile:
Aiutatemi a scrivere la condizione: se l'importo dei fondi disponibili nel conto è inferiore al 50% del deposito, allora {azione} MT5

Da quale deposito? Iniziale? O dal saldo attuale?

Se rispetto all'equilibrio, allora sì:

if(AccountInfoDouble(ACCOUNT_MARGIN_FREE)/AccountInfoDouble(ACCOUNT_BALANCE)<0.5) {действие}
 
Vitalie Postolache:


Pensavo che volesse un mt5.

Ho una buona idea, posso scriverla, puoi mettere il contatore all'inizio dell'ontik e lavorarci.

Ora come faccio a ricavarne qualcosa nel mio caso?

e inoltre, se l'array sarà bidimensionale e più (c'è una differenza nella scrittura e nell'estrazione)

possiamo parlare un po' di questo punto?
 
trader781:

Ok, facciamo così.

struct myorder
{
int    Ticket;
double orderopenprice;
int   ordertype;
double profit;
double stoploss;
double  lot;
};

myorder orders[];

int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }
}    


giusto?

No, non è giusto.

Il tuo array orders[] ha valore zero. Dove scriverete i dati? In un array con dimensione zero? Assolutamente no. Dovreste incrementare la dimensione dell'array di count1+1 - se incrementate il contatore dopo aver scritto nell'array. Di solito, il contatore viene incrementato prima di scrivere, poi si aumenta la dimensione dell'array della dimensione del contatore, e poi si scrivono i valori secondo l'indice [count1-1]. E, come è stato giustamente notato sopra - è necessario racchiudere tutte le altre azioni tra parentesi graffe dopo aver controllato le condizioni.

Perché cercate di fare qualcosa senza conoscenze e idee elementari? Solo "per fortuna"?

 
Salve. C'è un codice universale che può essere inserito alla fine della descrizione di qualsiasi indicatore che permetterebbe di cambiare il TF di quell'indicatore (cioè da M5 a M1)?
 
Artyom Trishkin:

No, non lo è.

Il tuo array orders[] ha valore zero. Dove scriverete i dati? In un array con dimensione zero? Assolutamente no. Dovreste incrementare la dimensione dell'array di count1+1 - se incrementate il contatore dopo aver scritto nell'array. Di solito, il contatore viene incrementato prima di scrivere, poi si aumenta la dimensione dell'array della dimensione del contatore, e poi si scrivono i valori secondo l'indice [count1-1]. E, come è stato giustamente notato sopra - è necessario racchiudere tutte le altre azioni tra parentesi graffe dopo aver controllato le condizioni.

Perché cercate di fare qualcosa senza conoscenze e idee elementari? Solo "per fortuna"?

Non tiriamo pisciate e uova marce sulla capacità di qualcuno di imparare il materiale. Il tuo suggerimento per risolvere il mio problema è stato quello di costruire una serie di strutture. Ho aperto i libri di testo e li ho incollati insieme come ho potuto capire, e ho gettato il codice qui per la revisione pubblica per misurare quanto sia corretto il tutto. Non penserete mica che io faccia subito una variante ideale?
 
trader781:
Non tiriamo cazzi e uova marce contro la capacità di apprendimento di qualcuno. La tua proposta di risolvere il mio problema era attraverso la via della costruzione di una serie di strutture. Ho aperto i libri di testo e li ho incollati insieme come ho potuto capire, e ho gettato il codice qui per la revisione pubblica per misurare quanto sia corretto il tutto. Non penserete mica che io faccia subito una variante ideale?
Dovrei rifiutarmi di aiutarti dopo queste fantasie selvagge? Vi imploro un'ultima volta: scrivete l'algoritmo su un pezzo di carta e ripassatelo con una matita alcune volte. Scrivete i valori e la dimensione dell'array - cosa e dove sarà scritto ad ogni iterazione del ciclo. Non cercate pezzi di codice che vi sembrano adatti.
Capire che insegnare è difficile, specialmente quando uno non vuole veramente imparare.
 
Artyom Trishkin:
Dovrei essere scoraggiato dall'aiutare dopo una fantasia così violenta. Vi imploro un'ultima volta: scrivete l'algoritmo su un pezzo di carta e ripassatelo con una matita alcune volte. Scrivete i valori e la dimensione dell'array - cosa e dove sarà scritto ad ogni iterazione del ciclo. Non cercate pezzi di codice che vi sembrano adatti.
Capire che insegnare è difficile, specialmente quando una persona non vuole veramente imparare.

Artyom, è comprensibile, ma anche io posso essere compreso in questo caso. Non funziona niente e non funziona nella versione attuale. Ho scritto per diverse pagine sulla necessità del comando stesso di estrarre l'elemento richiesto dell'array dato e non ho idea di come dovrebbe essere scritto per questo caso particolare, per esempio lo stop loss per il quinto ordine.

Per quanto riguarda la matita e la foglia - il bot è già pronto da un mese e piomba perfettamente su qualsiasi strumento, voglio solo modificarlo aggiungendo un ramo di media irregolare.

 
trader781:

Artyom, è comprensibile, ma anche io posso essere compreso in questo caso. Niente funziona e non funzionerà nella variante attuale. Ho scritto per diverse pagine sulla necessità del comando stesso di estrarre l'elemento richiesto di questo array e che non ho idea di come sia scritto per questo caso particolare, per esempio stoploss per il 5° ordine.

Non ho idea di come scriverlo per questo caso particolare, per esempio, stoploss per il 5° ordine.

Non ho un tale comando. Devo fare il mio. Cioè - funzione.
 
Artyom Trishkin:
Non esiste un comando simile. Dovete farvene una vostra. Cioè - una funzione.

OK, allora, come ho capito, otteniamo tre diverse funzioni personalizzate con il ritorno di quella giusta (se cerchiamo tre parametri diversi)

ArraySort

poi

ArrayBsearch per il numero giusto

e poi come faccio a gestirlo?

Esattamente la transizione da un array a un elemento della struttura