Non sai come controllare il valore di ritorno per lo zero? E non sapete come uscire da OnCalculate() con un ritorno di zero? Non avete mai provato a cercare informazioni sul sito web?
Ottenere il valore richiesto dalla funzione
Controlla se è zero
Se è zero, allora ritorna 0;
Se non è zero, allora al passo 3
Lavorare con questo valore
Non avrei mai pensato che avrei raccontato le basi della logica su questa risorsa a un uomo con un rating superiore a 13 mila...
Questo non è un indicatore.
Ho intenzionalmente specificato se devo fare controlli ad ogni chiamata o uno all'inizio di OnTick è sufficiente...
I ritorni non sono accettabili per me ... e per loop l'attesa nel tester è impossibile, e nel reale dovrebbe funzionare (o no?).
Il mio voto non è per la programmazione, non sono un programmatore, e sto imparando questo business complicato solo grazie a persone come te, apprezzo molto il feedback di persone competenti.
Salve. Per qualche motivo Handel trasmette solo quando è impostato su tutti i periodi, ma ho impostato su un periodo specifico e non c'è nulla. Non so quale sia il problema. Ho provato a digitare direttamente in handel non da variabili globali, il risultato è lo stesso. Cosa c'è che non va? Ho bisogno che il valore sia di un periodo.
//+------------------------------------------------------------------+//| 77777.mq5 |//| Copyright 2019, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2018, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers1#property indicator_plots0//+----------------------------------------------+//| Параметры отрисовки индикатора 1 |//+----------------------------------------------+//----inputstring xBars="2018.11.19 00:00"; //Дата начала отсчетаinputbool DataBars=false; //Считать по дате (true)inputint InpMAShift=1; //Сдвиг бара расчета inputENUM_TIMEFRAMES Timeframes=PERIOD_D1; //Таймфрейм скользящейinputENUM_MA_METHOD Method=MODE_EMA; //Метод расчета скользящейinputENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; //Расчет цены скользящейinputENUM_LINE_STYLE MAStyle=STYLE_DASH; //Стиль всех скользящих линийinputint InpMAPeriod1=5; //Скользящая 1 периода//----int handle_ma,shift;
double BufferPrice[];
//---int period;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---
period=(InpMAPeriod1<1 ? 1 : InpMAPeriod1);
//---SetIndexBuffer(2,BufferPrice,INDICATOR_CALCULATIONS);
ArraySetAsSeries(BufferPrice,true);
//--- create MA's handlesResetLastError();
//----------------------------------------------------------------+// ПРОБЛЕМА ТУТ ////----------------------------------------------------------------+
handle_ma=iMA(NULL,PERIOD_D1,period,0,MODE_SMA,PRICE_CLOSE); //ПРОБЛЕМА ТУТ
// handle_ma=iMA(NULL,PERIOD_CURRENT,period,0,MODE_SMA,PRICE_CLOSE); // БЕЗ ПРОБЛЕМЫif(handle_ma==INVALID_HANDLE)
{
Print("The iMA (",(string)period,") object was not created: Error ",GetLastError());
returnINIT_FAILED;
}
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function | //+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
ObjectDelete(0,"Proba");
Comment("");
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Проверка количества доступных баровif(rates_total<4) return0;
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated;
if(limit>1)
{
limit=rates_total-1;
ArrayInitialize(BufferPrice,0);
}
//--- Подготовка данныхint count=(limit>1 ? rates_total : 2),copied=0;
copied=CopyBuffer(handle_ma,0,0,count,BufferPrice);
if(copied!=count) return0;
//---- if(DataBars==false)
shift=InpMAShift;
else
shift=iBarShift(NULL,PERIOD_CURRENT,StringToTime(xBars));
double ma1=BufferPrice[shift];
datetime tm=iTime(NULL,Timeframes,shift);
Comment(NormalizeDouble(BufferPrice[shift],_Digits)," ",shift);
HLine("Proba","",tm,ma1,MAStyle,1,Red);
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+void HLine(string name,
string text,
datetime tm,
double price,
int stl,
int wid,
color clr)
{
if(ObjectFind(0,name)!=0)
{
ObjectCreate(0,name,OBJ_HLINE,0,tm,price);
ObjectSetInteger(0,name,OBJPROP_TIME, tm);
ObjectSetString(0,name,OBJPROP_TEXT,text);
ObjectSetString(0,name,OBJPROP_FONT,"Times New Roman");
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
ObjectSetInteger(0,name,OBJPROP_STYLE, stl);
ObjectSetInteger(0,name,OBJPROP_WIDTH, wid);
ObjectSetInteger(0,name,OBJPROP_COLOR, clr);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
}
}
kopeyka2: Salve. Non riesco a trovare nulla, per qualche motivo l'handel si trasferisce solo quando è impostato su tutti i periodi, ma l'ho impostato su un certo periodo e non succede nulla. Non so quale sia il problema. Ho provato a inserire dati non da variabili globali direttamente in handel, il risultato è lo stesso. Cosa c'è che non va?
ResetLastError();
if(CopyBuffer(handle_ma,0,0,count,BufferPrice)<0)
{
PrintFormat("Failed to copy data from the handle_ma indicator, error code %d",GetLastError());
return(0.0);
}
// copied=CopyBuffer(handle_ma,0,0,count,BufferPrice);
Studia l'errore, Artem ha ragione nel dire che dovresti controllare tutto 10 volte...
2019.01.2520:12:26.169 Test777 (Si Splice,M1) Failed to copy data from the handle_ma indicator, error code 4806
ERRARE_INVALIDO_ARRAY
4006
Array di tipo inadeguato, dimensione inadeguata o oggetto dinamico di array corrotto
kopeyka2: Salve. Ho notato che l'handel si trasferisce solo quando è impostato per tutti i periodi, ma quando lo imposto per un certo periodo, non succede niente. Non capisco quale sia il problema. Ho provato a digitare direttamente in handel non da variabili globali, il risultato è lo stesso. Cosa c'è che non va? Ho bisogno che il valore sia dello stesso periodo.
Prendete esempi dal CodeBase degli indicatori di Scriptor, vero? Giusto? Poi cercate nel suo codice (pubblicato di recente) esempi che hanno MTF nel loro nome, ma senza MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Cioè, se volete ottenere dati sul simbolo corrente, ma da un altro timeframe rispetto al periodo del grafico, allora avete bisogno di un esempio di indicatore multi-timeframe. In MCP non dovreste ancora essere coinvolti - lì sull'OOP con l'uso delle classi standard. Vi confonderete.
È solo per il MA che lavora sul periodo e sul simbolo corrente. Per lavorare su un periodo diverso, il calcolo sarà diverso. Cerca - tutto è vicino, e la direzione che ti ho dato.
Prendete esempi dal CodeBase degli indicatori di Scriptor, vero? Giusto? Poi cercate nel suo codice (pubblicato di recente) esempi che hanno MTF nel loro nome, ma senza MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Cioè, se volete ottenere dati sul simbolo corrente, ma da un altro timeframe rispetto al periodo del grafico, allora avete bisogno di un esempio di indicatore multi-timeframe. In MCP non dovreste ancora essere coinvolti - lì sull'OOP con l'uso delle classi standard. Vi confonderete.
Per esempio, questo calcolo:
è solo per MA che lavora sul periodo corrente e sul simbolo. Per il lavoro su un periodo diverso, il calcolo sarà diverso. Cerca - tutto è vicino, e ti ho dato la direzione.
Per favore, ma ho copiato l'errore sbagliato, dovrebbe essere
ERRATO_INDICATORE_DATI_NON_TROVATO
4806
I dati richiesti non sono stati trovati
Il punto è che il numero di barre è diverso per i diversi TF e questo dovrebbe essere preso in considerazione.
Stavo solo controllando. Ma il PROBLEMA è che avendo impostato handel su un periodo costante, in
CopyBuffer il valore su altri timeframe NON è PERMANENTE. Sul periodo di maniglia impostato il valore era, ma sui timeframe più piccoli 0,0 (zero). Si è mosso alla ricerca del buffer... zero. Perché non viene passato aCopyBuffer?
Come posso trovare il motivo di questo messaggio?
Profiler
Non sai come controllare il valore di ritorno per lo zero? E non sapete come uscire da OnCalculate() con un ritorno di zero? Non avete mai provato a cercare informazioni sul sito web?
Questo non è un indicatore.
Ho intenzionalmente specificato se devo fare controlli ad ogni chiamata o uno all'inizio di OnTick è sufficiente...
I ritorni non sono accettabili per me ... e per loop l'attesa nel tester è impossibile, e nel reale dovrebbe funzionare (o no?).
Il mio voto non è per la programmazione, non sono un programmatore, e sto imparando questo business complicato solo grazie a persone come te, apprezzo molto il feedback di persone competenti.
Grazie per la vostra comprensione.
Profiler
E se succede una volta al giorno o meno?
Salve. Non riesco a trovare nulla, per qualche motivo l'handel si trasferisce solo quando è impostato su tutti i periodi, ma l'ho impostato su un certo periodo e non succede nulla. Non so quale sia il problema. Ho provato a inserire dati non da variabili globali direttamente in handel, il risultato è lo stesso. Cosa c'è che non va?
Studia l'errore, Artem ha ragione nel dire che dovresti controllare tutto 10 volte...
ERRARE_INVALIDO_ARRAY
4006
Array di tipo inadeguato, dimensione inadeguata o oggetto dinamico di array corrotto
ERRATO_INDICATORE_DATI_NON_TROVATO
4806
Dati richiesti non trovati
Salve. Ho notato che l'handel si trasferisce solo quando è impostato per tutti i periodi, ma quando lo imposto per un certo periodo, non succede niente. Non capisco quale sia il problema. Ho provato a digitare direttamente in handel non da variabili globali, il risultato è lo stesso. Cosa c'è che non va? Ho bisogno che il valore sia dello stesso periodo.
Prendete esempi dal CodeBase degli indicatori di Scriptor, vero? Giusto? Poi cercate nel suo codice (pubblicato di recente) esempi che hanno MTF nel loro nome, ma senza MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Cioè, se volete ottenere dati sul simbolo corrente, ma da un altro timeframe rispetto al periodo del grafico, allora avete bisogno di un esempio di indicatore multi-timeframe. In MCP non dovreste ancora essere coinvolti - lì sull'OOP con l'uso delle classi standard. Vi confonderete.
Per esempio, questo calcolo:
È solo per il MA che lavora sul periodo e sul simbolo corrente. Per lavorare su un periodo diverso, il calcolo sarà diverso. Cerca - tutto è vicino, e la direzione che ti ho dato.
Prendete esempi dal CodeBase degli indicatori di Scriptor, vero? Giusto? Poi cercate nel suo codice (pubblicato di recente) esempi che hanno MTF nel loro nome, ma senza MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Cioè, se volete ottenere dati sul simbolo corrente, ma da un altro timeframe rispetto al periodo del grafico, allora avete bisogno di un esempio di indicatore multi-timeframe. In MCP non dovreste ancora essere coinvolti - lì sull'OOP con l'uso delle classi standard. Vi confonderete.
Per esempio, questo calcolo:
è solo per MA che lavora sul periodo corrente e sul simbolo. Per il lavoro su un periodo diverso, il calcolo sarà diverso. Cerca - tutto è vicino, e ti ho dato la direzione.
Studia l'errore, Artem ha ragione nel dire che dovresti controllare tutto 10 volte...
ERRARE_INVALIDO_ARRAY
4006
Array di tipo inadeguato, dimensione inadeguata o oggetto dinamico di array corrotto
Grazie
Per favore, ma ho copiato l'errore sbagliato, dovrebbe essere
ERRARE_INDICATORE_DATI_NON_TROVATO
4806
I dati richiesti non sono stati trovati
Il punto è che il numero di barre è diverso per i diversi TF e questo dovrebbe essere preso in considerazione.
Per favore, ma ho copiato l'errore sbagliato, dovrebbe essere
ERRATO_INDICATORE_DATI_NON_TROVATO
4806
I dati richiesti non sono stati trovati
Il punto è che il numero di barre è diverso per i diversi TF e questo dovrebbe essere preso in considerazione.
Stavo solo controllando. Ma il PROBLEMA è che avendo impostato handel su un periodo costante, in
CopyBuffer il valore su altri timeframe NON è PERMANENTE. Sul periodo di maniglia impostato il valore era, ma sui timeframe più piccoli 0,0 (zero). Si è mosso alla ricerca del buffer... zero. Perché non viene passato aCopyBuffer?