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

 
MakarFX:

Por favor me diga, é possível fazer esta escolha de fonte em um indicador?


Por que não? Faça seu próprio enumere e todos os problemas.........

 
Alexey Viktorov:

Por que não? Faça seu próprio enumere e todos os problemas.........

Isso é claro, mas como posso solicitar uma lista de fontes instaladas?

 
Nikolai Semko:

Você é um comediante.

Com quem eu estava falando?


Perdi alguma coisa. Obrigado (risos) É isso aí!

 
ANDREY:

Entendi. Obrigado pela ajuda.

Eu também achei difícil para a EA abrir tantas encomendas. Eu tentei limitar o número de pedidos com este código

Ou seja, abrir um pedido somente às 10:00 horas. Mas o resultado é o mesmo.

2020.10.27 10:25:17.548 Core 1 272 Mb de memória utilizada incluindo 36 Mb de dados históricos, 64 Mb de dados de tick



Eu não conheço bem o MKL5, para ser honesto. Mas a lógica é coxa. Você precisa abrir um pedido. Isto é conseguido atribuindo uma variável de hora no início da função no carrapato e no final, atribuindo-a a outra variável. No meio, se as variáveis não forem iguais, você abre uma ordem. O exemplo acima, com minutos, é o mesmo.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //
int tm; 
//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10 && tm != time_now.hour) //на первом тике, когда time_now.hour станет 10 а tm еще 9
                                           // и на следующем тике tm будет равно 10


   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }  

tm= time_now.hour;
     return;
  }



 
MakarFX:

Isto é claro, mas como solicitar uma lista de fontes instaladas?

Acho que em seu exemplo, trata-se de uma lista caseira. Sem consultar o software.

 
Valeriy Yastremskiy:

Eu não conheço bem o MKL5, para ser honesto. Mas a lógica é coxa. Você precisa de um pedido para abrir o mesmo. Isto é conseguido atribuindo uma variável de hora no início da função no carrapato e no final, atribuindo-a a outra variável. No meio, se as variáveis não forem iguais, você abre uma ordem. O exemplo acima, com minutos, é o mesmo.

é por isso que é recomendado tentar fazer o trabalho da EA somente com seus magiks

Se nossa tarefa é abrir um pedido a uma determinada hora uma vez por dia, então o algoritmo é o seguinte:

- iniciar EA, ele verifica o número de pedidos abertos, se o pedido com nosso mágico estiver aberto, então saia até o próximo tick

- se não houver ordens, a EA espera até que a hora e minutos atuais sejam maiores do que os dados

- desta vez chegou, a EA verificará o histórico de pedidos e, se não houver um pedido com nosso mágico nas últimas 24 horas, então ela fará um pedido e sairá - a saída é útil para não processar erros do servidor, se o pedido não tiver sido feito, então no próximo tick tentaremos fazê-lo novamente, ou seja, não precisamos organizar um ciclo para múltiplas aberturas de pedidos neste tick.... mas esta é uma questão de gosto e objetivos, é a implementação mais fácil ))))

 
Igor Makanu:

é por isso que é recomendável tentar fazer o trabalho da EA exclusivamente com seus mágicos

Se a tarefa é abrir um pedido uma vez por dia a uma determinada hora, o algoritmo é o seguinte:

- iniciar EA, ele verifica o número de pedidos abertos, se o pedido com nosso mágico estiver aberto, então saia até o próximo tick

- se não houver ordens, a EA espera até que a hora e minutos atuais sejam maiores do que os dados

- desta vez chegou, a EA verificará o histórico de pedidos e, se não houver um pedido com nosso mágico nas últimas 24 horas, então ela fará um pedido e sairá - a saída é útil para não processar erros do servidor, se o pedido não tiver sido feito, então no próximo tick tentaremos fazê-lo novamente, ou seja, não precisamos organizar um ciclo para múltiplas aberturas de pedidos neste tick.... Mas esta é uma questão de gosto e objetivos e é a mais fácil implementação ))))

Ainda não alcançamos o nível de mágico de lá. É claro. Em 5 c, é claro, o dilema é se fazer um loop com análise de erro ou tentar abrir uma posição usando um tick. No caso de respostas longas, pode ser mais fácil no tique.

 
Valeriy Yastremskiy:

Eu não conheço bem o MKL5, para ser honesto. Mas a lógica é coxa. Você precisa de um pedido para abrir o mesmo. Isto é conseguido atribuindo uma variável de hora no início da função no carrapato e no final, atribuindo-a a outra variável. No meio, se as variáveis não forem iguais, você abre uma ordem. O exemplo acima, com minutos, é o mesmo.



Muito obrigado. O conhecimento que você me deu era exatamente o que me faltava. Eu tentei fazer o mesmo, mas por analogia com 4. Acontece que a analogia é equivocada neste caso.
Mais uma vez, obrigado.

 
Igor Makanu:

é por isso que é recomendável tentar fazer o trabalho da EA exclusivamente com seus mágicos

Se a tarefa é abrir um pedido uma vez por dia a uma determinada hora, o algoritmo é o seguinte:

- iniciar EA, ele verifica o número de pedidos abertos, se o pedido com nosso mágico estiver aberto, então saia até o próximo tick

- se não houver ordens, a EA espera até que a hora e minutos atuais sejam maiores do que os dados

- desta vez chegou, a EA verificará o histórico de pedidos e, se não houver um pedido com nosso mágico nas últimas 24 horas, então ela fará um pedido e sairá - a saída é útil para não processar erros do servidor, se o pedido não tiver sido feito, então no próximo tick tentaremos fazê-lo novamente, ou seja, não precisamos organizar um ciclo para múltiplas aberturas de pedidos neste tick.... mas esta é uma questão de gosto e objetivos e é a mais fácil implementação ))))

Obrigado pelas informações valiosas. Graças a você, minha compreensão do mql 5 aumentou e se aprofundou.
Serei muito grato se você puder mostrar meu código como um exemplo de seu processo de pensamento. Isso me ajudará a assimilar sua idéia de forma rápida e precisa.
Muito obrigado mais uma vez.

Aqui está meu código, onde eu escrevi incorretamente a condição de que um pedido deve abrir somente às 10:00

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10&&time_now.min==0)
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }
 
ANDREY:

Aqui está meu código onde escrevi errado a condição, segundo a qual o pedido deve abrir somente às 10:00

Eu não escrevo em MQL5 puro. Você pode fazer um pedido usando a classe CTrade SB

procurar na CTrade artigos sobre o uso da SB

Razão: