Por que isCrossing() não retorna 2???? O isCrossing( ) em si tem um segundo se entrada, mas então não há se entrada em OnTick() quando isCrossing() == 2. Que monte de besteiras...
Ambas as condições se encaixam...assim você obtém o primeiro resultado
Por que isCrossing() não retorna 2???? O isCrossing( ) em si tem um segundo se entrada, mas então não há se entrada em OnTick() quando isCrossing() == 2. Que monte de besteiras...
Por alguma razão eu também não acho que retorne 1.
Esta condição
if(g_barTime < iTime(NULL,g_timeFrame,0)// и дальше
Diz que foi aberto um novo bar. No primeiro tick da barra abrir == alta == baixa == fechada e == licitação - daí a condição
&& high > ma && Bid <= ma)
ou
&& low < ma && Bid >= ma)
não pode ser cumprida...
Hoje houve uma pergunta sobre a condição se(i != i) Estas condições são aproximadamente as mesmas.
"1" retorna, fez a depuração de código no MetaEditor.
Além disso, mesmo que tudo seja igual, é apenas no primeiro tique.
Funciona assim
//--- input parametersinputint g_maPeriod = 14;
inputint g_maShift = 1;
inputENUM_APPLIED_PRICE g_maPrice = PRICE_CLOSE; //Applied priceinputENUM_MA_METHOD g_maMethod = MODE_SMA; //Method MainputENUM_TIMEFRAMES g_timeFrame = PERIOD_CURRENT; //Timeframe for calculatedatetime g_barTime=0;
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---if(g_barTime != iTime(NULL,g_timeFrame,0))
{
if(isCrossing()==1)
{
Print("enter to '1. if (isCrossing)'"); g_barTime = iTime(NULL,g_timeFrame,0);
}
if(isCrossing()==2)
{
Print("enter to '2. if (isCrossing)'"); g_barTime = iTime(NULL,g_timeFrame,0);
}
}
}
//+------------------------------------------------------------------+int isCrossing()
{
int res=0;
double low = iLow(Symbol(), g_timeFrame, 1);
double high = iHigh(Symbol(), g_timeFrame, 1);
double ma = iMA(_Symbol, g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maPrice, 0);
if(high > ma && Bid <= ma) res=1;
if(low < ma && Bid >= ma) res=2;
return (res);
}
//+------------------------------------------------------------------+
2021.08.2509:24:56.6292021.08.2023:50:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.6242021.08.2023:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5922021.08.2021:35:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5822021.08.2021:05:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5662021.08.2020:20:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5542021.08.2018:50:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:40:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.6292021.08.2023:50:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.6242021.08.2023:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5922021.08.2021:35:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5822021.08.2021:05:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5662021.08.2020:20:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5542021.08.2018:50:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:40:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
Serra agora que você adicionou um tronco. Aqui você também tem mensagens duplicadas :)
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.
Ambas as condições se encaixam...assim você obtém o primeiro resultado
Ambas as condições se encaixam...assim você obtém o primeiro resultado
Por alguma razão eu também não acho que retorne 1.
Esta condição
Diz que foi aberto um novo bar. No primeiro tick da barra abrir == alta == baixa == fechada e == licitação - daí a condição
ou
não pode ser cumprida...Hoje houve uma pergunta sobre a condição se(i != i) Estas condições são aproximadamente as mesmas.
P.S.
com a função isCrossing() deixou tudo como está.
Por alguma razão eu também não acho que retorne 1.
Esta condição
conta sobre a abertura de um novo bar. No primeiro tick do bar aberto == alto == baixo == fechado e == lance - daí, a condição
ou
não pode ser cumprida...Hoje houve uma pergunta sobre a condição se(i != i) Estas condições são mais ou menos as mesmas.
"1" retorna, fez a depuração de código no MetaEditor.
Além disso, mesmo que tudo seja igual, é apenas no primeiro tique.
"1" retorna, fez a depuração de código no MetaEditor.
Além disso, mesmo que tudo seja igual, é apenas no primeiro tique.
Bem, sim, eu estava errado. A nova barra será somente depois que toda a condição for cumprida.
Tente substituir alto e baixo por aberto. Talvez isso não afete muito a estratégia.
"1" retorna, fez a depuração de código no MetaEditor.
Além disso, mesmo que tudo seja igual, é apenas no primeiro tique.
Funciona assim
Funciona assim.
Eu fiz isso e tudo funciona, apenas as mensagens de isCrossing() são duplicadas, porque o f-e é chamado duas vezes por um tick.
Assim, deixei as coisas como estavam, só que agora tudo, desde isCrossing(), volta a variável. Nada é duplicado e tudo funciona. Obrigado a todos :)
você pode, por favor, explicar a diferença entre as funções?
para (int j = OrderHistoryTotal()-1; j >= 0; j--)
{
se(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY))
и
int i=OrdensHistóriaTotal();
for(int pos=0; pos<i; pos++)
{
if(OrderSelect(pos, SELECT_BY_POS,MODE_HISTORY))