[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 375

 
iMAG:

Caros profissionais e conhecedores!

Estou perdido - o indicador BB está me dando sinais incompreensíveis (não "Red-Green-Red"!). Para ser mais preciso, eu estabeleci tal chamada:

bolup = iBands(Símbolo(), 0, 24, 0, 2, 0, 1, 1);
boln = iBands(Símbolo(), 0, 24, 0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Imprimir("Bandas superiores = ", bolup;)
Imprimir("Bandas mais baixas = ", boldn);
Imprimir("Bandas de mídia = ", bolmd);

O resultado é que todas as 3 variáveis dão o mesmo valor. >8-O

Par EUR, TF - H1. Alguma idéia????

Obrigado antecipadamente...

O senhor também definiria o desvio como negativo?
 
Fantar:

para maior clareza, tentei fazer um desenho em

Agora tente fazer o mesmo no mq4. Aqui está um ramo para perguntas, se algo não estiver claro. Existe o serviço de Trabalho para a criação de EAs a partir do zero
 
iMAG:

Caros profissionais e conhecedores!

Estou perdido - o indicador BB está dando sinais que não entendo (não "Red-Green-Red"!). Para ser mais preciso, estou fazendo a seguinte chamada:

bolup = iBands(Símbolo(), 0, 24, 0, 2, 0, 1, 1);
boldn = iBands(Símbolo(), 0, 24, 0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Print("Bands upper = ", bolup);
Print("Bands lower = ", boldn);
Print("Bands media = ", bolmd);

Como resultado, todas as 3 variáveis dão o mesmo valor. >8-O

É EUR, H1. Alguma idéia?

Obrigado antecipadamente...

O desvio da linha principal que você define é 0 (zero). Deve ser mais do que zero.
 

A essência da estratégia: Entrada por sinal estocástico (5,14,3) saída também por estocástico, mas com outro período (5,3,3). Eu não entendo como fazer uma saída por estocástico e não por sinal inverso.
Eu tenho um problema e não tenho idéia de como ele pode ser resolvido, vou tentar explicar.
Portanto, no código que afixei, há 2 funções
//+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;

int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаем
if (type>OP_SELL) continue;

if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// тут решаем для каждого открытого ордера его судьбу
// оставить в рынке или добавить в массив на закрытие
if (type==OP_BUY)
{
//
// код разрешающий оставить покупку

// как пример
if (signal==OP_BUY) continue;
}

if (type==OP_SELL)
{
//
// код разрешающий оставить продажу

// как пример
if (signal==OP_SELL) continue;
}

closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера

// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем
// можно закрывать частично, тогда нужно переписать строку сверху
}
//----
return;
}

//+------------------------------------------------------------------+
//| Закрывает ордера с указанными тикетами |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;

int ticket,type;
double lots;
bool res;

int total=OrdersTotal();

for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении

// блок закрытия покупок
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

// блок закрытия продаж
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

}
//----
return;
}
No vazio PrepareTicketsToClose(int signal, bool Invers, int & ticketsClose[][2], double & lots[], double arrayTickets[][9]) temos que colocar uma condição que decidirá se devemos deixar ou fechar o pedido...
Eu tentei colocar condições, mas nada funciona....
Alguém pode olhar e mostrar se há um erro nestas funções ou se eu fiz asneira....
Arquivos anexados:
 
Você pode me dizer se eu tenho dois comandos consecutivos OrderSend, eu preciso colocar a função IsTradeAllowed entre eles?

ou não é necessário e a EA passará da primeira chamada de OrderSend para a segunda somente depois de um pedido feito com sucesso?

Se o IsTradeAllowed ainda for necessário, que atraso de tempo deve ser definido no loop?
 
Desead:
Você pode me dizer se eu tenho dois comandos OrderSend consecutivos para definir ordens, eu preciso colocar a função IsTradeAllowed entre eles?

ou não é necessário e a EA passará da primeira chamada de OrderSend para a segunda somente depois de um pedido feito com sucesso?

No testador não há necessidade, mas na demonstração ou na conta real você receberá uma mensagem sobre um tópico de comércio ocupado.

Desaparecido:


Se o IsTradeAllowed ainda for necessário, que atraso de tempo deve ser definido no loop?
Depende da velocidade de execução, que é diferente para diferentes servidores. Lembre-se também de adicionar uma verificação em loop no IsStopped(), caso contrário, você não terá sorte nenhuma.
 
Olá, você poderia me dizer onde posso baixar o arquivo de citações detalhadas (tique ou minuto)? Os dados que estão no arquivo de citações em MT4 (não muito) dados de minutos apenas durante 5 dias do teste.
 

Boa tarde. O sistema oferece três pontos de entrada para COMPRAR e VENDER. Mas quando um sinal chega, as posições são abertas em cada tique, desde que o sinal exista. Há um erro em algum lugar com bandeiras. Por favor, ajude-me a compreendê-lo.

   static bool buy_h=true, buy_l=true, buy_50=true,
               sell_h=true, sell_l=true, sell_50=true;

 if(LSMA_Sig==0) // up-trend
    {
      if(Stoch_Sig==4 && buy_l==true)
       { 
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_l=false; // снимем флаг
       }
      //---
      if(Stoch_Sig==0 && buy_50==true)
       {
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_50=false;        
       }
      //---
      if(Stoch_Sig==2 && buy_h==true)
       {
         sl=Ask-Stop_Loss*Point;       
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_h=false;         
       }   
    }
   if(LSMA_Sig==1) // dn-trend
    {
      if(Stoch_Sig==3 && sell_h==true)
       {
         sl=Bid+Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
            Alert("Неудачная попытка открыть ордер SELL. Ошибка: ", GetLastError());
         if(Ans==true)
            sell_h=false;
       }
     //---
     if(Stoch_Sig==1 && sell_50==true)
      {
         sl=Bid+Stop_Loss*Point;      
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
            Alert("Неудачная попытка открыть ордер SELL. Ошибка: ", GetLastError());
         if(Ans==true)
            sell_50=false;         
      }
     //---
     if(Stoch_Sig==5 && sell_l==true)
      {
         sl=Bid+Stop_Loss*Point;      
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
            Alert("Неудачная попытка открыть ордер SELL. Ошибка: ", GetLastError());
         if(Ans==true)
            sell_l=false;        
      }
    }
    
   if(Stoch_Sig!=4 && buy_l==false) // поднимем флаг
       buy_l=true;
   if(Stoch_Sig!=0 && buy_50==false)
       buy_50=true;
   if(Stoch_Sig!=2 && buy_h==false)
       buy_h=true;
   if(Stoch_Sig!=3 && sell_h==false)
       sell_h=true;
   if(Stoch_Sig!=1 && sell_50==false)
       sell_50=true;
   if(Stoch_Sig!=5 && sell_l==false)
       sell_l=true;  
 
silhouette:

Boa tarde. O sistema fornece três pontos de entrada para COMPRAR e VENDER. Mas quando um sinal chega, as posições são abertas em cada tique, desde que o sinal exista. Há um erro em algum lugar com bandeiras. Por favor, ajude-me a compreendê-lo.

OrderTotal() dá o número de posições já abertas, ou seja, podemos usá-lo para verificar se já existe ou não uma posição aberta.

 
Existe alguma maneira de descobrir as comissões para um pedido de 1 lote sem abrir um pedido?