MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 316

 
Alexey Viktorov :

실제로 모든 키보드에 내가 쓴 내용이 있는 것은 아닙니다. 키보드를 변경할 수 있나요?



"전문가"가 너무 많습니다 :) 그래서 농담으로 결정했습니다. 질문에 답하는 대신 가르치기 시작합니다.

 
Luchezar Shalomaev :

"전문가"가 너무 많습니다 :) 그래서 농담으로 결정했습니다. 질문에 답하는 대신 가르치기 시작합니다.

그러면 앞으로는 자신의 일로 바쁘고 당신을 도우려고 하는 데 정신이 팔린 사람들에게 주는 사람을 농담하는 입장에 처한다면 정상적인 대답을 기대하지 마십시오.

이것은 서커스가 아닙니다.

 
Artyom Trishkin :

그러면 앞으로는 자신의 일로 바쁘고 당신을 도우려고 하는 데 정신이 팔린 사람들에게 주는 사람을 농담하는 입장에 처한다면 정상적인 대답을 기대하지 마십시오.

이것은 서커스가 아닙니다.



진행자님, 이것이 서커스가 아니라면 무대 뒤에서 내 질문에 대답한 광대를 데려가 주세요. 고맙습니다.

 
Luchezar Shalomaev :


진행자님, 이것이 서커스가 아니라면 무대 뒤에서 내 질문에 대답한 광대를 데려가 주세요. 고맙습니다.

그래서 무대 뒤에서 보내?

너:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

루체자르 샬로예프 , 2017.09.20 22:25

안녕하세요. Ducascopy에서 EUR USD 시세가 포함된 파일을 1분 동안 다운로드했는데 Alpari를 MT4로 가져오려고 했지만 아무 일도 일어나지 않았습니다. 그냥 비어 있는 전환 기간입니다. Instaforex에도 있습니다. 무엇이 잘못될 수 있습니까?

답변:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

비탈리 무지첸코 , 2017.09.20 22:32

dukascopy에서 거래하시겠습니까? 아니다? 그렇다면 왜 그들의 인용문이 필요합니까?

너:

답변:

너:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

루체자르 샬로예프 , 2017.09.20 22:46


미안하지만 내 임무는 그들이 주는 것보다 더 많은 것을 요구합니다 .

답변:

너:

당신에게:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

알렉세이 빅토 로프 , 2017.09.21 09:34

실제로 모든 키보드에 내가 쓴 내용이 있는 것은 아닙니다. 키보드를 변경할 수 있나요?


너:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

루체자르 샬로마예프 , 2017.09.21 21:10


"전문가"가 너무 많습니다 :) 그래서 농담으로 결정했습니다. 질문에 답하는 대신 가르치기 시작합니다.


귀하의 질문 에 대한 답변이 완료되었습니다. F2 키를 누르면 견적 다운로드 창이 열립니다.

그러나 당신은 농담을 하기 시작했고, 그에 대한 대답으로 당신에 대한 농담을 받았습니다.

그리고 무엇을 원했습니까? 그들이 말한대로 온 것들로 ...

 
Artyom Trishkin :

그래서 무대 뒤에서 보내?

너:

답변:

너:

답변:

너:

답변:

너:

당신에게:

너:


귀하의 질문 에 대한 답변이 완료되었습니다. F2 키를 누르면 견적 다운로드 창이 열립니다.

그러나 당신은 농담을 하기 시작했고, 그에 대한 대답으로 당신에 대한 농담을 받았습니다.

그리고 무엇을 원했습니까? 그들이 말한대로 온 것들로 ...













글쎄, 당신은 서커스에 대해 말하는 것이 아닙니다.

 
Aleksey Vyazmikin :
가장 쉬운 방법은 논리를 더 명확하게 작성하는 것입니다. 어떤 종류의 논리가 있는지 즉시 이해하지 못합니다. 말로 설명할 수 있습니까?

논리에서 오류를 발견했습니다. 고정되고 모든 것이 작동했습니다.

 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 );
}
오류는 Doji 패턴의 수학적 설명에 있었습니다.
 

이제 다음 작업입니다. 화살표 대신 직사각형을 그려야 하는데, 이는 최대, 최소 도지와 도지 오픈 시간과 도지 이후에 새로운 바가 열리는 시간에 따라 구축될 것입니다. 그리고 이것은 모두 4시간 차트에 있습니다. 이 경우에는 5분 동안 대기해야 합니다. 무엇을 조언할 수 있습니까? 구현하는 방법?

고맙습니다.

 
voron_026 :

논리에서 오류를 찾았습니다. 고정되고 모든 것이 작동했습니다.

실수는 Doji 패턴의 수학적 설명에 있었습니다.

당신을 위해 행복. 이전에 프로그래밍한 적이 있습니까? 당신의 스타일은 그다지 일반적이지 않습니다.

보론_026 :

이제 다음 작업입니다. 화살표가 아닌 직사각형을 그려야 하는데, 이것은 최대, 최소 도지와 도지 오픈 시간과 도지 이후에 새로운 바가 열리는 시간에 따라 구축될 것입니다. 그리고 이것은 모두 4시간 차트에 있습니다. 이 경우에는 5분 안에 있어야 합니다. 무엇을 조언할 수 있습니까? 구현하는 방법?

고맙습니다.


함수에서 계산되고 void(){}에서 반환될 공통(전역) 변수를 선언합니다. 시간을 결정하는 방법을 알고 있습니다 ... 일반적으로 질문이 정확히 무엇인지 아직 이해하지 못했습니다.

그건 그렇고, 이전에는 전역 변수로 접근하는 방법을 몰랐고 문자열 변수를 통해 함수에서 모든 값을 반환했습니다 ...

 
voron_026 :

이제 다음 작업입니다. 화살표 대신 직사각형을 그려야 하는데, 이는 최대, 최소 도지와 도지 오픈 시간과 도지 이후에 새로운 바가 열리는 시간에 따라 구축될 것입니다. 그리고 이것은 모두 4시간 차트에 있습니다. 이 경우에는 5분에 있어야 합니다. 무엇을 조언할 수 있습니까? 구현하는 방법?

고맙습니다.

OBJ_RECTANGLE을 사용해야 합니다. H4 차트에서 가격 및 시간 데이터를 가져올 수 있습니다.

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

당신을 위해 행복. 이전에 프로그래밍한 적이 있습니까? 당신의 스타일은 그다지 일반적이지 않습니다.


함수에서 계산되고 void(){}에서 반환될 공통(전역) 변수를 선언합니다. 시간을 결정하는 방법을 알고 있습니다 ... 일반적으로 질문이 정확히 무엇인지 아직 이해하지 못했습니다.

그건 그렇고, 이전에는 전역 변수로 접근하는 방법을 몰랐고 문자열 변수를 통해 함수에서 모든 값을 반환했습니다 ...


좋은 하루 Aleksey Vyazmikin 최근에 프로그래밍에 입문했습니다. 나는 천천히 주제에 빠져들고 있다.

다음과 같이 시도했습니다.

 //+------------------------------------------------------------------+
//|                                                          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 ;                             // Поймался новый бар 
     } 
  }  

첫 번째 사각형이 그려집니다. 나머지는 그려지지 않습니다. 어떻게 할까 고민하면서. 팁 감사합니다. 전형적인 스타일이 아니라는 것은 무엇을 의미합니까?