Ma ciò che è mostrato in grassetto non è nella classe CSignalMA, ma compila bene, quando provo a metterlo sul simbolo dà
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
Come posso cambiare simbolo e timeframe per i segnali di trading standard?
Функция распределения рыночных данных не является гауссовой, скорее она похожа на распределение синусоподобной волны. Поскольку большинство индикаторов базируются на предположении о нормальном распределении цен, их нужно "скорректировать". Решением является использование преобразования Фишера, которое преобразует данные таким образом, чтобы они имели распределение, близкое к нормальному. В статье рассмотрена теория прямого и обратного преобразования Фишера и ее применение в трейдинге, разработан модуль торговых сигналов.
Ma ciò che è mostrato in grassetto non è nella classe CSignalMA, ma compila bene, quando provo a metterlo sul simbolo dà
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
Come posso cambiare il simbolo e il timeframe per i segnali di trading standard?
Fondamentalmente, è possibile. Ma l'inizializzazione del modulo dei segnali di trading è tutto un "rituale". Temo di non poter spiegare l'intera procedura di inizializzazione "sulle mie dita".
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.
Karlson:
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).
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.
Aggiunge un indicatore con l'handle specificato alla finestra del grafico specificato.
boolChartIndicatorAdd(
long chart_id, // идентификатор графикаint sub_window // номер подокнаint indicator_handle // хэндл индикатора
);
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).
class CChart : public CObject
{
protected:
longm_chart_id; // chart identifierpublic:
//methods for working with indicatorsbool IndicatorAdd(int subwin,int handle);
}
bool CChart::IndicatorAdd(intsubwin,inthandle)
{
//checking (проверка корректности идентификатора графика)if(m_chart_id<=0) return(false);
//Непосредственно в обработку выдаются три параметраreturn(ChartIndicatorAdd(m_chart_id,subwin,handle));
}
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
#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:
RectLabel* GetLabel() { static bool initialized = false; static RectLabel label("rectlabel sample", 0, 0); if (!initialized) { Pos leftTop = {100, 100}; Rect rect(leftTop, 100, 50); label.Move(rect); label.SetBGColor(clrYellowGreen); label.SetTooltip(" -- Yuuuu! -- "); initialized = true; } return GetPointer(label); }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).