[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 888

 
Multy:

Estou vendo.

A propósito, existe um timer na MQL4 ou apenas na MQL5?

Provavelmente, apenas estas funções:

https://www.mql5.com/ru/search?utm_campaign=MQL4.community

https://www.mql5.com/ru/search?utm_campaign=MQL4.community
 
kwadrad:

Pergunta para os aksakals

O testador parou de trabalhar de repente, não riscando nenhum dado histórico.

O que devo fazer com ele?

para sua informação: o arquivo de citações foi baixado


Ele me ajudou a reiniciar o terminal e excluir as aspas baixadas anteriormente na pasta: C:\Program Files\MetaTrader - Alpari-Micro2

em seguida, recarregou o arquivo de cotações

 
Noterday:
Você pode me dizer a função que calcula o volume máximo possível de abertura de pedidos?
Deixe-me dar-lhe uma vara... :)
A função abaixo tem todos os dados necessários para calcular os parâmetros que você precisa. Sou tão preguiçoso, que nem consigo bater nas chaves.

Você mesmo pode encontrar o que precisa e modificá-lo... O código em si é tão simples e acessível que ninguém terá dificuldade em refazê-lo...

// ==========================================================================
// ------------ Функция рассчёта величины лота для открытия позиции ---------
// Если лот превышает возможный для открытия позы, то он корректируется 
// ==========================================================================

double CorrectLots(double lt, double divider=4.0)        // lt = проверяемый лот, divider = на сколько разделить
{                                                        //                                 свободные средства
   double ltcorr;
   double pnt =      MarketInfo(Symbol(),MODE_POINT);
   double mspr =     MarketInfo(Symbol(),MODE_SPREAD);
   double dig =      MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot =   MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot =   MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot =   MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot =   MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/divider,dig);  // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                       // Зададим начальное значением ltcorr равным значению lt
   
   if (lt>=MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;   // ... значений лота
   
   double Money=lt*OneLot+mspr*pnt; // Вычисляем стоимость открываемой позы

   if (Money<TradeMrg)              // Если свободных средств больше, чем цена позиции - 
      {
         return(ltcorr);                                                         // ... возвращаем неизменённый лот
      }
   else if (Money>=TradeMrg)        // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);               // ... рассчитаем допустимый лот
         double MoneyCorr=ltcorr*OneLot+mspr*pnt;                      
         Print("Func CorrectLots: лот ",lt," скорректирован до ",ltcorr,
               " Стоимость позы до корректировки = ",Money,
               " Стоимость позы после корректировки = ",MoneyCorr
               ); 
         return(ltcorr);                                                         // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}

Uma pergunta...

Por que você precisa de uma profissão como a de Hitler no final da guerra? Ele recrutou crianças para a Juventude Hitleriana, por assim dizer, a carne para uma dose do cartucho de Fausto.

Não me soa nada?????

IMHO, é claro...

 
artmedia70:
Deixe-me dar-lhe uma vara... :)
A função abaixo tem todos os dados para calcular os parâmetros que você precisa. Sou tão preguiçoso, preguiçoso demais para bater até mesmo nas chaves...

Você mesmo pode encontrar o que precisa e modificá-lo... O código em si é tão simples e acessível que ninguém terá dificuldade em refazê-lo...

Uma pergunta...

Por que você precisa de uma profissão como a de Hitler no final da guerra? Ele recrutou crianças para a Juventude Hitleriana, por assim dizer, a carne para uma dose do cartucho de Fausto.

Não me soa nada?????

IMHO, é claro...


Obrigado!

Não vai abrir com o volume máximo, apenas precisa calculá-lo com base no tamanho do Depósito, para outras operações matemáticas =))

 
Noterday:

Obrigado!

Não vou abrir com o volume máximo, só preciso calculá-lo com base no tamanho do Depo para outras operações matemáticas =))



para COMPRAR:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_BUY,lot),2)

Para VENDER:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_SELLL,lot),2);

lote - a variável que contém o volume do pedido

o resultado do cálculo deve ser verificado para >0

https://www.mql5.com/ru/search

 
IgorM:


para COMPRAR:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_BUY,lot),2);

Para VENDER:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_SELLL,lot),2);

lote - variável com o volume do pedido

https://www.mql5.com/ru/search

... Bem, Igor, você está com pressa... :)

Antes que eu tivesse tempo de colocar meus dedos no teclado, você já tinha escrito de volta... :)

 
Obrigado a todos vocês!
 

Hi!

Você pode sugerir um código ou uma ramificação sobre como memorizar os cruzamentos de linhas indicadoras com o preço. já o vi em algum lugar, mas não consigo encontrá-lo. Eu o vi em algum lugar, mas não consigo encontrá-lo.

Não sei se estou interessado, mas estou mais interessado em algo como isto:

int start()

  { 

 double LineX = iCustom ("EURUSD", Period_H1, "Indicator",0,0);

 double lineY = iCustom ("EURUSD", Period_H1, "Indicator",1,0);

double priceA = Ask;

double priceB = Bid;

double intersectionX = (LineX == priceA) ;

double intersectionY = (LineY == priceB) ;

// а так же еще определить, какое пересечение последнее, а какое предпоследние 

// intersectionX = последнее пересечение и на оборот
// intersectionY = предпоследние пересечение и на оборот

// то есть я понимаю логику, а  вот связать в коде не могу.
 
//произошло intersectionX,   то intersectionFirst = intersectionX; intersectionSecond = intersectionY;

// произошло intersectionY, то intersectionFirst = intersectionY; intersectionSecond = intersectionX;


 }
 
belck:

Hi!

Você pode sugerir um código ou uma ramificação sobre como memorizar os cruzamentos de linhas indicadoras com o preço. já o vi em algum lugar, mas não consigo encontrá-lo. Eu o vi em algum lugar, mas não consigo encontrá-lo.

quero saber se a linha indicadora cruzou o preço, mas estou mais interessado nisto:


qualquer cruzamento é melhor considerado como uma diferença entre o preço (Ask/Bid) e a linha indicadora, ou seja

se (Ask-iCustom ("EURUSD", Período_H1, "Indicador",0,0) > 0) Comentário("Preço acima do indicador"); ou Comentário("Preço abaixo do indicador");

Se você comparar a diferença destes valores, você não precisa normalizá-los para uma comparação adequada

particularmente para sua pergunta - um cruzamento da linha indicadora pelo preço é aquele momento em que a diferença Ask- -iCustom() estava abaixo de zero durante o cálculo anterior e depois ficou maior, ou vice versa

como você calcula este momento é seu próprio negócio - talvez no bar anterior, ou a cada carrapato, mas tais combinações:

double intersectionX = (LineX == priceA) ;

double intersectionY = (LineY == priceB) ;
Você será conduzido ao labirinto da matemática discreta mais rapidamente do que você pode obter o resultado desejado - a expressão entre parênteses será 0 ou 1, o que corresponde à representação numérica de falso e verdadeiro
 
IgorM:


qualquer travessia é otimamente considerada como a diferença de preço (Ask/Bid) e a linha indicadora, ou seja

se (Ask-iCustom ("EURUSD", Período_H1, "Indicador",0,0) > 0) Comentário("Preço acima do indicador"); ou Comentário("Preço abaixo do indicador");

Se você comparar a diferença destes valores, você não precisa normalizá-los para uma comparação adequada

particularmente para sua pergunta - um cruzamento da linha indicadora pelo preço é aquele momento em que a diferença Ask- -iCustom() estava abaixo de zero durante o cálculo anterior e depois ficou maior, ou vice versa

Como você calcula este momento é de sua própria conta - seja na barra anterior, ou a cada tique, mas tais combinações:

Você será conduzido ao labirinto da matemática discreta mais rapidamente do que você pode obter o resultado desejado - a expressão entre parênteses será 0 ou 1, o que corresponde à representação numérica de falso e verdadeiro

Isto é, se eu entendi corretamente, eu posso fazer isto:

bool intersectionX = FALSE,
     intersectionY = FALSE;
int start()

  { 
if  (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) == 0)  {
intersectionX = TRUE;
intersectionY = FALSE;
}
if  (iCustom ("EURUSD", Period_H1, "Indicator",1,0)-Bid == 0) {
intersectionY = TRUE;
intersectionX = FALSE;
}
}
и я потом смогу intersectionY использовать только тогда когда оно TRUE, если FALSE, то такой код (intersectionY > Ask) не сработает, правильно я понимаю!?