Quindi, c'è una funzione per determinare il tempo di apertura di una barra (incluso se la barra è nel futuro)
//+---------------------------------------------------------------------------+//| Получение точного времени открытия |//|Input: |//|1) Время, которое необходимо округлить до ближайшего времени открытия бара |//|2) Переменная для вывода результата |//|3) Период ТФ |//|4) Отклонение влево-вправо |//|Возврат: количество элементов(1), 0 если не скопировано, (-1) если ошибка |//+---------------------------------------------------------------------------+int GetSingleBarOpenTime(datetime Time,datetime &Output,ENUM_TIMEFRAMES nPeriod,int Shift=0) export
{
datetime OpenTime[1];
int Count=0;
// если бар существует то используем стандартную процедуру поиска времени открытияif(Time<=TimeCurrent() && Shift==0)
{
Count=CopyTime(Symbol(),nPeriod,Time,1,OpenTime);
if(Count==0)
{
Print("GetCorrectOpenTime CopyTime elements=0");
return(0);
}
elseif(Count<0)
{
Print("GetCorrectOpenTime error "+(string)GetLastError());
return(Count);
}
else
{
Output=OpenTime[0];
return(Count);
}
}
//если бар находится в будущем то используем следующую процедуруelse
{
MqlDateTime sTime;
// NumOfUnits - количество стандартных единицint NumOfUnits=0;
int ToRnd;
TimeToStruct(Time,sTime);
//Единица измерения(1-минута, 2 - час, 3 - день, 4 - неделя(но используются дни), 5 - месяц)short Unit=0;
//в зависимости от ТФ инициализируются параметрыswitch(nPeriod)
{
casePERIOD_M1: {Unit=1;NumOfUnits=1;break;}
casePERIOD_M2: {Unit=1;NumOfUnits=2;break;}
casePERIOD_M3: {Unit=1;NumOfUnits=3;break;}
casePERIOD_M4: {Unit=1;NumOfUnits=4;break;}
casePERIOD_M5: {Unit=1;NumOfUnits=5;break;}
casePERIOD_M6: {Unit=1;NumOfUnits=6;break;}
casePERIOD_M10: {Unit=1;NumOfUnits=10;break;}
casePERIOD_M12: {Unit=1;NumOfUnits=12;break;}
casePERIOD_M15: {Unit=1;NumOfUnits=15;break;}
casePERIOD_M20: {Unit=1;NumOfUnits=20;break;}
casePERIOD_M30: {Unit=1;NumOfUnits=30;break;}
casePERIOD_H1: {Unit=2;NumOfUnits=1;break;}
casePERIOD_H2: {Unit=2;NumOfUnits=2;break;}
casePERIOD_H3: {Unit=2;NumOfUnits=3;break;}
casePERIOD_H4: {Unit=2;NumOfUnits=4;break;}
casePERIOD_H6: {Unit=2;NumOfUnits=6;break;}
casePERIOD_H8: {Unit=2;NumOfUnits=8;break;}
casePERIOD_H12: {Unit=2;NumOfUnits=12;break;}
casePERIOD_D1: {Unit=3;NumOfUnits=1;break;}
casePERIOD_W1: {Unit=4;NumOfUnits=7;break;}
casePERIOD_MN1: {Unit=5;NumOfUnits=1;break;}
default: {Print("Period is unknown"); break;}
}
// Если ТФ - минуты, тоif(Unit==1)
{
sTime.sec=0;
//Остаток от деления
ToRnd=(int)fmod(sTime.min,NumOfUnits);
Time=StructToTime(sTime);
// Округление до ближайшего времени открытия(пример: если сейчас 14:25, и тф 2min, то ближайщее время открытия бара - 14:24)
Time-=(ToRnd*60);
Time+=(NumOfUnits*Shift*60);
}
elseif(Unit==2)
{
sTime.sec=0;
sTime.min=0;
ToRnd=(int)fmod(sTime.hour,NumOfUnits);
Time=StructToTime(sTime);
Time-=(ToRnd*60*60);
Time+=(NumOfUnits*Shift*60*60);
}
elseif(Unit==3)
{
sTime.hour=0;
sTime.min=0;
sTime.sec=0;
ToRnd=(int)fmod(sTime.day,NumOfUnits);
Time=StructToTime(sTime);
int hds;
hds=sTime.day_of_week;
if (hds==0) hds=7;
hds=floor((hds+Shift)/7)*2;
int ti=Shift+hds;
while (hds>7)
{
hds=(floor(hds/7))*2;
ti+=hds;
}
Print(ti);
Time-=(ToRnd*60*60*24);
Time+=(NumOfUnits*Shift*60*60*24);
}
elseif(Unit==4)
{
sTime.hour=0;
sTime.min=0;
sTime.sec=0;
ToRnd=(int)fmod(sTime.day,NumOfUnits);
Time=StructToTime(sTime);
Time-=(ToRnd*60*60*24);
Time+=(NumOfUnits*Shift*60*60*24);
}
elseif(Unit==5)
{
sTime.sec=0;
sTime.min=0;
sTime.hour=0;
sTime.day=1;
sTime.mon=sTime.mon-(int)fmod(sTime.mon,NumOfUnits)+(NumOfUnits*Shift);
while(sTime.mon<1)
{
sTime.year--;
sTime.mon=12+sTime.mon;
}
while(sTime.mon>12)
{
sTime.year++;
sTime.mon=sTime.mon-12;
}
if(sTime.sec<0)
Print("GetSingleBarOpenTime seconds error");
if(sTime.min<0)
Print("GetSingleBarOpenTime minutes error");
if(sTime.hour<0)
Print("GetSingleBarOpenTime hours error");
if(sTime.day<1)
Print("GetSingleBarOpenTime days error");
if(sTime.mon<0)
Print("GetSingleBarOpenTime months error");
if(sTime.year<1970)
Print("Year < 1970");
Time=StructToTime(sTime);
}
Output=Time;
return(1);
}
}
Il problema con Shift è che ora si sposta non per il numero di barre ma per il numero di giorni (non importa su D1 o D1; l'importante è capire D1). Così penso di avere in testa che posso controllare il numero di daysTotal per turno (numero di giorni della settimana) e il giorno corrente della settimana, ma quale formula usare - non posso determinare.
Nota: in Unità=3 prova a farlo (finora senza successo)
voidOnTick()
{
MqlTick last_tick={0}; // предопределенная структура для получения текущих данных рынкаSymbolInfoTick("EURUSD",last_tick); // инструмент: указывать обязательноdouble Bid = last_tick.bid; // Текущая цена BidMqlTradeRequest request={0};
MqlTradeResult result={0};
request.action=TRADE_ACTION_DEAL;
request.magic=555;
request.symbol="EURUSD";
request.volume=1.0;
request.deviation=0;
request.type=ORDER_TYPE_BUY;
request.sl=Bid-300*_Point; // Уровень Stop Loss ордера
request.tp=Bid+1000*_Point; // Уровень Take Profit ордераOrderSend(request,result);
Comment("retcode = ",result.retcode);
}
2. Cominciamo con il fatto che la tua richiesta non contiene il campo obbligatorio request.price (l'assenza di tale campo è accettabile solo per la modalità di esecuzione del mercato). Così si scopre che finché request.price==0.
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
la query di trading dà l'errore 10016 ("stop sbagliati"). Che cosa hanno sbagliato?
request.sl=Bid-300*_Point; // livello di stop loss dell'ordine
request.tp=Bid+1000*_Point; // Livello dell'ordine Take Profit
Nel senso che non sono normalizzati. (usa il tasto SRC per inserire il codice).
request.sl=NormalizeDouble(Bid-300*_Point,_Digits); // Уровень Stop Loss ордера
request.tp=NormalizeDouble(Bid+1000*_Point,_Digits); // Уровень Take Profit ордера
2. Cominciamo con il fatto che la tua richiesta non specifica il campo obbligatorio request.price (l'assenza di tale campo è permessa solo per la modalità di esecuzione del mercato). Così si scopre che finché request.price==0.
Per favore aiutatemi, non riesco a capire una cosa.
|9|8|7|6|5|4|3|2|1|0| <-- serie temporale Tassi
CopyRates(Symbol(),Period(),Time,2,Result);
Per esempio ho specificato il tempo della candela #3. In questo caso, ottengo indietro i tassi di candele #3 e #4. Ma come ottenere i tassi di candele #3 e #2, avendo un tempo aperto della candela #3. Il numero negativo non viene digerito.
Ho avuto l'idea di trovare un indice di tipo, ma per farlo ho bisogno di copiare tutti gli elementi da quello corrente, ma, caspita, se ho M1 e una barra di 10 anni, allora l'array è troppo grande.
Potreste spiegare in quali unità viene misurato il traffico nella scheda "Servizi" di MetaTrader 5 Strategy Tester (MetaTester 5 Agents Managers build 712)? Si misura in kiloByte|megaByte o kiloByte|megaByte?
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.
Quindi, c'è una funzione per determinare il tempo di apertura di una barra (incluso se la barra è nel futuro)
Il problema con Shift è che ora si sposta non per il numero di barre ma per il numero di giorni (non importa su D1 o D1; l'importante è capire D1). Così penso di avere in testa che posso controllare il numero di daysTotal per turno (numero di giorni della settimana) e il giorno corrente della settimana, ma quale formula usare - non posso determinare.
Nota: in Unità=3 prova a farlo (finora senza successo)
Aiuto per favore.
1. Inserisci il codice correttamente (Ctrl+Alt+M).
2. Cominciamo con il fatto che la tua richiesta non contiene il campo obbligatorio request.price (l'assenza di tale campo è accettabile solo per la modalità di esecuzione del mercato). Così si scopre che finché request.price==0.la query di trading dà l'errore 10016 ("stop sbagliati"). Che cosa hanno sbagliato?
Nel senso che non sono normalizzati. (usa il tasto SRC per inserire il codice).
Controllo della funzionalità dell'inserimento automatico dei link
1. Вставляйте код правильно (Ctrl+Alt+M).
1. Inserisci il codice correttamente (Ctrl+Alt+M).
2. Cominciamo con il fatto che la tua richiesta non specifica il campo obbligatorio request.price (l'assenza di tale campo è permessa solo per la modalità di esecuzione del mercato). Così si scopre che finché request.price==0.Grazie. Messo il prezzo, ha funzionato.
Per favore aiutatemi, non riesco a capire una cosa.
|9|8|7|6|5|4|3|2|1|0| <-- serie temporale Tassi
CopyRates(Symbol(),Period(),Time,2,Result);
Per esempio ho specificato il tempo della candela #3. In questo caso, ottengo indietro i tassi di candele #3 e #4. Ma come ottenere i tassi di candele #3 e #2, avendo un tempo aperto della candela #3. Il numero negativo non viene digerito.
Ho avuto l'idea di trovare un indice di tipo, ma per farlo ho bisogno di copiare tutti gli elementi da quello corrente, ma, caspita, se ho M1 e una barra di 10 anni, allora l'array è troppo grande.
Grazie in anticipo
Buona giornata!
Potreste spiegare in quali unità viene misurato il traffico nella scheda "Servizi" di MetaTrader 5 Strategy Tester (MetaTester 5 Agents Managers build 712)? Si misura in kiloByte|megaByte o kiloByte|megaByte?
Grazie.
Ragazzi, potete dirmi se c'è un indicatore o un oggetto nella base che permette di visualizzare i grafici di altre valute sul grafico principale?
p.s. Ho scritto il mio per mt4, ma forse ce n'è uno già pronto qui...
Ragazzi, potete dirmi se c'è un indicatore o un oggetto nella base che permette di visualizzare i grafici di altre valute sul grafico principale?
p.s. Ho scritto il mio per mt4, ma forse ce n'è uno già pronto qui...
Trovato, è già scritto, z**** , non devi scriverlo tu. https://www.mql5.com/ru/code/1055