손실 없이 MetaTrader 5로 전환할 수 있도록 도와주세요 - 페이지 13

 
mario065 :

여보세요,

빙빙 돌지 않아서 안 돼 그게 내가 원하던

짧은 것은 정지된 표시기와 다른 쌍에 대해 계산된 다른 이동 버퍼를 호출합니다.

[code]
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots   2
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_type2   DRAW_COLOR_LINE
#property indicator_color1  clrBlue
#property indicator_color2  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_style2  STYLE_SOLID

input int period_1 = 20 ;
input int period_2 = 100 ;
input ENUM_MA_METHOD ma_method = MODE_SMA ;
input ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE ;

double ExtMapBuffer1[];
double ExtMapBuffer2[];
int EMHandle1= 0 ;
int EMHandle2= 0 ;
int EMHandle11= 0 ;
int EMHandle22= 0 ;
MqlParam params[];       // Структура за съхранение  параметрите на индикатора
double ma1[],ma2[],ma3[],ma4[]; //Временни буфери

int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 , ExtMapBuffer1, INDICATOR_DATA );
   SetIndexBuffer ( 1 , ExtMapBuffer2, INDICATOR_DATA );
   SetIndexBuffer ( 2 , ma1, INDICATOR_DATA );
   SetIndexBuffer ( 3 , ma2, INDICATOR_DATA );
   SetIndexBuffer ( 4 , ma3, INDICATOR_DATA );
   SetIndexBuffer ( 5 , ma4, INDICATOR_DATA );
  
   PlotIndexSetInteger ( 0 , PLOT_SHIFT , 0 );
   PlotIndexSetInteger ( 1 , PLOT_SHIFT , 0 );
  
   PlotIndexSetInteger ( 0 , PLOT_LINE_STYLE , STYLE_SOLID );
   PlotIndexSetInteger ( 1 , PLOT_LINE_STYLE , STYLE_SOLID );
//---
   PlotIndexSetInteger ( 0 , PLOT_LINE_COLOR , clrBlue );
   PlotIndexSetInteger ( 1 , PLOT_LINE_COLOR , clrRed );

   PlotIndexSetInteger ( 0 , PLOT_DRAW_TYPE , DRAW_LINE );
   PlotIndexSetInteger ( 1 , PLOT_DRAW_TYPE , DRAW_LINE );
   IndicatorSetString ( INDICATOR_SHORTNAME , "2_2_MA" );
//--- set accuracy
   IndicatorSetInteger ( INDICATOR_DIGITS , 4 );  
//---
   ArrayResize (params, 4 );
   params[ 0 ].type         = TYPE_INT ;
   params[ 0 ].integer_value=period_1;
   // Смещение
   params[ 1 ].type         = TYPE_INT ;
   params[ 1 ].integer_value= 0 ;
   // Метод расчета: простое усреднение
   params[ 2 ].type         = TYPE_INT ;
   params[ 2 ].integer_value= MODE_SMA ;
   // Тип цен для рассчета: цены закрытия
   params[ 3 ].type         = TYPE_INT ;
   params[ 3 ].integer_value= PRICE_CLOSE ;
  
   EMHandle1 = IndicatorCreate ( _Symbol , 0 , IND_MA , 4 , params);
   ArrayResize (params, 4 );
   params[ 0 ].type         = TYPE_INT ;
   params[ 0 ].integer_value=period_2;
   params[ 1 ].type         = TYPE_INT ;
   params[ 1 ].integer_value= 0 ;
   params[ 2 ].type         = TYPE_INT ;
   params[ 2 ].integer_value= MODE_SMA ;
   params[ 3 ].type         = TYPE_INT ;
   params[ 3 ].integer_value= PRICE_CLOSE ;
  
   EMHandle2 = IndicatorCreate ( _Symbol , 0 , IND_MA , 4 , params);
   ArrayResize (params, 4 );
   params[ 0 ].type         = TYPE_INT ;
   params[ 0 ].integer_value=period_1;
   params[ 1 ].type         = TYPE_INT ;
   params[ 1 ].integer_value= 0 ;
   params[ 2 ].type         = TYPE_INT ;
   params[ 2 ].integer_value= MODE_SMA ;
   params[ 3 ].type         = TYPE_INT ;
   params[ 3 ].integer_value= PRICE_CLOSE ;
  
   EMHandle11 = IndicatorCreate ( _Symbol , 0 , IND_MA , 4 , params);
   ArrayResize (params, 4 );
   params[ 0 ].type         = TYPE_INT ;
   params[ 0 ].integer_value=period_2;
   params[ 1 ].type         = TYPE_INT ;
   params[ 1 ].integer_value= 0 ;
   params[ 2 ].type         = TYPE_INT ;
   params[ 2 ].integer_value= MODE_SMA ;
   params[ 3 ].type         = TYPE_INT ;
   params[ 3 ].integer_value= PRICE_CLOSE ;
  
   EMHandle22 = IndicatorCreate ( _Symbol , 0 , IND_MA , 4 , params);
     
   return ( 0 );
}
int OnCalculate ( const int rates_total,     // размер массива price[];
                 const int prev_calculated, // количество доступных баров ;на предыдущем вызове;
                 const int begin, // с какого индекса в массиве  price[] начинаются достоверные данные;
                 const double &price[]) // массив, по которому и будет считаться индикатор;
  {
   int i;
   ArraySetAsSeries (ma1, true );
   ArraySetAsSeries (ma2, true );
   ArraySetAsSeries (ma3, true );
   ArraySetAsSeries (ma4, true );
  
   if ( CopyBuffer (EMHandle1, 0 , 0 , 1 , ma1) < 0 ){ Print ( "CopyBuffer ma1 error =" , GetLastError ());}
   if ( CopyBuffer (EMHandle2, 0 , 0 , 1 , ma2) < 0 ){ Print ( "CopyBuffer ma2 error =" , GetLastError ());}
   if ( CopyBuffer (EMHandle11, 0 , 0 , 1 , ma3) < 0 ){ Print ( "CopyBuffer ma3 error =" , GetLastError ());}
   if ( CopyBuffer (EMHandle22, 0 , 0 , 1 , ma4) < 0 ){ Print ( "CopyBuffer ma4 error =" , GetLastError ());} 
   int limit;
   //if(prev_calculated<1)
       //limit=period_1;
      limit=prev_calculated- 1 ;
   for ( i= 0 ; i<limit; i++)
   ExtMapBuffer1[ 0 ]=вычисление;
   ExtMapBuffer2[ 0 ]=вычисление;

       Comment (
       "\n=====================" ,
       "\n ma1[0]     :   " , DoubleToString (ma1[ 0 ], 5 ),
       "\n ma2[0]     :   " , DoubleToString (ma2[ 0 ], 5 ),
       "\n ma3[0]     :   " , DoubleToString (ma3[ 0 ], 5 ),
       "\n ma4[0]     :   " , DoubleToString (ma4[ 0 ], 5 ),
       "\n ExtMapBuffer1[0] : " , DoubleToString (ExtMapBuffer1[ 0 ], 4 ),
       "\n ExtMapBuffer2[0] : " , DoubleToString (ExtMapBuffer2[ 0 ], 4 )
      );
       return (rates_total);
  }
void OnDeinit ( const int reason)
  {
   Comment ( "" );      
  }
[/code] 

i(막대용) 대신 0일 때 결과가 표시되고 막대(current= i)의 경우 두 번째 쌍에 대한 데이터를 찾을 수 없다는 메시지가 표시됩니다.

쌍의 차트가 열려 있고 시장 창에 기호가 있습니다. 어디서 / 무엇을 혼동하는지 이해하지 못합니까?

하나의 지표에 두 개의 다른 쌍이 있습니다. 그렇다면 내 실수는 어디에 있습니까?

0으로 설정하면 결과는 댓글로 보는데 해보지 않아서 선이 안그려요.

설명: 한 쌍의 ma1 및 ma2 및 다른 쌍의 ma3 및 ma4.

감사해요.

첫째, 0----->prev_calculated-1에서 계산하고 마지막으로 계산된 막대에서 Rates_total까지 필요합니다.

이것:

      limit=prev_calculated- 1 ;
   for ( i= 0 ; i<limit; i++)
   ExtMapBuffer1[ 0 ]=вычисление;

이것으로 변경:

   
   for (int i=prev_calculated- 1 >= 0 ?prev_calculated- 1 : 0 ; i<rates_total; i++)
       ExtMapBuffer1[i]=вычисление;

내가 정말로 이해하지 못한 두 번째 것은, 당신은 다른 악기나 다른 시간 프레임에서 움직임 을 얻고 싶어하는데, 코드에서 둘 중 하나를 찾지 못했습니다.

 

좋은 하루 되세요, 여러분!

MT5(첨부 파일)에 대해 다음 지표를 적용할 수 있는 사람을 도와주세요.

나는 일을 위해 맥주에 10달러를 던질 것이다.

파일:
 
master_kiln :

좋은 하루 되세요, 여러분!

MT5(첨부 파일)에 대해 다음 지표를 적용할 수 있는 사람을 도와주세요.

나는 일을 위해 맥주에 10달러를 던질 것이다.

https://www.mql5.com/en/job
MQL5 работа
MQL5 работа
  • www.mql5.com
Заказы на разработку программ для трейдинга
 

우크라이나 ,

주목 해 주셔서 감사합니다.

다음은 완전한 코드입니다. 나는 그것을 그릴 수 없습니다. 가능하면 여기에 게시하십시오.

전문가에서 다른 쌍, 다른 프레임을 수행하고 하나의 지표를 다시 작성하는 것이 농담이라는 것이 멋집니다.

//+----------------------------------------------- --------------------+
//| 2_2_v2.mq5 |
//| 유리 토크만 |
//| yuriytokman@gmail.com |
//+----------------------------------------------- ------ --------------------+
#property copyright "유리 토크만"
#속성 링크 " yuriytokman@gmail.com "
#속성 버전 "1.00"
#속성 표시기_분리_창
#속성 표시기_버퍼 6
#property indicator_plots 2
#속성 표시기_유형1 DRAW_COLOR_LINE
#속성 표시기_유형2 DRAW_COLOR_LINE
#property indicator_color1 clrBlue
#property indicator_color2 clrRed
#속성 표시기_스타일1 STYLE_SOLID
#속성 표시기_스타일2 STYLE_SOLID
//#property indicator_label1 "EURUSD"
//#property indicator_label2 "GBPUSD"

입력 정수 period_1 = 13 ;
입력 정수 period_2 = 55 ;
ENUM_MA_METHOD 입력 ma_method = MODE_SMA;
입력 ENUM_APPLIED_PRICE 적용_가격 = PRICE_CLOSE;

이중 ExtMapBuffer1[];
이중 ExtMapBuffer2[];
인터엠핸들1;
인터엠핸들2;
인터엠핸들11;
인터엠핸들22;
이중 ma1[],ma2[],ma3[],ma4[];//시간 버퍼
더블 p1 = SymbolInfoDouble("EURUSD",SYMBOL_POINT);
더블 p2 = SymbolInfoDouble("GBPUSD",SYMBOL_POINT);
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
int OnInit()
{
//--- 표시기 버퍼 매핑
SetIndexBuffer(0, ExtMapBuffer1, INDICATOR_DATA);
SetIndexBuffer(1, ExtMapBuffer2, INDICATOR_DATA);
SetIndexBuffer(2, ma1, INDICATOR_DATA);
SetIndexBuffer(3, ma2, INDICATOR_DATA);
SetIndexBuffer(4, ma3, INDICATOR_DATA);
SetIndexBuffer(5, ma4, INDICATOR_DATA);

PlotIndexSetInteger(0, PLOT_SHIFT, 0);
PlotIndexSetInteger(1, PLOT_SHIFT, 0);

PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID);
//---
PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrBlue);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,clrRed);

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,1);
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,1);

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);

//--- DataWindow의 이름
IndicatorSetString(INDICATOR_SHORTNAME,"2_2_MA");
//---
//--- 정확도 설정
IndicatorSetInteger(INDICATOR_DIGITS,4);

EMHandle1 = iMA("EURUSD", 0, period_1, 0, ma_method, 적용_가격);
EMHandle2 = iMA("EURUSD", 0, period_2, 0, ma_method, 적용_가격);
EMHandle11 = iMA("GBPUSD", 0, period_1, 0, ma_method, 적용_가격);
EMHandle22 = iMA("GBPUSD", 0, period_2, 0, ma_method, 적용_가격);

ArraySetAsSeries(ExtMapBuffer1,true);
ArraySetAsSeries(ExtMapBuffer2, true);
ArraySetAsSeries(ma1, true);
ArraySetAsSeries(ma2, true);
ArraySetAsSeries(ma3, true);
ArraySetAsSeries(ma4, true);

//---
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 반복 기능 |
//+----------------------------------------------- --------------------+
int OnCalculate (const int Rates_total, // price[] 배열 크기;
const int prev_calculated,// 사용 가능한 막대의 수 ;이전 호출에서;
const int begin,// price[] 배열의 어느 인덱스에서 유효한 데이터가 시작되는지;
const double &price[]) // 지표를 계산할 배열;
{
if(CopyBuffer(EMHandle1, 0, 0, 1, ma1) < 0){Print("CopyBuffer ma1 오류=", GetLastError());}
if(CopyBuffer(EMHandle2, 0, 0, 1, ma2) < 0){Print("CopyBuffer ma2 오류=", GetLastError());}
if(CopyBuffer(EMHandle11, 0, 0, 1, ma3) < 0){Print("CopyBuffer ma3 오류=", GetLastError());}
if(CopyBuffer(EMHandle22, 0, 0, 1, ma4) < 0){Print("CopyBuffer ma4 오류=", GetLastError());}

ExtMapBuffer1[0]=(ma1[0]-ma2[0])/p1;
ExtMapBuffer2[0]=(ma3[0]-ma4[0])/p2;

논평(
"\n======================",
"\n ma1[] : ",DoubleToString(ma1[0],5),
"\n ma2[] : ",DoubleToString(ma2[0],5),
"\n ma3[] : ",DoubleToString(ma3[0],5),
"\n ma4[] : ",DoubleToString(ma4[0],5),
"\n ExtMapBuffer1[]: ",DoubleToString(ExtMapBuffer1[0],4),
"\n ExtMapBuffer2[] : ",DoubleToString(ExtMapBuffer2[0],4)
);
//---

//--- 다음 호출을 위해 prev_calculated의 반환 값
반환(요금 합계);
}
무효 OnDeinit(const int 이유)
{
논평("");
}
//+----------------------------------------------- --------------------+

 

모두에게 좋은 하루.

거래에서만 사용하기 때문에 이 지표를 MT5용으로 리메이크해 달라는 요청이 있습니다.

파일:
 

얘들아, 주제에서 벗어나서 매우 유감입니다. 어디에 써야할지 모르겠지만이 문제를 파악하는 데 도움을 줄 수 있습니까? MT4에서는 고문을 전문가 폴더에 복사하고 전략 테스터를 실행하고, 모든 것이 잘 보이고 작동하지만 MT5에서는 Advisor 를 테스트하는 방법을 알 수 없습니다. Experts 폴더에 .mq5 확장자를 추가하지만 전략 테스터나 터미널에는 나타나지 않습니다. , 거기에는 표준 고문 만 표시됩니다. 아무데도 복사하지 않았고 다르게 볼 수 없으며 그게 다입니다. Advisor를 올바르게 복사하는 방법과 그를 볼 위치를 알려주십시오.

 
ZahvatkiN :

얘들아, 주제에서 벗어나서 매우 유감입니다. 어디에 써야할지 모르겠지만이 문제를 파악하는 데 도움을 줄 수 있습니까? MT4에서는 고문을 전문가 폴더에 복사하고 전략 테스터를 실행하고, 모든 것이 잘 보이고 작동하지만 MT5에서는 Advisor 를 테스트하는 방법을 알 수 없습니다. Experts 폴더에 .mq5 확장자를 추가하지만 전략 테스터나 터미널에는 나타나지 않습니다. , 거기에는 표준 고문 만 표시됩니다. 아무데도 복사하지 않았고 다르게 볼 수 없으며 그게 다입니다. Advisor를 올바르게 복사하는 방법과 그를 볼 위치를 알려주십시오.

테스터와 실시간 모두에서 실행할 수 있으며 ex5 확장이 있는 EA, 컴파일된 버전,

MetaEditor에서 mq5 파일을 열고 F7 키를 누르면 만족할 것입니다. mq5 확장자를 가진 소스 코드는 테스트 정보일 뿐이며, 바이트 코드(실행 코드)를 얻으려면 컴파일해야 합니다.

 

Urain님 답변 감사합니다. 이 모든 기본 사항만 알고 있으며 지침에 따라 모든 것을 컴파일하고 수행했지만 알고 있었지만 다시 읽었습니다. 무엇이 잘못될 수 있는지조차 모르겠습니다. 여기에서 신청합니다. 2 스킨. 이 사이트에서 다운로드한 MT5 .

파일:
1__17.jpg  420 kb
2__10.jpg  117 kb
 
ZahvatkiN :

Urain님 답변 감사합니다. 이 모든 기본 사항만 알고 있으며 지침에 따라 모든 것을 컴파일하고 수행했지만 알고 있었지만 다시 읽었습니다. 무엇이 잘못될 수 있는지조차 모르겠습니다. 여기에서 신청합니다. 2 스킨. 이 사이트에서 다운로드한 MT5.

좋습니다. 이제 grr-al.ex5 Expert Advisor가 올바른 폴더에 있는지 확인한 후 MT5를 다시 시작해야 합니다.

그건 그렇고, 컴퓨터에 MT5만 있습니까?

 

Urain이 마침내 알아냈고 사실은 Expert Advisors가 C:\Program Files\MT5\MQL5\Experts 폴더가 아니라 C:\Users\Dima\AppData\Roaming\MetaQuotes\Terminal\8B052D0699A0083067EBF3A3612360에 복사된다는 것입니다. MQL5\Experts, 그런 치질에 대한 것이 무엇인지 명확하지 않습니다. 빌어먹을 프로그래머)))