Pessoal, eu preciso de ajuda, não tenho conseguido fazer as mudanças necessárias no seguinte código há alguns dias:
void start()
{
StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
// Определение направления пересечения мувинговif (Init) InitMetod();
// Трейлинг стоп открытых позицийif (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber);
// Ожидание нового бара на графикеif(timeprev == Time[0]) return;
timeprev = Time[0];
// Открытие ордера по методу Пуриа
CheckForOpen();
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+void CheckForOpen() // Открытие ордера по методу Пуриа
{
double malw,mas1,mas2,macd;
int res;
// Считывание параметров индикаторов
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0);
// Проверяем положение мувмнговif(malw>mas1 && malw>mas2 && OrderSell)
{
OrderBuy=true;
OrderSell=false;
Order=true;
}
if(malw<mas1 && malw<mas2 && OrderBuy)
{
OrderBuy=false;
OrderSell=true;
Order=true;
}
// Открываем ордер Buyif(macd>0 && OrderBuy && Order)
{
res=OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue);
Order=false;
return;
}
// Открываем ордер Sell if(macd<0 && OrderSell && Order)
{
res=OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red);
Order=false;
return;
}
}
//+------------------------------------------------------------------+//| Calculate optimal lot size |//+------------------------------------------------------------------+double Lots() // Расчет объема лота
{
double Lots;
if (Lot > 0) return(Lot);
Lots=AccountFreeMargin()/5000;
Lots=MathMin(15,MathMax(0.01,Lots));
if(Lots<0.1) Lots=NormalizeDouble(Lots,2);
else
{
if(Lots<1) Lots=NormalizeDouble(Lots,1);
else Lots=NormalizeDouble(Lots,0);
}
return(Lots);
}
//+------------------------------------------------------------------+//| Init metod Puria function |//+------------------------------------------------------------------+void InitMetod() // Опредеоение начального пересечения мувингов
{
double malw,mas1,mas2;
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
if((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2))
{
Init=false;
OrderBuy=true;
OrderSell=true;
}
return;
}
Na verdade, o que eu tentei mas não consegui acrescentar aqui: fazer a EA esperar por 4 preços de vela aberta em uma fila depois que todas as condições do indicador ( preços de vela aberta ) coincidirem:
O preço de abertura da primeira vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0 - 1 de 4 confirmações é; 2. O preço de abertura da segunda vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0-2 de 4 confirmações é; 3.O preço de abertura da 3ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0-3 de 4 confirmações sim; 4. O preço de abertura da 4ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0-4 de 4 confirmações sim-Comércio aberto para comprar na mesma vela (4ª).
A mesma situação com pedidos paravender, somente nos outros indicadores de direção deve se abrir. E há um ponto importante - se, digamos, em qualquer estágio da 1ª vela à 4ª,os indicadores mudam de posição(por exemplo, na 3ª vela de abertura, a barra MACD abre abaixo de 0, ou = 0) - então tudo se reinicia, porque os sinais não foram verificados na abertura da 4ª vela em uma fila.
Por favor, aconselhem, programadores experientes, o que precisa ser alterado no código para que estas condições funcionem? Eu tentei muitas coisas, e não sei...
O preço de abertura da 1ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0 - 1 em 4 confirmações sim;
2 O preço de abertura da 2ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0-2 de 4 confirmações sim;
3 O preço de abertura da 3ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0-3 de 4 confirmações é;
4 O preço de abertura da 4ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0-4 de 4 confirmações sim-Comércio aberto para comprar na mesma vela (4ª).
Para um testador isto
OrderSendfará e até trabalhará em servidores rápidos, mas se não for um testador, é melhor fazê-lo de acordo com a documentação :)
Na verdade, o que eu tentei mas não consegui acrescentar aqui: fazer a EA esperar por 4 preços de vela aberta em uma fila depois que todas as condições do indicador ( preços de vela aberta ) coincidirem:
O preço de abertura da primeira vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0 - 1 de 4 confirmações é;
2. O preço de abertura da segunda vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0- 2 de 4 confirmações é;
3.O preço de abertura da 3ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0- 3 de 4 confirmações sim;
4. O preço de abertura da 4ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0- 4 de 4 confirmações sim- Comércio aberto para comprar na mesma vela (4ª).
A mesma situação com pedidos para vender, somente nos outros indicadores de direção deve se abrir. E há um ponto importante - se, digamos, em qualquer estágio da 1ª vela à 4ª, os indicadores mudam de posição(por exemplo, na 3ª vela de abertura, a barra MACD abre abaixo de 0, ou = 0) - então tudo se reinicia, porque os sinais não foram verificados na abertura da 4ª vela em uma fila.
Por favor, aconselhem, programadores experientes, o que precisa ser alterado no código para que estas condições funcionem? Eu tentei muitas coisas, e não sei...
if(malw>mas1 && malw>mas2 && OrderSell)Como eles dizem, não acreditem em nossa palavra.
OrderSellnão sei o que poderia estar nele, compartilhe a lógica da tomada de decisão no código.
artem artem #:
O preço de abertura da 1ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0 - 1 em 4 confirmações sim;
2 O preço de abertura da 2ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0- 2 de 4 confirmações sim;
3 O preço de abertura da 3ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0- 3 de 4 confirmações é;
4 O preço de abertura da 4ª vela - (5) sobre (75) e (85) + barra MACD aberta acima de 0- 4 de 4 confirmações sim- Comércio aberto para comprar na mesma vela (4ª).
Pontuar um valor com outro, nada ? Dividir primeiro bloco = solução, segundo bloco = solução, comparar blocos.
Pontuar um valor com outro, nada ? Dividir primeiro bloco = solução, segundo bloco = solução, comparar blocos.
Acontece que você tem, no código, um erro lógico.
OK, mas as variáveis irão cair se você as usar dessa forma e então você não saberá quais são os "milagres".
OK, mas as variáveis se quebrarão se você as usar dessa forma e então você não saberá o que são os "milagres".
Se você conhece outra opção, escreva-a...
Você pode ajudar as pessoas).