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

 
Alexey Viktorov:

Na verdade, nem todos os teclados têm o que escrevi sobre... Talvez você devesse mudar seu teclado.



demasiados "especialistas" aqui :) Por isso, pensei em gozar com você. Em vez de responderem a perguntas, eles começam a dar palestras.

 
Luchezar Shalomaev:

Há demasiados "especialistas" aqui :) Por isso, decidi gozar com eles. Em vez de responder às perguntas, comece a dar palestras.

Então não espere respostas normais de pessoas que estão ocupadas fazendo suas próprias coisas e estão distraídas de ajudá-lo, se você se coloca em uma posição de gozar com o doador.

Isto não é um circo.

 
Artyom Trishkin:

Então não espere no futuro de pessoas que estão ocupadas com seus negócios, e distraídas para ajudá-lo, respostas normais, se você se colocar em uma posição de gozar com o doador.

Isto não é um circo.



Caro moderador, se isto não for um circo, você gostaria de levar os palhaços que responderam às minhas perguntas para os bastidores? Obrigado.

 
Luchezar Shalomaev:


Caro moderador, se isto não for um circo, você teria a gentileza de levar os palhaços que responderam às minhas perguntas para os bastidores? Obrigado.

É esta a maneira de enviá-lo para os bastidores?

Você:

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Qualquer pergunta de iniciantes sobre MQL4, ajuda e discussão sobre algoritmos e códigos

Luchezar Shalomaev, 2017.09.20 22:25

Olá. Baixe o arquivo de cotação EUR USD 1 minuto da Ducascopy, tentando importar para o MT4 Alpari, nada acontece. Apenas uma janela de conversão em branco. O mesmo na Instaforex. O que pode ser?

Resposta:

Você:

Resposta:

Você:

Resposta:

Você:

Você:

Você:

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Qualquer dúvida que os novatos tenham sobre MQL4, ajuda e discussão sobre algoritmos e códigos

Luchezar Shalomaev, 2017.09.21 21:10


Há demasiados "especialistas" aqui :) Por isso, decidiu gozar com eles. Em vez de responder às suas perguntas, eles começam a pregar.


Sua pergunta foi respondida - pressione F2, o que abre a janela de download de citações.

Mas você começou a fazer banners e recebeu o banner em resposta.

O que você queria? O que você veio com, como eles dizem...

 
Artyom Trishkin:

Então, devo enviá-los aos bastidores?

Você:

Resposta:

Você:

Resposta:

Você:

Resposta:

Você:

Você:

Você:


Você foi respondido à sua pergunta - pressione F2, o que traz a janela de download de citações.

Mas você começou a brincar, ao que você recebeu uma brincadeira em resposta.

O que você quer? O que você veio com, como eles dizem...













Bem, você diz que não se trata de um circo.

 
Aleksey Vyazmikin:
A maneira mais fácil de escrever a lógica é torná-la mais clara - não entendo qual é a lógica... você pode descrevê-lo em palavras?

Encontrei uma falha na lógica. Fixou-o e funciona.

int Doji()
{

//Параметры Дожи
   double Open1 = NormalizeDouble (iOpen(Symbol(), PERIOD_H4,1),Digits);
   double Close1 = NormalizeDouble (iClose(Symbol(), PERIOD_H4,1),Digits);
   double High1 = NormalizeDouble (iHigh(Symbol(), PERIOD_H4,1),Digits);
   double Low1 = NormalizeDouble (iLow(Symbol(), PERIOD_H4,1),Digits);
   
//Параметры предыдущей свечи
   double Open2 = NormalizeDouble (iOpen(Symbol(), PERIOD_H4,2),Digits);
   double Close2 = NormalizeDouble (iClose(Symbol(), PERIOD_H4,2),Digits);
   double High2 = NormalizeDouble (iHigh(Symbol(), PERIOD_H4,2),Digits);
   double Low2 = NormalizeDouble (iLow(Symbol(), PERIOD_H4,2),Digits);
   
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед Доджи
   double ATR = iATR(Symbol(),PERIOD_H4,21,1);
   
   
//Математическое описание патерна Дожи
   if(Close1 < High1 -0.3*(High1-Low1) && 
      Open1 < High1 -0.3*(High1-Low1) && 
      Close1 > High1 -0.7*(High1-Low1) && 
      Open1 > High1 -0.7*(High1-Low1) && 
      MathAbs(Close1-Open1) < 0.2*(High1-Low1)&&
      MathAbs(Close2-Open2) > 0.7*ATR)
      {
         if((Close2 - Open2) > 0 && New_Bar == true)
         { 
            Print ("Down"); return(-1);// Условие для продаж
         }
         if((Close2 - Open2) < 0 && New_Bar == true)
         {
            Print ("Up"); return(1);// Условие для покупок
         }
      }
      return(0);
}
O erro estava na descrição matemática do padrão Doji.
 

Agora a tarefa é a seguinte. Precisamos desenhar um retângulo em vez de uma seta, que será traçado por Doji max e min e pelo tempo de abertura do Doji e o tempo de abertura de um novo bar depois do Doji. E tudo isso está em um gráfico de 4 horas. Ao mesmo tempo, eu preciso estar em um gráfico de 5 minutos. O que você pode aconselhar? Como implementar?

Não sei como fazê-lo. Obrigado.

 
voron_026:

Encontrei uma falha na lógica. Consertado e está funcionando.

O erro estava na descrição matemática do padrão Doji.

Bom para você. Você já programou antes? Seu estilo não é típico.

voron_026:

Agora a tarefa é a seguinte. Em vez de setas, temos que desenhar um retângulo, que será desenhado por Doji max e min e pelo tempo de abertura do Doji e tempo de abertura de um novo bar depois do Doji. E tudo isso em um gráfico de 4 horas. Ao mesmo tempo, eu preciso estar em um gráfico de 5 minutos. O que você pode aconselhar? Como implementar?

Obrigado.


Fazer declaração de variáveis comuns (globais) que serão calculadas em função e retornar a partir delas nulas(){} . Você pode definir o tempo... De qualquer forma, ainda não entendi a pergunta exata.

A propósito, eu não conhecia a abordagem da variável global antes e estava retornando todos os valores da função via variável string...

 
voron_026:

Agora a tarefa é a seguinte. Precisamos desenhar um retângulo em vez de uma seta, que será traçado por Doji max e min e pelo tempo de abertura do Doji e o tempo de abertura de um novo bar depois do Doji. E tudo isso está em um gráfico de 4 horas. Ao mesmo tempo, eu preciso estar em um gráfico de 5 minutos. O que você pode aconselhar? Como implementar?

Obrigado.

Você tem que usar OBJ_RECTANGLE. Você sabe como obter dados de preço e tempo do gráfico H4.

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

Bom para você. Você já programou antes? Seu estilo não é típico.


Fazer declaração de variáveis gerais (globais) que serão calculadas na função e devolvidas a partir dela nulas(){} . Você pode determinar o tempo... Eu não entendo exatamente qual é a pergunta.

A propósito, eu não conhecia a abordagem da variável global antes e retornei todos os valores da função através da variável string...


OláAleksey Vyazmikin Estou programando não faz muito tempo. Estou lentamente entrando no assunto.

Eu tentei desta maneira:

//+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                                       Copyright 2017,UriyGlushko |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017,UriyGlushko"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern string Rodot           = "Параметры робота";
extern double Lots            = 0.2;
extern int    StopLoss        = 20;
extern int    TakeProfit      = 80;
extern int    Magic           = 999999;
extern int    Slippage        = 3; // Проскальзывание

extern bool UseDojiCandles = true; // Использование патерна Доджи
int DojiCandle = 0;
bool New_Bar = false;

datetime time0 = iTime(Symbol(),PERIOD_H4,0);
datetime time1 = iTime(Symbol(),PERIOD_H4,1);
double open0 = iOpen(Symbol(), PERIOD_H4,0);
double open1 = iOpen(Symbol(), PERIOD_H4,1);
double close1 = iClose(Symbol(), PERIOD_H4,1);
double high1 = iHigh(Symbol(), PERIOD_H4,1);
double low1 = iLow(Symbol(), PERIOD_H4,1);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  if (Digits == 3 || Digits ==5 )
  {
   TakeProfit *= 10;
   StopLoss   *= 10;
   Slippage   *= 10;
  }
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  
   
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
Fun_New_Bar();

   if(UseDojiCandles = true && Doji() == 1 && New_Bar == true)
     {
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вверх");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         DojiCandle ++;
     }
   

   
   if(UseDojiCandles = true && Doji() == -1 && New_Bar == true)
     {
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вниз");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 

         DojiCandle ++;
     }
     

   
}
//+------------------------------------------------------------------+
//    Поиск всех объектов
//+------------------------------------------------------------------+


 




//+------------------------------------------------------------------+
//    Функция паттерна Доджи
//+------------------------------------------------------------------+
int Doji()
{

//Параметры Дожи
   double Open1 = NormalizeDouble (iOpen(Symbol(), PERIOD_H4,1),Digits);
   double Close1 = NormalizeDouble (iClose(Symbol(), PERIOD_H4,1),Digits);
   double High1 = NormalizeDouble (iHigh(Symbol(), PERIOD_H4,1),Digits);
   double Low1 = NormalizeDouble (iLow(Symbol(), PERIOD_H4,1),Digits);
   
//Параметры предыдущей свечи
   double Open2 = NormalizeDouble (iOpen(Symbol(), PERIOD_H4,2),Digits);
   double Close2 = NormalizeDouble (iClose(Symbol(), PERIOD_H4,2),Digits);
   double High2 = NormalizeDouble (iHigh(Symbol(), PERIOD_H4,2),Digits);
   double Low2 = NormalizeDouble (iLow(Symbol(), PERIOD_H4,2),Digits);
   
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед Доджи
   double ATR = iATR(Symbol(),PERIOD_H4,21,1);
   
   
//Математическое описание патерна Дожи
   if(Close1 < High1 -0.3*(High1-Low1) && 
      Open1 < High1 -0.3*(High1-Low1) && 
      Close1 > High1 -0.7*(High1-Low1) && 
      Open1 > High1 -0.7*(High1-Low1) && 
      MathAbs(Close1-Open1) < 0.2*(High1-Low1)&&
      MathAbs(Close2-Open2) > 0.7*ATR)
      {
         if((Close2 - Open2) > 0 && New_Bar == true)
         { 
            Print ("Down"); return(-1);// Условие для продаж
         }
         if((Close2 - Open2) < 0 && New_Bar == true)
         {
            Print ("Up"); return(1);// Условие для покупок
         }
      }
      return(0);
}
//+------------------------------------------------------------------+
//    Функция определения нового бара
//+------------------------------------------------------------------+
void Fun_New_Bar()                              // Ф-ия обнаружения нового бара 
  {                                             
  datetime TimeBar0 = iTime(Symbol(),PERIOD_H4,0);
   static datetime New_Time=0;                  // Время текущего бара 
   New_Bar=false;                               // Нового бара нет 
   if(New_Time != TimeBar0)                        // Сравниваем время 
     { 
      New_Time = TimeBar0;                         // Теперь время такое 
      New_Bar = true;                             // Поймался новый бар 
     } 
  }  

O primeiro retângulo é desenhado. Os demais não são desenhados. Eu ainda estou tentando descobrir como fazer isso. Obrigado pelas dicas e o que você quer dizer com um estilo atípico?

Razão: