[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 40

 
Noterday:

Inseri um novo bloco no meu EA para calcular o tamanho do lote da posição a ser aberta. A idéia é a seguinte:

1. A parada é definida para a Alta do dia atual no caso de uma posição de Venda, e para a Baixa do dia no caso de uma posição de Compra.

2. Quando a condição de abertura da ordem é acionada, este bloco para o cálculo do lote começa a ser executado. A distância para o alto/baixo do dia em pontos é calculada e eu passo através dos lotes começando de 0,1 para encontrar o lote necessário (5% quando uma parada é acionada)

Mas tais linhas aparecem em meu diário:

2011.01.30 16:59:47 TestGenerator: erro de dados incomparável (limite de volume 1107 em 2011.01.13 14:45 excedido)

Assim que eu desligar este bloco, tudo estará bem. Onde eu estou errado? Você pode me dizer, por favor?

Aqui está o próprio código:

É improvável que a mensagem do testador esteja relacionada ao seu código.

Tente sempre de novo recalcular todos os prazos no Arquivo de Citações.

A mensagem diz que o volume de 1107 foi atingido às 14:45, o que é completamente impossível, pois a comercialização continuou até as 24:00 horas.

No entanto, este erro é bastante insignificante.

 
Saltan:

Ao tentar compilar um arquivo de inclusão (*.mqh), um erro '\i_end_of_program' - nenhuma função definida. O que está errado e como consertá-lo?

double Lots externos = 0,0;
extern int Percentual = 0;
extern int StopLoss = 100;
extern int TakeProfit = 40;
extern int TrailngStop = 100;

int Level_New;
int Level_Old;


Isso acontece e é normal. Por exemplo, em minhas Variables.mqh - variáveis externas e globais do especialista são especificadas... ao compilá-lo escreve '\end_of_program' - nenhuma função definida, algo como sem fim no programa, nenhuma função definida, mas ao mesmo tempo, ao compilar o próprio especialista, tudo está OK - 0 erros, 0 avisos. (*.mqh) - não compilar separadamente, ao compilar o Expert Advisor em si, o compilador juntará todos os seus inlúdios e decidirá se há erros, sem erros, etc. :-))) Portanto, tudo é normal. Tente se compilar...

P.S. Ao compilar outros inlúdios, o compilador pode escrever que alguma variável global não está definida... Naturalmente, não precisa ser definido se você o tiver em uma linha completamente diferente. Observe a ordem em que são colocados os aluviões. Se uma variável é definida em um inlude e usada em outro, o primeiro inlude tem que ser colocado antes do segundo, caso contrário ocorrerá um erro durante a compilação - algumas variáveis não são definidas, em geral todas as variáveis globais são definidas no inlude externo. Ou, alternativamente, elas podem ser definidas em qualquer outra, se apenas esta utilizar estas variáveis. De alguma forma... É um tanto vago, mas deve ser compreensível. Experimente.

 
DhP:

É improvável que a mensagem do testador esteja relacionada ao seu código.

Tente sempre de novo recalcular todos os prazos no Arquivo de Citações.

A mensagem diz que o volume 1107 foi atingido às 14:45, o que é completamente impossível, pois a comercialização continuou até as 24:00 horas.

No entanto, este erro é bastante insignificante.

Bem, quando este bloco é comentado, tudo está bem no testador. Então o erro está neste bloco...
 
100yan:
Sem problemas... Mas como você determina o valor atual do TF no código?

Período() ajudaria
 
Sergey_Rogozin:

Eu olhei a capa do livro STUDY de todos os lados e ainda não entendi nada...))

Em todos os lugares que eu vejo escrito assim:

A escrita abaixo é justa se eu quiser obter Price = OrderOpenPrice() para processamento e ajuste de paradas?

Funciona para mim, mas isto é aceitável?

Sua linha é tão válida quanto a primeira.

Desta forma, você pode obter qualquer informação sobre um pedido em aberto,

mas somente uma vez no momento da confirmação de abertura.

Ver https://docs.mql4.com/ru/trading/OrderSend

 
Noterday:
Bem, quando este bloco é comentado, tudo está bem no testador. Então o erro está neste bloco...
    double DistanceToHighDay = MathAbs(HighDay-Ask)*10000;
    double DistanceToLowDay  = MathAbs(Bid-LowDay)*10000;

Muito provavelmente devido ao seu manuseio dos dados do dia, que não é consistente em volume com os minutos,

e o testador o adverte sobre isso.
 
As variáveis HighDay e LowDay são utilizadas não apenas neste bloco, mas também em outros lugares do programa, portanto, acho que elas não têm nada a ver com isso. Você acha que o algoritmo desse bloco está correto?
 

Alguém pode fazer um trabalho melhor?

1. Uma parada é colocada no alto do dia em uma posição de Venda.

2. Depois calculamos a distância em pips desde o preço atual até o Máximo do dia.

3. Calcule quanto será essa distância em $ com 0,1 lote e calcule quanto será em % do depósito. Se for inferior a 5%, então conte para 0,2 lotes e assim por diante até exceder 5%.

E então este será o tamanho de lote que você precisa.

Meu código não funciona por alguma razão.... embora tudo pareça estar escrito corretamente.

 

QUEM SABE?

como me refiro programmaticamente ao Bollinger que diz - aplicar a "Previous Indicator's Data" ? o que devo colocar no campo applied_price ?

obrigado

 

Bom dia a todos. Pergunta: Como faço para que o CheckEvents funcione? O arquivo de Eventos (da Komposter) está no diretório include. Há um exemplo no EventsExpert.mq4:

CheckEvents( MagicNumber );

        if ( eventBuyClosed_SL > 0 )
                Alert( Symbol(), ": Buy-позиция закрыта по СтопЛоссу!" );

Mas eu não preciso de Alerta. Preciso que a ordem pendente seja apagada quando a ordem de mercado for fechada no Stop Loss.

CheckEvents( Magic==0 );
    
   if (eventBuyClosed_SL > 0)
   ??????????? 
        
   DELETE("Buy Stop");

O que devo colocar em vez do Alerta? Se esta função for adequada para o propósito.