Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 342
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ecco il file .cpp del progetto, dategli un'occhiata e dopo un paio di ricerche su Google e Yandex, non ho trovato nulla di cervellotico, è generalmente comprensibile. Sembra persino semplice.
Ma come funziona? Non sono sicuro di come fare riferimento a questo ddl - dal codice dell'EA? Come? Per prima cosa, si presenta così #include <GetIntValue>.
2. Quando si chiama la dll, non si deve tenere lo studio acceso, giusto? come si esegue?
Si prega di mostrare l'esempio più semplice di chiamare questa dll dal codice mql.
Non capisco qui...
La dimensione del lotto dovrebbe aumentare esponenzialmente (con moltiplicatore 2) se viene aperto un secondo ordine unidirezionale.
Questo è il risultato.
poi come questo
si ottiene un risultato come questo
Allora questo è tutto.
Grazie, ho capito l'idea... ho capito tutto.
a cosa serve quella linea?
datetime o;
Ecco un'altra domanda: ho un ordine trailing. Quando 1 ordine unidirezionale è aperto, tutto funziona bene, se più, non funziona per qualche motivo. Perché?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
Ecco il file .cpp del progetto, dategli un'occhiata e dopo un paio di ricerche su Google e Yandex, non ho trovato nulla di cervellotico, è generalmente comprensibile. Sembra persino semplice.
Ma come funziona? Non sono sicuro di come fare riferimento a questo ddl - dal codice dell'EA? Come? Per prima cosa, si presenta così #include <GetIntValue>.
È più o meno così. Per farlo funzionare, devi compilare la dll e metterla nella cartella experts/libraries (leggi l'aiuto e il tutorial, è dettagliato lì).
2. Quando si chiama la dll, non si deve tenere lo studio acceso, giusto? come viene eseguito?
Ecco un'altra domanda: ho un ordine trailing. Quando 1 ordine unidirezionale è aperto, tutto funziona bene, se più, non funziona per qualche motivo. Perché?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
Poiché avete bisogno di passare dei parametri nella funzione, provate questo
bool IfProfTrail=false; // Usa solo per le posizioni profittevoli - modalità Breakeven
int TrailingStop=0; // Distanza di trascinamento = 0 - minimo consentito
int TrailingStep=1; // Passo di distanza in uscita
Grazie mille!
Ora capisco qual è il problema.
Per l'acquisto ho usato:
Per quanto ne so, l'acquisto è ask, ma iClose(Symbol(),Period(),0) prende i prezzi da bid. Questo può essere il motivo dell'errore.
Ma qui sorge la domanda, perché l'EA non è un EA basato sui Pips, il prezzo è stato nella zona di acquisto per molto tempo e aggiornato con ogni tick.Ora uso la seguente combinazione:
Perché il commercio non si apre? Risulta che l'EA si ferma sull'errore e non vede ulteriori movimenti di prezzo?
Ho preso il modello per il mio Expert Advisor da https://c.mql5.com/mql4/book/mq4/experts/tradingexpert.mq4
Secondo te, dovrei aggiungere alla funzione di gestione degli errori in questo EA un controllo per gli errori 129 e 138?
Se sì, come fare?
Come minimo, dovete avere una vostra funzione per aprire posizioni/impostare ordini che gestisca tutti gli errori. È qui che devi trovare gli ultimi prezzi.
Non ho guardato alcuno spazio vuoto. Ma dirò: l'EA deve gestire tutti gli errori restituiti dal server. E questo non basta. Dovrebbe essere in grado di riprendere le sue posizioni dopo qualsiasi situazione imprevista senza perdita di funzionalità e senza il fallimento dell'algoritmo, e continuare il suo lavoro come se non fosse successo nulla di straordinario.
Come minimo dovreste avere una vostra funzione per aprire posizioni/impostare ordini che gestisca tutti gli errori. È lì che devi trovare i prezzi più recenti.
Non ho guardato nessun progetto. Ma vi dirò: dovete gestire tutti gli errori restituiti dal server nel vostro EA. E questo non è sufficiente. Deve essere in grado di riprendere le sue posizioni dopo qualsiasi situazione imprevista, senza perdere la funzionalità, senza alcun fallimento del suo algoritmo, e continuare il suo lavoro come se nulla di straordinario fosse accaduto.
Il modello è tratto da un libro di testo. Non sono molto bravo con le funzioni di gestione degli errori.
All'apertura dell'ordine, c'è RefreshRates(); (ho sostituito Bids e Asks con Market Info come suggerito).
E la funzione di gestione degli errori:
Volevo chiedere. Voglio chiedere: posso aggiungere un'altra linea di 129 errori?