전문 고문 - 기타 질문 - 페이지 12 1...5678910111213141516171819...43 새 코멘트 honest_knave 2016.12.18 19:36 #111 Marco vd Heijden : 그럴 것 같아요. 약간 다릅니다. 전역 대 정적은 여기도 저기도 아닙니다. 그러나 재설정 방법은 좋습니다. 오버런을 방지합니다. honest_knave 2016.12.18 19:38 #112 honest_knave : 전역 대 정적은 여기도 저기도 아닙니다. 그러나 재설정 방법은 좋습니다. 오버런을 방지합니다. 내가 너무 빨리 말했다. 당신의 것은 다른 방향으로 뛰어 넘습니다. 나중에 CTRL을 누르면 트리거됩니다. 차트를 클릭한 다음 Ctrl 키를 누르면 차트가 실행됩니다. Max Enrik 2016.12.19 09:19 #113 @honest_knave - 귀하의 의견에 감사드립니다. 그 점에 감사드립니다. 하지만 먼저 @Marco vd Heijden 의견을 시도하기 시작했습니다. (나는 그것에 대한 당신의 모든 의견을 읽었습니다. ) @Marco vd Heijden - 고마워요. 하지만 내가 뭔가 잘못하고 있다고 생각합니다. 어쩌면 더 명확하게 이해하지 못할 수도 있습니다. 어쨌든 시도했지만 코드 아래에서 찾을 수 있습니다. 내 실수가 어디 있습니까? //+------------------------------------------------------------------+ //| keydown.mq4 | //| Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict string prefix = "Custom Expert |" ; string lotedit = prefix + "Edit Name" ; string lotbtnplus = prefix + "Lot button Plus" ; string lotbtnminus = prefix + "Lot button Minus" ; double lot = 0.01 , lotstep = 0.01 ; bool ctrl_click; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit (){ //--- create timer EventSetTimer ( 60 ); graphicsObj(); //--- return ( INIT_SUCCEEDED );} //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason){ //--- destroy timer EventKillTimer (); ObjectsDeleteAll ( 0 , prefix );} //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick (){ //--- graphicsObj();} //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer () { //--- } //+------------------------------------------------------------------+ void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam){ if ( id == CHARTEVENT_CLICK ) { if ( sparam == lotbtnplus ) { ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false ); lot = lot + lotstep; update(); Print ( " | lot plus : " , lot ); return ; } Print ( "Click" ); ctrl_click = 1 ; } if ( id == CHARTEVENT_KEYDOWN ) { //Print(lparam);// print to identify keycode if ( lparam == 17 ) // ctrl key { if ( ctrl_click == 1 ) // if mouse click { //Do Something when CTRL (keycode 17) is pressed if ( sparam == lotbtnplus ) { ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false ); lot = lot + ( lotstep * 10 ); Print ( " | lot plus + Ctrl initial: " , lot ); update(); Print ( " | lot plus + Ctrl: " , lot ); return ; } Print ( "Ctrl + Click" ); ctrl_click = 0 ; // reset } } ctrl_click = 0 ; // reset if not ctrl }} //|+--------------------------------------------------------------------------------+ //| - Function Update | //|+--------------------------------------------------------------------------------+ void update(){ //--- ObjectSetString ( 0 , lotedit, OBJPROP_TEXT , DoubleToString ( lot, 2 ) ); //--- return ;} void graphicsObj(){ ObjectCreate ( 0 , lotedit, OBJ_EDIT , 0 , 0 , 0 ); ObjectSetInteger ( 0 , lotedit, OBJPROP_XDISTANCE , 30 ); ObjectSetInteger ( 0 , lotedit, OBJPROP_YDISTANCE , 30 ); ObjectSetInteger ( 0 , lotedit, OBJPROP_XSIZE , 60 ); ObjectSetInteger ( 0 , lotedit, OBJPROP_YSIZE , 30 ); ObjectSetString ( 0 , lotedit, OBJPROP_TEXT , DoubleToString ( lot, 2 )); ObjectCreate ( 0 , lotbtnplus, OBJ_BUTTON , 0 , 0 , 0 ); ObjectSetString ( 0 , lotbtnplus, OBJPROP_TEXT , "+" ); ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_XDISTANCE , 100 ); ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_YDISTANCE , 30 ); ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_XSIZE , 70 ); ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_YSIZE , 30 ); ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_BACK , false ); ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_SELECTABLE , false );} expert advisor - miscellaneous Help with chart event help me please [solved] honest_knave 2016.12.19 09:38 #114 첫 번째 문제는 CHARTEVENT_CLICK 가 CHARTEVENT_OBJECT_CLICK 와 같지 않다는 것입니다. 차트를 클릭하는 것이 아니라 개체에 대한 클릭을 포착하려고 합니다. void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam){ // if( id == CHARTEVENT_CLICK ) if ( id == CHARTEVENT_OBJECT_CLICK ) honest_knave 2016.12.19 10:12 #115 void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam){ static bool wasCTRL= false ; if (id== CHARTEVENT_OBJECT_CLICK && sparam == lotbtnplus) { ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false ); lot+=(wasCTRL)?lotstep* 10 :lotstep; update(); Print ( " | lot plus : " , lot ); return ; } wasCTRL=(id== CHARTEVENT_KEYDOWN && lparam== 17 );} 도움이 될 수 있습니다. Ctrl 키를 누른 후 버튼을 얼마나 빨리 누르느냐에 따라 마우스를 두 번째 클릭할 때만 0.1로 이동한다는 것을 알 수 있습니다. expert advisor - miscellaneous Resize Chart Window event List of Keycodes for Max Enrik 2016.12.19 10:24 #116 honest_knave : 도움이 될 수 있습니다. Ctrl 키를 누른 후 버튼을 얼마나 빨리 누르느냐에 따라 마우스를 두 번째 클릭할 때만 0.1로 이동한다는 것을 알 수 있습니다. #Ctrl + 마우스 버튼 - 닫힘 와우, 그것처럼, 놀랍습니다. 감사합니다. 정직합니다! @honest_knave 와 @Marco vd Heijden 에게 특별한 감사를 전합니다. Max Enrik 2016.12.19 11:06 #117 #스프레드시트 - 열기 최근 금요일 ' 스프레드시트 '는 OnTick 기능으로 업데이트되었습니다(필요한 기능, 저에게 좋았습니다). ( MT4 플랫폼은 두 번 업데이트되었습니다. ) 업데이트 후 이 스프레드시트는 차트에서 업데이트되지 않습니다. 스프레드시트에 대한 모든 것을 확인했는데 문제가 보이지 않습니다. 스프레드시트 위의 입찰 및 매도 가격도 사용하고 있음을 알려야 합니다. 입찰 및 매도는 잘 작동하지만 스프레드시트는 그렇지 않습니다. 그래서 저는 레이블 객체 에 레이블 기능을 사용합니다. 모든 레이블 객체는 '스프레드시트' 없이도 잘 작동합니다. 또한 기능이 없는 스프레드시트의 Label 개체를 만들 때 알려야 하는데 잘 작동합니다. 그 문제는 MT4 플랫폼 업그레이드 후에 시작됩니다. 그 문제가 어디에서 오는지 잘 모르겠습니다. 내 우려를 이해한다면 이 문제를 어떻게 해결할 수 있는지 알려주십시오. 미리 감사드립니다. 코딩하는 방법? 다중 기간 표시기 표시기 기타 질문 Marco vd Heijden 2016.12.19 13:39 #118 스프레드시트 에 대한 코드가 있습니까? Max Enrik 2016.12.19 13:58 #119 Marco vd Heijden : 스프레드시트에 대한 코드가 있습니까? 나는 여전히 그것에 대해 연구하고 있으며, 또한 곧 작동하지 않는 코드의 일부를 게시할 것입니다. Max Enrik 2016.12.19 15:01 #120 2개의 다른 레이블 기능을 작성할 수 있습니까? (예: 텍스트의 경우 1, 텍스트 및 글꼴 크기 의 경우 2 . ) 1...5678910111213141516171819...43 새 코멘트 사유: 취소 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
그럴 것 같아요.
약간 다릅니다.
전역 대 정적은 여기도 저기도 아닙니다. 그러나 재설정 방법은 좋습니다. 오버런을 방지합니다.
내가 너무 빨리 말했다. 당신의 것은 다른 방향으로 뛰어 넘습니다. 나중에 CTRL을 누르면 트리거됩니다. 차트를 클릭한 다음 Ctrl 키를 누르면 차트가 실행됩니다.
@honest_knave - 귀하의 의견에 감사드립니다. 그 점에 감사드립니다. 하지만 먼저 @Marco vd Heijden 의견을 시도하기 시작했습니다. (나는 그것에 대한 당신의 모든 의견을 읽었습니다. )
@Marco vd Heijden - 고마워요.
하지만 내가 뭔가 잘못하고 있다고 생각합니다. 어쩌면 더 명확하게 이해하지 못할 수도 있습니다. 어쨌든 시도했지만 코드 아래에서 찾을 수 있습니다.
내 실수가 어디 있습니까?
//| keydown.mq4 |
//| Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
string prefix = "Custom Expert |" ;
string lotedit = prefix + "Edit Name" ;
string lotbtnplus = prefix + "Lot button Plus" ;
string lotbtnminus = prefix + "Lot button Minus" ;
double lot = 0.01 , lotstep = 0.01 ;
bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- create timer
EventSetTimer ( 60 );
graphicsObj();
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//--- destroy timer
EventKillTimer ();
ObjectsDeleteAll ( 0 , prefix );
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
graphicsObj();
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer ()
{
//---
}
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if ( id == CHARTEVENT_CLICK )
{
if ( sparam == lotbtnplus )
{
ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
lot = lot + lotstep;
update();
Print ( " | lot plus : " , lot );
return ;
}
Print ( "Click" );
ctrl_click = 1 ;
}
if ( id == CHARTEVENT_KEYDOWN )
{
//Print(lparam);// print to identify keycode
if ( lparam == 17 ) // ctrl key
{
if ( ctrl_click == 1 ) // if mouse click
{
//Do Something when CTRL (keycode 17) is pressed
if ( sparam == lotbtnplus )
{
ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
lot = lot + ( lotstep * 10 );
Print ( " | lot plus + Ctrl initial: " , lot );
update();
Print ( " | lot plus + Ctrl: " , lot );
return ;
}
Print ( "Ctrl + Click" );
ctrl_click = 0 ; // reset
}
}
ctrl_click = 0 ; // reset if not ctrl
}
}
//|+--------------------------------------------------------------------------------+
//| - Function Update |
//|+--------------------------------------------------------------------------------+
void update()
{
//---
ObjectSetString ( 0 , lotedit, OBJPROP_TEXT , DoubleToString ( lot, 2 ) );
//---
return ;
}
{
ObjectCreate ( 0 , lotedit, OBJ_EDIT , 0 , 0 , 0 );
ObjectSetInteger ( 0 , lotedit, OBJPROP_XDISTANCE , 30 );
ObjectSetInteger ( 0 , lotedit, OBJPROP_YDISTANCE , 30 );
ObjectSetInteger ( 0 , lotedit, OBJPROP_XSIZE , 60 );
ObjectSetInteger ( 0 , lotedit, OBJPROP_YSIZE , 30 );
ObjectSetString ( 0 , lotedit, OBJPROP_TEXT , DoubleToString ( lot, 2 ));
ObjectCreate ( 0 , lotbtnplus, OBJ_BUTTON , 0 , 0 , 0 );
ObjectSetString ( 0 , lotbtnplus, OBJPROP_TEXT , "+" );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_XDISTANCE , 100 );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_YDISTANCE , 30 );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_XSIZE , 70 );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_YSIZE , 30 );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_BACK , false );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_SELECTABLE , false );
}
첫 번째 문제는 CHARTEVENT_CLICK 가 CHARTEVENT_OBJECT_CLICK 와 같지 않다는 것입니다. 차트를 클릭하는 것이 아니라 개체에 대한 클릭을 포착하려고 합니다.
const long &lparam,
const double &dparam,
const string &sparam)
{
// if( id == CHARTEVENT_CLICK )
if ( id == CHARTEVENT_OBJECT_CLICK )
const long &lparam,
const double &dparam,
const string &sparam)
{
static bool wasCTRL= false ;
if (id== CHARTEVENT_OBJECT_CLICK && sparam == lotbtnplus)
{
ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
lot+=(wasCTRL)?lotstep* 10 :lotstep;
update();
Print ( " | lot plus : " , lot );
return ;
}
wasCTRL=(id== CHARTEVENT_KEYDOWN && lparam== 17 );
}
도움이 될 수 있습니다. Ctrl 키를 누른 후 버튼을 얼마나 빨리 누르느냐에 따라 마우스를 두 번째 클릭할 때만 0.1로 이동한다는 것을 알 수 있습니다.
#Ctrl + 마우스 버튼 - 닫힘
와우, 그것처럼, 놀랍습니다. 감사합니다. 정직합니다!
@honest_knave 와 @Marco vd Heijden 에게 특별한 감사를 전합니다.
( MT4 플랫폼은 두 번 업데이트되었습니다. ) 업데이트 후 이 스프레드시트는 차트에서 업데이트되지 않습니다. 스프레드시트에 대한 모든 것을 확인했는데 문제가 보이지 않습니다.
스프레드시트 위의 입찰 및 매도 가격도 사용하고 있음을 알려야 합니다. 입찰 및 매도는 잘 작동하지만 스프레드시트는 그렇지 않습니다.
내 우려를 이해한다면 이 문제를 어떻게 해결할 수 있는지 알려주십시오.
미리 감사드립니다.
스프레드시트 에 대한 코드가 있습니까?
스프레드시트에 대한 코드가 있습니까?
2개의 다른 레이블 기능을 작성할 수 있습니까?
(예: 텍스트의 경우 1, 텍스트 및 글꼴 크기 의 경우 2 . )