Há dedos para o fato de que é inapropriado apenas colocar OrderSend, e depois não se preocupar com algo errado. Você sempre tem que procurar por erros.
Você pode me dizer como fazer para que não se abra um pedido com cada vela nova se todas as condições forem atendidas? Eu acabei de inserir este código, ele realmente começou a esperar pela confirmação de 4 velas, mas depois de abrir um pedido 1 vez (quando todas as condições são cumpridas) ele começou a abrir um pedido em todas as velas subseqüentes, se as condições persistirem, é assim que ele se parece no testador.
+ só para o caso de eu colar todo o código original, só para o caso de eu ter perdido algo importante:
Você pode me dizer como fazer para que não se abra um pedido com cada vela nova se todas as condições forem atendidas? Eu acabei de inserir este código, ele realmente começou a esperar pela confirmação de 4 velas, mas depois de abrir um pedido 1 vez (quando todas as condições são cumpridas) ele começou a abrir um pedido em todas as velas subseqüentes, se as condições persistirem, é assim que ele se parece no testador.
+ Só para o caso de eu ter perdido algo importante:
Preciso de controle (contador) das ordens abertas
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---if(CheckForOpen()==0&&CountTrade(0)==0) // Если сигнал для покупок и нет открытых покупок
{
if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue)) Print("BUY OK");
}
if(CheckForOpen()==1&&CountTrade(1)==0) // Если сигнал для продаж и нет открытых продаж
{
if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red)) Print("SELL OK");
}
}
//+----------------------------------------------------------------------------+//| Счетчик ордеров (0)-buy (1)-sell ()-all |//+----------------------------------------------------------------------------+int CountTrade(int ot=-1)
{
int count = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType()==ot||ot<0) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+int CheckForOpen() // Открытие ордера по методу Пуриа
{
double malw,mas1,mas2,macd;
int res=-1, buy=0, sell=0;
// Считывание параметров индикаторов 3 свечи
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,3);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,3);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,3);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,3);
if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
// Считывание параметров индикаторов 2 свечи
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,2);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,2);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,2);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,2);
if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
// Считывание параметров индикаторов 1 свечи
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,1);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,1);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,1);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,1);
if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
// Считывание параметров индикаторов 0 свечи
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&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
if(buy ==4) res=0;
if(sell==4) res=1;
return(res);
}
Experimentei, sim, não mais reentradas. Mas se o Countrade o fizer, então não haverá reação a novos sinais enquanto pelo menos uma ordem estiver aberta, o que é desnecessário. Isto é, não deve haver reaberturas após a primeira vez, mas também deve haver uma entrada no pedido se o malte e/ou macd mudou de posição e de acordo com as condições é um sinal + se o sinal é confirmado 4 vezes seguidas => abrir uma posição. Se isto for adicionado ao código, então, idealmente, tudo deve estar pronto. O que mais precisa ser acrescentado para isso?
artem artem abrir uma posição. Se isto for adicionado ao código, então, idealmente, tudo deve estar pronto. O que mais precisa ser acrescentado para isso?
Se o distribuímos em porções, a mesma coisa acontecerá. Neste caso, todas as funções são construídas de acordo com as condições que você descreveu.
Destacado é o que eu tentei acrescentar de mim. Como resultado, tudo funciona como deveria, mas os negócios são abertos somente na compra. Como faço para que seja aberto para venda também, quem sabe?
Tentei fazer mudanças no código da MakarFX e isto é o que tenho no momento:
Destacado é o que eu tentei acrescentar de mim. Como resultado, tudo funciona como deveria, mas os negócios são abertos somente na compra. Como faço para que seja aberto para venda também, quem sabe?
Há dedos para o fato de que é inapropriado apenas colocar OrderSend, e depois não se preocupar com algo errado. Você sempre tem que procurar por erros.
Volodya, a pergunta era sobre outra coisa.
Volodya, a questão era diferente.
O que é isso?
Em quê?
Dobranich)
Você também.
Você pode me dizer como fazer para que não se abra um pedido com cada vela nova se todas as condições forem atendidas? Eu acabei de inserir este código, ele realmente começou a esperar pela confirmação de 4 velas, mas depois de abrir um pedido 1 vez (quando todas as condições são cumpridas) ele começou a abrir um pedido em todas as velas subseqüentes, se as condições persistirem, é assim que ele se parece no testador.
+ só para o caso de eu colar todo o código original, só para o caso de eu ter perdido algo importante:
Você pode me dizer como fazer para que não se abra um pedido com cada vela nova se todas as condições forem atendidas? Eu acabei de inserir este código, ele realmente começou a esperar pela confirmação de 4 velas, mas depois de abrir um pedido 1 vez (quando todas as condições são cumpridas) ele começou a abrir um pedido em todas as velas subseqüentes, se as condições persistirem, é assim que ele se parece no testador.
+ Só para o caso de eu ter perdido algo importante:
Preciso de controle (contador) das ordens abertas
Tentei fazer mudanças no código da MakarFX e isto é o que tenho no momento:
Destacado é o que eu tentei acrescentar de mim. Como resultado, tudo funciona como deveria, mas os negócios são abertos somente na compra. Como faço para que seja aberto para venda também, quem sabe?
Tentei fazer mudanças no código da MakarFX e isto é o que tenho no momento:
Destacado é o que eu tentei acrescentar de mim. Como resultado, tudo funciona como deveria, mas os negócios são abertos somente na compra. Como faço para que seja aberto para venda também, quem sabe?