Assim, existe uma função de calendarização da abertura de um bar (incluindo se o bar estiver no 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);
}
}
O problema com o Shift é que agora ele muda não pelo número de barras mas pelo número de dias (não importa em D1 ou D1; o principal é compreender D1). Por isso acho que tenho na minha cabeça que posso verificar o número de diasTotal por turno (número de dias da semana) e o dia actual da semana, mas qual a fórmula a utilizar - não consigo determinar.
Nota: na Unidade=3 a tentar fazê-lo (até agora sem sucesso)
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. Comecemos pelo facto de o seu pedido não conter o campo request.price obrigatório (a ausência de tal campo só é aceitável para o modo Market Execution). Assim, acontece que desde que o request.price==0.
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
a consulta comercial dá erro 10016 ("paragens erradas"). O que é que eles têm de errado?
request.sl=Bid-300*_Point; // Nível de Stop Loss da encomenda
request.tp=Bid+1000*_Point; // Nível da ordem Take Profit
Na medida em que não são normalizadas. (usar o botão SRC para inserir o código).
request.sl=NormalizeDouble(Bid-300*_Point,_Digits); // Уровень Stop Loss ордера
request.tp=NormalizeDouble(Bid+1000*_Point,_Digits); // Уровень Take Profit ордера
2. Comecemos pelo facto de o seu pedido não especificar o campo request.price obrigatório (a ausência de tal campo só é permitida para o modo Market Execution). Assim, acontece que desde que o request.price==0.
Por favor, ajudem-me, não consigo compreender uma coisa.
|9|8|7|6|5|4|3|2|1|0| <-- taxas de séries cronológicas
CopyRates(Símbolo(),Período(),Tempo,2,Resultado);
Por exemplo, especifiquei o tempo de candelabro #3. Neste caso, recebo de volta as Tarifas dos castiçais #3 e #4. Mas como obter as taxas de candelabros #3 e #2, tendo um tempo aberto de castiçal #3. O número negativo não é digerido.
Tive a ideia de encontrar uma espécie de índice, mas para o fazer preciso de copiar todos os elementos do actual, mas, meu Deus, se eu tiver M1 e um bar com 10 anos de idade, então o conjunto é demasiado grande.
Pode explicar em que unidades é medido o tráfego no separador "Serviços" do MetaTrader 5 Strategy Tester (MetaTester 5 Agents Managers build 712)? É medido em kiloBytes|megaBytes ou kiloBytes|megaBytes?
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Assim, existe uma função de calendarização da abertura de um bar (incluindo se o bar estiver no futuro)
O problema com o Shift é que agora ele muda não pelo número de barras mas pelo número de dias (não importa em D1 ou D1; o principal é compreender D1). Por isso acho que tenho na minha cabeça que posso verificar o número de diasTotal por turno (número de dias da semana) e o dia actual da semana, mas qual a fórmula a utilizar - não consigo determinar.
Nota: na Unidade=3 a tentar fazê-lo (até agora sem sucesso)
Ajude, por favor.
1. Inserir o código correctamente (Ctrl+Alt+M).
2. Comecemos pelo facto de o seu pedido não conter o campo request.price obrigatório (a ausência de tal campo só é aceitável para o modo Market Execution). Assim, acontece que desde que o request.price==0.a consulta comercial dá erro 10016 ("paragens erradas"). O que é que eles têm de errado?
Na medida em que não são normalizadas. (usar o botão SRC para inserir o código).
Verificação da funcionalidade da inserção automática da ligação
1. Вставляйте код правильно (Ctrl+Alt+M).
1. Inserir o código correctamente (Ctrl+Alt+M).
2. Comecemos pelo facto de o seu pedido não especificar o campo request.price obrigatório (a ausência de tal campo só é permitida para o modo Market Execution). Assim, acontece que desde que o request.price==0.Obrigado. Colocou o preço, funcionou.
Por favor, ajudem-me, não consigo compreender uma coisa.
|9|8|7|6|5|4|3|2|1|0| <-- taxas de séries cronológicas
CopyRates(Símbolo(),Período(),Tempo,2,Resultado);
Por exemplo, especifiquei o tempo de candelabro #3. Neste caso, recebo de volta as Tarifas dos castiçais #3 e #4. Mas como obter as taxas de candelabros #3 e #2, tendo um tempo aberto de castiçal #3. O número negativo não é digerido.
Tive a ideia de encontrar uma espécie de índice, mas para o fazer preciso de copiar todos os elementos do actual, mas, meu Deus, se eu tiver M1 e um bar com 10 anos de idade, então o conjunto é demasiado grande.
Obrigado de antemão
Bom dia!
Pode explicar em que unidades é medido o tráfego no separador "Serviços" do MetaTrader 5 Strategy Tester (MetaTester 5 Agents Managers build 712)? É medido em kiloBytes|megaBytes ou kiloBytes|megaBytes?
Obrigado.
Rapazes, podem dizer-me se existe um indicador ou objecto na base que vos permita exibir os gráficos de outras moedas no gráfico principal?
p.s. Escrevi o meu para o mt4, mas talvez haja aqui um já pronto...
Rapazes, podem dizer-me se existe um indicador ou objecto na base que vos permita exibir os gráficos de outras moedas no gráfico principal?
p.s. Escrevi o meu para o mt4, mas talvez haja aqui um já pronto...
Encontrou-o, já está escrito, z**** , não precisa de ser você a escrevê-lo. https://www.mql5.com/ru/code/1055