포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 945

 
Leo59 :

소스 코드 가 필요합니다 IMA 기술 지표, MetaTrader4 터미널에서 "지표 -> 추세 -> 이동 평균" 탭을 통해 호출되는 지표

이제 더 명확해졌습니까?

왜 바퀴를 재발명합니까?

OsMA 코드 또는 기타 코드에서와 같이 수행하십시오.

 //+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime & time[],
                 const double & open[],
                 const double & high[],
                 const double & low[],
                 const double & close[],
                 const long & tick_volume[],
                 const long & volume[],
                 const int & spread[])
  {
   int i,limit;
//---
   if (rates_total<=InpSignalSMA || !ExtParameters)
       return ( 0 );
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if (prev_calculated> 0 )
      limit++;
//--- macd counted in the 1-st buffer
   for (i= 0 ; i<limit; i++)
      ExtMacdBuffer[i]= iMA ( NULL , 0 ,InpFastEMA, 0 , MODE_EMA , PRICE_CLOSE ,i)-
                     iMA ( NULL , 0 ,InpSlowEMA, 0 , MODE_EMA , PRICE_CLOSE ,i);
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated, 0 ,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
//--- main loop
   for (i= 0 ; i<limit; i++)
      ExtOsmaBuffer[i]=ExtMacdBuffer[i]-ExtSignalBuffer[i];
//--- done
   return ( 0 );
  }
//+------------------------------------------------------------------+

아니면 Metaquotes를 절대적으로 불신합니까?

 

안녕하세요. 943페이지에 * dll 라이브러리의 작업 설명과 예제에 대한 스크립트를 게시했습니다. 스크립트가 작동하지 않는 이유를 조금 알았습니다.

1. 이 경우 #include<WinUser32.mqh>는 필요하지 않습니다.

2. 별도의 조건 if(lastkey != 0) Alert ("lastkey=",lastkey); 누른 키의 코드를 안정적으로 올바르게 발행합니다. 당신이 지연하면 작동하는 질문이 없을 것입니다.

3. 별도의 조건 if(lastmouse != 0) Alert("lastmouse=",lastmouse); 마우스가 움직이지 않더라도 일관되게 512를 출력합니다. 드물게 다른 번호를 미끄러짐

마우스 클릭에 대한 응답으로.

4. if(lastwnd != 0) Alert("lastwnd=",lastwnd); 라이브러리가 유니코드가 아니라 오래되었기 때문에 빈 문자열을 반환합니다.

편집기에서 *dll 라이브러리로 작업할 수 있다는 도움말을 읽었습니다. 마우스로 편집기 창으로 끌어다 놓기만 하면 됩니다. 열리지 않습니다.

문제. 누군가가 돈을 위해 "IdleLib.dll" 또는 더 나은 편집을 도울 준비가 되어 있습니다. 어딘가에 이 주제(및 기타 * dll)가 있는 경우 링크를 표시합니다.

 
조언자에서 (특정 이벤트 후) AutoTrading 금지를 규정하는 방법, 즉 AutoTrading 터미널 의 버튼을 프로그래밍 방식으로 금지로 바꾸는 방법을 알려주십시오 . ACCOUNT_TRADE_ALLOWED 상수를 호출하고 값을 false 로 변경하려고 시도했지만 컴파일러는 이것이 효과가 없을 것이라고 기록합니다( ACCOUNT_TRADE_ALLOWED == false; //expression is not effect)
 
이 시도


 #import "user32.dll"
int GetForegroundWindow();
int   PostMessageW( int   hWnd, int   Msg, int   wParam, string lParam);
#import
#define WM_COMMAND                     0x0111

после определенного события PostMessageW(GetForegroundWindow(), WM_COMMAND, 33020 , (string) 0 );
 
amavladi :
조언자에서 (특정 이벤트 후) AutoTrading 금지를 규정하는 방법, 즉 AutoTrading 터미널 의 버튼을 프로그래밍 방식으로 금지로 바꾸는 방법을 알려주십시오 . ACCOUNT_TRADE_ALLOWED 상수를 호출하고 값을 false 로 변경하려고 시도했지만 컴파일러는 이것이 효과가 없을 것이라고 기록합니다( ACCOUNT_TRADE_ALLOWED == false; //expression is not effect)

이 작업(어드바이저 거래 금지)은 세마포어(true/false.... 거래 허용/금지)로 매우 쉽게 해결됩니다.

아니면 "자동 거래" 버튼을 누르는 것이 그렇게 중요한가요?

 
charter :

이 작업(EA의 거래 금지)은 세마포어(true/false.... 거래 허용/금지)로 매우 쉽게 해결됩니다.

아니면 "자동 거래" 버튼을 누르는 것이 그렇게 중요한가요?

답변 감사 합니다 전체 터미널에 대해 AutoTrading을 비활성화할 수 없다면 당연히 그렇게 하겠습니다. 사실 여러 Expert Advisors가 내 터미널에서 작업하고

별도의 Advisor와 Equity를 모니터링 하고 싶었고, 만일의 사태에 대비하여 Aquity가 50% 하락하는 경우와 같이 모든 Advisor의 Auto 거래를 동시에 금지하고 있습니다.

 
amavladi :

답변 감사 합니다 전체 터미널에 대해 AutoTrading을 비활성화할 수 없다면 당연히 그렇게 하겠습니다. 사실 여러 Expert Advisors가 내 터미널에서 작업하고

Account Profit을 별도의 Advisor와 함께 모니터링 하고, 만일의 경우 Account Profit이 50% 감소하는 등 비상시 모든 Advisor의 Auto Trading을 동시에 금지하고 싶습니다.

나는 정말로 확인하지 않았다. 작동하려면 WinUser32.mqh를 첨부된 파일로 교체해야 합니다.

이제 테스트하고 작동합니다. 그리고 여기에 더 많은 굿즈가 있습니다

 #include <WinUser32.mqh>

void OnTick ()
{
 после определенного события wCommands( 20 ); 
}

void wCommands( int com)
{
switch (com)
{
case    1 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33137 , ( string ) 0 ); return ; //M1 |
case    2 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33138 , ( string ) 0 ); return ; //M5 |
case    3 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33139 , ( string ) 0 ); return ; //M15 |
case    4 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33140 , ( string ) 0 ); return ; //M30 |
case    5 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33135 , ( string ) 0 ); return ; //H1 |
case    6 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33136 , ( string ) 0 ); return ; //H4 |
case    7 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33134 , ( string ) 0 ); return ; //D1 |
case    8 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33141 , ( string ) 0 ); return ; //W1 |
case    9 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33334 , ( string ) 0 ); return ; //MN |
case 10 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33050 , ( string ) 0 ); return ; //Удалить эксперт |
case 11 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 35426 , ( string ) 0 ); return ; //Удалить скрипт |
case 12 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 57602 , ( string ) 0 ); return ; //Закрыть окно текушего графика |
                                                                           57604                //Сохранить как
                                                                           57607                //Вызов диспетчера печати
                                                                           57608                //Печать графика
                                                                           57609                //Предварительный просмотр
case 13 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33048 , ( string ) 0 ); return ; //Вызов свойств экстерта |
case 14 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33157 , ( string ) 0 ); return ; //Вызов свойств графика |
case 15 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33025 , ( string ) 0 ); return ; //Увеличение масштаба |
case 16 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33026 , ( string ) 0 ); return ; //Уменьшение масштаба |
case 17 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33018 , ( string ) 0 ); return ; //Переключение на бары |
case 18 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33019 , ( string ) 0 ); return ; //Переключение на свечи |
case 19 :        PostMessageA(WindowHandle( Symbol (), Period ()), WM_COMMAND, 33022 , ( string ) 0 ); return ; //Переключение на линию |

case 20 :        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33020 , ( string ) 0 ); return ; //Переключение кнопки советника |
case 21 :        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35429 , ( string ) 0 ); return ; //Окно логина и пароля |
case 22 :        PostMessageA(GetForegroundWindow(), WM_COMMAND, 37400 , ( string ) 0 ); return ; //Пересканировать сервера |
case 23 :        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35403 , ( string ) 0 ); return ; //Глобальные переменные |
case 24 :        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35419 , ( string ) 0 ); return ; //Список индикаторов |
case 25 :        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33265 , ( string ) 0 ); return ; //Открывает окно настройки |
case 26 :        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33262 , ( string ) 0 ); return ; //Архив катировак |
case 27 :        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33309 , ( string ) 0 ); return ; //Обзор рынка |
case 28 :        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33310 , ( string ) 0 ); return ; //Навигатор |
case 29 :        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33314 , ( string ) 0 ); return ; //Терминал |
case 30 :        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33315 , ( string ) 0 ); return ; //Тестер стратегий |
}
}


그리고 WinUser32.mqh를 교체하지 않고도 작동하도록 이전 게시물을 수정했습니다.

파일:
winuser32.mqh  71 kb
 

안녕하십니까... 우리는 문제가 다음과 같다는 것을 압니다. 코드를 컴파일할 때 변수 d는 값 110을 취하고 표시기는 모든 것을 올바르게 표시하지만 새 막대의 출현으로 변수는 109가 되므로 모든 표시기 판독값이 완전히 엉망이 됩니다. 난 이미 자이팔이야..... 뭔데????

 int start()
  {
   int limit,Val,Oi;
  
   drawonce();
//limit=Bars;
if (b!= Bars ){
b= Bars ;
datetime ldt_BeginDay = iTime ( NULL , PERIOD_D1 ,Q); 
int li_Bar = iBarShift ( NULL , 0 , ldt_BeginDay);
d= 0 ;

 for ( int i=li_Bar- 10 ; i>= 0 ; i--){  
 
 
if (curDay!=TimeDay(Time[i])) {

curDay=TimeDay(Time[i]);
OOO=iClose( NULL , PERIOD_D1 ,Q-d+ 1 )-iOpen( NULL , PERIOD_D1 ,Q-d+ 1 );
if (volarr[Q-d]!= 0 ) Val=volarr[Q-d]-volarr[Q-d+ 1 ];
if (oiarr[Q-d]!= 0 )  Oi=oiarr[Q-d]-oiarr[Q-d+ 1 ];
d++;
}
Buffer1[i]=Val;
Buffer2[i]=Oi;
Buffer3[i]=OOO;

}   
   
   
}
   
   WindowRedraw();
   Comment (Q, "   " ,d);
   return ( 0 );
  }

왜, 컴파일할 때 하나의 값이 변수이고 새로운 막대의 출현으로 변수가 변경되는 건가요????

 
글쎄요..... 제 경우에는 프로가 없어도 강함????
 
누구든지 컴파일과 새로운 바의 도착의 차이점이 무엇인지 설명할 수 있습니까 ????