Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1329

 
Tanita Gajduchok:
Olá. Como faço para fazer um quadro de líderes aqui?

top ?

 
Saudações!

Como escrever uma função como esta:

A soma do volume crescente do castiçal deve ser 2 vezes a soma do volume decrescente, por exemplo, para as últimas 10 barras.

Como a que está na imagem da tela.


Arquivos anexados:
IMG_9206.PNG  87 kb
 

Boa tarde a todos. Estou tentando anexar um cálculo de tamanho de lote à máquina Graal, para que o lote seja definido como uma porcentagem do depósito em caso de perda. Em outras palavras, se um stop loss desencadeia, a porcentagem especificada do depósito é perdida, ou se o depósito é pequeno para essa porcentagem, então o lote é ajustado ao mínimo possível para o corretor... Encontrei um script em algum site que faz essas coisas e transferi o código do script para mim mesmo, mas o lote não é considerado correto... Eu o fiz. Nas variáveis de entrada, declarei uma variável responsável pelo risco máximo.

extern int MaxRisk=1;// МАКСИМАЛЬНЫЙ % УБЫТКА ПРИ СТОП ЛОССЕ?

Em seguida, declaro as variáveis no carrapato. Uma variável que armazena a quantidade de fundos livres na conta. Uma variável de um valor de ponto de um símbolo. Uma variável do lote mínimo de um corretor. Uma variável que armazena o valor do lote máximo no corretor. E a variável que armazena a etapa de tamanho do lote.

  double Free =AccountFreeMargin();// ПОЛУЧАЕМ СВОБОДНЫЕ СРЕДССТВА ДЛЯ РАСЧЁТА ОБЪЁМА ЛОТА
  double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE); //СТОИМОСТЬ 1 ПУНКТА
  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);   // МИНИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);     // МАКСИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);    // ШАГ ИЗМЕНЕНИЯ РАЗМЕРА ЛОТА

E então é calculado o volume do lote com um determinado risco em uma determinada parada de perda. Stop Loss é calculado por atp ou fixo em pips - este cálculo funciona corretamente porque se eu colocar um lote fixo então tudo está bem aberto e funciona. A fórmula para calcular o volume do lote é a seguinte.

double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА, КОТОРУЮ Я СОВСЕМ НЕ ПОНИМАЮ((((
  if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА
if(lot>Max_Lot) lot=Max_Lot;  //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА

 


Depois de todos os cálculos através do valor do lote de impressão para visualizá-lo.

Print("ЛОТ ДО НОРМАЛИЗАЦИИ= "+lot);
 lot=NormalizeDouble(lot,Digits());
Print("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);

O que é exibido no diário de bordo o que está registrado para lote e parada - os valores de parada estão corretos, mas o lote não está((((

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Информация о счете - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
DanilaMactep:

Boa tarde a todos. Estou tentando anexar um cálculo de tamanho de lote à máquina Graal, para que o lote seja definido como uma porcentagem do depósito em caso de perda. Em outras palavras, se um stop loss desencadeia, a porcentagem especificada do depósito é perdida, ou se o depósito é pequeno para essa porcentagem, então o lote é ajustado ao mínimo possível para o corretor... Encontrei um script em algum site que faz essas coisas e transferi o código do script para mim mesmo, mas o lote não é considerado correto... Fiz o seguinte. Nas variáveis de entrada, declarei uma variável responsável pelo risco máximo.

Em seguida, declaro as variáveis no carrapato. Uma variável que armazena a quantidade de fundos livres na conta. Uma variável de um valor de ponto de um símbolo. Uma variável do lote mínimo de um corretor. Uma variável que armazena o valor do lote máximo no corretor. E uma variável que armazena a etapa de tamanho do lote.

E então é calculado o volume do lote com um determinado risco em uma determinada parada de perda. Stop Loss é calculado por atp ou fixo em pips - este cálculo funciona corretamente porque se eu colocar um lote fixo então tudo está bem aberto e funciona. A fórmula para calcular o volume do lote é a seguinte.


Após todos estes cálculos, imprimo o valor do lote para verificá-lo.

O que está impresso no diário de bordo pode ser visto em ***

À primeira vista, a função parece estar bem. A única coisa que você deve colocar na fórmula não é o preço de parada do pedido, mas a distância desde a abertura do pedido até a parada em pontos.

Então precisamos normalizar o lote com precisão, não para _Digitos mas para Passo - (passo incremental do tamanho do lote). A impressão deve ser emitida através do DoubleToString() com a mesma precisão, então você verá o que quer ver.

 
DanilaMactep:

Boa tarde a todos. Estou tentando obter um cálculo do tamanho do lote na máquina Graal,

Eu já fiz isso

Order_Lots = NormalizeDouble((AccountBalance()/100*Percen)/(MarketInfo(Symbol(),MODE_TICKVALUE)*Stop_Point)-0.005,2);
 
Alexey Viktorov:

À primeira vista, a função parece boa. A única coisa que devemos acrescentar à fórmula é a distância em pontos desde a abertura do pedido até a parada, e não o preço da parada do pedido.

Além disso: devemos normalizar o lote com precisão, não para _Digitos mas para Passo - (passo incremental do tamanho do lote) e você deve imprimir usando DoubleToString() com a mesma precisão.

Minha matemática não é muito boa - como calcular a distância da abertura do pedido para parar e substituir o sl por este?

DoubleToString("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);// ВЫВОД ЗНАЧЕНИЯ ЛОТА
Anormalizou o valor do lote desta forma
lot=NormalizeDouble(lot,Step);// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ ЛОТА 

Portanto, resta saber como calcular a distância da posição aberta até a parada no código.

 
DanilaMactep:

Então resta saber como calcular a distância entre a abertura e a parada no código?

if(buy)
Stop_Point= (Pric_UP-Loss_UP)/Point+Spread; 
else
Stop_Point= (Loss_DN-Pric_DN)/Point+Spread; 
 
MakarFX:

Muito obrigado pelo pedaço de código, mas a questão agora é que tipo declarar as variáveis neste pedaço de código e que valores atribuir a elas? Eu não sou um feiticeiro, estou apenas aprendendo.

 
DanilaMactep:

Muito obrigado pelo pedaço de código, mas a questão agora é que tipo declarar as variáveis neste pedaço de código e que valores atribuir a elas? Eu não sou um mágico, estou apenas aprendendo.

Pric_UP

preço aberto para comprar

Loss_UP

preço de compra stop loss

   Spread = StrToInteger(DoubleToString(MarketInfo(Symbol(),MODE_SPREAD),0));
divulgação
 
Порт-моне тв:
Saudações!

Como escrever uma função como esta:

A soma do volume crescente do castiçal deve ser 2 vezes a soma do volume decrescente, por exemplo, para as últimas 10 barras.

Como a que está na imagem da tela.


Alguém pode me ajudar?

Razão: