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
#include <Expert\Signal\SignalMA.mqh>
CSignalMA SignalMA;
int TickCount;
string Str;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
TickCount=0;
SignalMA.Symbol(Symbol());
SignalMA.Period(PERIOD_H1);
SignalMA.Weight(0.5);
SignalMA.PeriodMA(20);
SignalMA.Shift(0);
SignalMA.Method(MODE_SMA);
SignalMA.Applied(PRICE_CLOSE);
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
TickCount++;
Str = "LongCondition = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
Comment(Str);
}
//+------------------------------------------------------------------+
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Period: cambiare il timeframe è vietato
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Symbol: cambiare il simbolo è vietato
Posso usare i moduli dei segnali di trading separatamente dagli EAs Wizard? A scopo di test, ho scritto
#include <Expert\Signal\SignalMA.mqh>
CSignalMA SignalMA;
int TickCount;
string Str;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
TickCount=0;
SignalMA.Symbol(Symbol());
SignalMA.Period(PERIOD_H1);
SignalMA.Weight(0.5);
SignalMA.PeriodMA(20);
SignalMA.Shift(0);
SignalMA.Method(MODE_SMA);
SignalMA.Applied(PRICE_CLOSE);
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
TickCount++;
Str = "LongCondition = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
Comment(Str);
}
//+------------------------------------------------------------------+
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Period: cambiare il timeframe è vietato
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Symbol: cambiare il simbolo è vietato
Il seguente codice:
Chiama il costruttore di label ogni volta che la funzione viene chiamata.
Con il seguente codice: nel primo caso l'indicatore è impostato, nel secondo caso no (scambiato con le barre).
La seconda opzione di questa libreria produce 0. Tutte le altre funzioni sembrano funzionare.
Per il prossimo codice: nel primo caso l'indicatore è impostato, nel secondo caso non lo è (commutato con barre).
Per quanto ho capito, al momento tutti e tre i parametri sono obbligatori.
Pertanto, è necessario specificare il numero della finestra (varianti: 0 - finestra principale, ChartIndicatorsTotal() - nuova finestra, da 0 aChartIndicatorsTotal()-1 - una finestra esistente).
Ciò che non dà errori non è buono.
Per questa libreria per la seconda opzione stampa 0. Tutte le altre funzioni sembrano funzionare.
Molto probabilmente prima di ottenere il prezzo dovresti usare i refresh (almeno RefreshRates).
La variante giusta dovrebbe assomigliare a questa
Grazie, ha funzionato davvero con Bid, dopo aver specificato il refresh.
Ma l'uscita dell'indicatore, usando la libreria, richiede 2 parametri, una sottofinestra e un handle. Altrimenti dice che il numero di parametri è sbagliato, non riesco a capirlo, perché la libreria usa lo stesso ChartIndicatorAdd.
Grazie, ha funzionato davvero con Bid, dopo aver specificato il refresh.
Ma l'uscita dell'indicatore, usando la libreria, richiede 2 parametri, una sottofinestra e un handle. Altrimenti dice che il numero di parametri è sbagliato, non riesco a capirlo, perché la libreria usa lo stesso ChartIndicatorAdd.
L'utilizzo della libreria richiede 2 parametri. Grafico e sottofinestra.
Senza manico? E come farà il sistema a sapere quale giradischi usare? ...Finora mi sono fidato di ciò che è scritto :) Il substrato e la maniglia.
Senza manico? Come farà il sistema a sapere quale indicatore usare? Finora mi sono fidato dei testi :) Sottofinestra e maniglia.
Informazioni sulla biblioteca (dall'aiuto della classe)
IndicatoreAggiungi un appuntamento a
Aggiunge un indicatore con l'handle specificato alla finestra del grafico specificato.
Per quanto riguarda il lavoro diretto di ChartIndicatorAdd.
ChartIndicatorAdd
Aggiunge un indicatore con l'handle specificato alla finestra del grafico specificato.
Per quanto riguarda la classe CChart.
Per evitare domande inutili, cerchiamo di seguire tre regole fondamentali:
1. Guardiamo il codice sorgente, se qualcosa non è chiaro facciamo riferimento alla documentazione (il codice sorgente dirà sempre la "verità", ma la documentazione può anche mentire);
2. Se l'implementazione OOP è importante per noi, partiamo dalla descrizione di una classe particolare e arriviamo fino agli "implementatori diretti". Se il "lavoro reale" è importante, OOP dovrebbe essere studiato per ultimo (esame del codice verso il basso/alto);
3. se dopo aver letto la documentazione e le fonti qualcosa non è chiaro, andate nel forum.
Direttamente sull'implementazione del metodo IndicatorAdd in una classe
Se guardate il codice sorgente diventa chiaro che il metodo ottiene subwindow e handle (come notato nella guida), e il terzo parametro è preso dai dati memorizzati nella classe stessa (intendo l'identificatore del grafico).