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

 
WindUP:
Obrigado, mas será que poderíamos ter pelo menos um exemplo objetivo? Uma vista de cima, por assim dizer. Sou um novato completo e já estou no assunto há dois dias :-)

aqui provavelmente há algo semelhante

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput int    Inpcopiedrates = 2;    // какой бар
sinput double Inplow         = 100;  // отступить от low
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
 
SanAlex:

Eu também estou tentando aprender - acho que estou chegando a algum lugar.

Hi. Desculpe, vejo na captura de tela que você conseguiu, mas não vi onde neste código está a função de copiar os dados da vela anterior [1] ?




Você pode me dizer, por favor, os cursos de programação MQL5 para manequins, do simples ao complexo, onde e com o que é melhor começar, para obter mais resultados e menos tempo a perder? Eu ficaria grato :-)

 
WindUP:

Hi. Desculpe, vejo na captura de tela que você conseguiu, mas não vi onde neste código há uma função para copiar dados de velas anteriores [1] ?




Você pode me dizer, por favor, os cursos de programação MQL5 para manequins, do simples ao complexo, onde e como melhor começar, para obter mais resultados e menos tempo a perder? Eu ficaria grato :-)

Imagine que um amigo se aproxima de você e pede para "ensiná-lo a trabalhar na Internet". É difícil imaginar o que ensinar? É igualmente difícil ensinar programação. Há uma tarefa - há uma solução. Mas assim mesmo... você pode aprender qualquer idioma, o básico é o mesmo para todos eles. Programar não é tanto escrever código, mas definir um problema, escrever um algoritmo para sua solução e só então escrever código. E a etapa final, a depuração e a verificação do resultado.

No código da SanAlrx, não entendo porque temos que fazer tal estoque de dados copiados se temos uma tarefa específica para obter OHLC apenas para o primeiro castiçal.

int copied=CopyRates(Symbol(),0,0,10,rates);

e por que copiar os valores da corrente, apenas abriu uma vela. Mas... esta é sua decisão e suas baratas.

 
WindUP:

Hi. Desculpe, vejo na captura de tela que você conseguiu, mas aqui eu não vi onde neste código está a função de copiar os dados da vela anterior [1] ?




Você pode me dizer, por favor, os cursos de programação MQL5 para manequins, do simples ao complexo, onde e como melhor começar, para obter mais resultados e menos tempo a perder? Eu ficaria grato :-).

Eu mesmo sou estudante - por exemplo, olho a documentaçãohttps://www.mql5.com/ru/docs/series/copyrates , há um exemplo de roteiro, guardo-o em meu PC e começo a lê-lo e a trabalhar os detalhes por intuição.

e esta função - por intuição - foi o que eu encontrei.

//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;

É para COMPRAR "SL".

Para VENDER Deve ser assim

   double sl=rates[Inpcopiedrates].high+Inphigh/100;

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Eu acabei de colocar um número aqui - seria possível comprar até 10 barras. Mas você não precisa disso - você precisa de 1 (um).

   int copied=CopyRates(Symbol(),0,0,10,rates);
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
WindUP:

Hi. Desculpe, vejo na captura de tela que você conseguiu, mas aqui eu não vi onde neste código está a função de copiar os dados da vela anterior [1] ?




Como posso dizer a vocês cursos de programação MQL5 para manequins, do simples ao complexo, onde e com o que é melhor começar, para obter mais resultados e menos tempo a perder? Eu ficaria grato :-)

aqui está um bom exemplo - basta ir até a página e aqui está um roteiro melhor para contar como funciona.https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint

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

Eu mesmo estou aprendendo - por exemplo, fui à documentaçãohttps://www.mql5.com/ru/docs/series/copyrates , há um roteiro de exemplo, guardo-o em meu computador e começo a lê-lo e explorá-lo tateando para obter detalhes.

e esta função - por intuição - foi o que eu encontrei.

É para COMPRAR "SL".

Para VENDER Deve ser assim

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Eu acabei de colocar um número aqui - seria possível comprar até 10 barras. Mas você não precisa dele - você precisa de 1 (um).

Isto abre e define o SL para COMPRAR e VENDER

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput double Inplowhigh     = 100;  // отступить low high
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   OnStartBuy();
   OnStartSell();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartBuy()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].low-Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartSell()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_BID);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].high+Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening SELL position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+

Foto por

 

Olá.

Poderia me dar uma dica, estou acima da minha cabeça.

Eu prescrevo indicador através do iCustom e diante de um problema - indicador tem um menu de texto com uma escolha, ele abre e há vários itens prescritos, bem, eu acho que é claro)

Como posso adicioná-lo no menu?

externo int HIT = 0; não funciona, pára de exibir, não deixando nenhum parâmetro exibido.

Talvez através da ENUM , o que escolher, ou talvez algo mais?

Obrigado de antemão.

Arquivos anexados:
 
Сергей:

Olá.

Poderia me dar uma dica, estou acima da minha cabeça.

Eu prescrevo indicador através do iCustom e diante de um problema - indicador tem um menu de texto com uma escolha, ele abre e há vários itens prescritos, bem, eu acho que é claro)

Como posso adicioná-lo no menu?

externo int HIT = 0; não funciona, pára de exibir, não deixando nenhum parâmetro exibido.

Talvez através da ENUM , o que escolher, ou talvez algo mais?

Obrigado de antemão.

Coloque um fio vazio "" ou um espaço ""

 

Portanto, eu queria prescrevê-lo de alguma forma para que eu pudesse mudar as configurações.

Eu tenho um item diferente para cada par e como selecioná-lo?

E sem esse menu não é relevante, e a captura de tela é apenas um exemplo de um menu semelhante.

 
Сергей:

Portanto, eu queria prescrevê-lo de alguma forma para que eu pudesse mudar as configurações.

Eu tenho um item diferente para cada par e como selecioná-lo?

E sem esse menu não é relevante, e a captura de tela é apenas um exemplo de um menu semelhante.

Desculpe pelo descuido. O indicador tem uma enumeração. E no Expert Advisor, é necessário especificar o nome desta enumeração como o tipo de variável nos parâmetros de entrada.

Embora eu não tenha tentado... e talvez tenhamos que repetir esta enumeração na EA, ou apenas definir o tipo de variável ENUM_BASE_CORNER

Razão: