나에게 잘 맞는 'Stop Loss Default' 값에 대해 아래 코드를 사용할 수 있습니다. 그러나 나는 이미 ' 체크 표시 ' 사용 ' 켜기 / 끄기 ' 를 위해 몇 시간을 보냈지만 불행히도 좋은 결과는 아닙니다. 그냥 ' Bitmap Label ' 개체가 있어서 따로 사용하면 잘 되지만 이렇게 사용하려고 하면 ON 이면 'Stop Loss'를 적용할 수 있고 OFF 이면 'Stop Loss'를 적용할 수 없습니다.
이 함수에 대한 코드를 작성하기 시작했을 때, 나는 단지 몇 분 안에 작성할 수 있다고 생각했습니다. 그러나 불행히도 이미 몇 시간이 걸렸습니다. 도와주세요. 제 삶의 시간이 걸리고 있습니다.
(내 걱정이 어리석은 것처럼 보였다면 나를 비난하지 마십시오. 단지 이유가 소진 된 것입니다)
아래 코드는 잘 작동하는 것처럼 보이고 이미 bool ' stoploss_use & takeprofit_use '를 시도 했지만 제대로 작동하지 않아 의심되는 코드 가 있으면 알려주세요. (필요한 경우 - 해당 테스트 EA의 코드를 모두 게시할 수 있습니다.)
const long & lparam ,
const double & dparam ,
const string & sparam
)
{
// Sell
if ( sparam == sellbutton )
{
ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
// stoploss
if ( stoploss_use == true )
{ sl = Bid + points_to_change( stoploss );}
// takeprofit
if ( takeprofit_use == true )
{ tp = Bid - points_to_change( takeprofit );}
if ( ! OrderSend ( Symbol (), OP_SELL , lot, Bid , slippage, sl, tp, NULL , magic, 0 , CLR_NONE ) )
Print ( " | OrderSend SELL: " , GetLastError () );
return ;
}
// Buy
if ( sparam == buybutton )
{
ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
// stoploss
if ( stoploss_use == true )
{ sl = Ask - points_to_change( stoploss ); }
// takeprofit
if ( takeprofit_use == true )
{ tp = Ask + points_to_change( takeprofit ); }
if ( ! OrderSend ( Symbol (), OP_BUY , lot, Ask , slippage, sl, tp, NULL , magic, 0 , CLR_NONE ) )
Print ( " | OrderSend SELL: " , GetLastError () );
return ;
}
}
따라서 위의 코드가 예 라고 말하면 잘 작동합니다. 그런 다음 코드 조합이 최적 인지 묻고 싶습니다. 그래서 저는 최적의 코드 조합 을 얻으려고 노력하고 있습니다. 즉, 코드가 완벽하게 작동해야 합니다.
저를 도와주시거나 좋은 조언을 부탁드립니다.
모두 제일 좋다.
실패하면 오류가 발생하고 설명서에서 오류 코드 를 찾을 수 있습니다.
때때로 주문 보내기가 미끄러지거나 인용 부호가 떨어져 실패하므로 항상 코딩 문제일 필요는 없습니다.
정류장을 시장 가격에 너무 가깝게 배치하면 코딩 문제가 됩니다.
또한 주문을 위해 별도의 함수를 작성하고 단순히 onchart 이벤트 내부에서 호출합니다.
그러나 결과는 동일해야 합니다.
또한 주문을 위해 별도의 함수를 작성하고 단순히 onchart 이벤트 내부에서 호출합니다.
아래 코드 조합이 좋은가요?
if ( sparam == sellbutton )
{
ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
ordersellfnc();
return ;
}
{
if ( stoploss_use == true ) { sl = Bid + points_to_change( stoploss ); }
if ( takeprofit_use == true ) { tp = Bid - points_to_change( takeprofit ); }
if ( ! OrderSend ( Symbol (), OP_SELL , lot, Ask , slippage, sl, tp, NULL , magic, 0 , clrRed ) )
Print ( " | OrderSend SELL: " , GetLastError () );
return ;
}
미리 감사드립니다.
Ordersend는 티켓 번호를 반환하거나 함수 가 실패하면 -1을 반환합니다.
#확인 표시 - 열기
나에게 잘 맞는 'Stop Loss Default' 값에 대해 아래 코드를 사용할 수 있습니다.
그러나 나는 이미 ' 체크 표시 ' 사용 ' 켜기 / 끄기 ' 를 위해 몇 시간을 보냈지만 불행히도 좋은 결과는 아닙니다. 그냥 ' Bitmap Label ' 개체가 있어서 따로 사용하면 잘 되지만 이렇게 사용하려고 하면 ON 이면 'Stop Loss'를 적용할 수 있고 OFF 이면 'Stop Loss'를 적용할 수 없습니다.
이 함수에 대한 코드를 작성하기 시작했을 때, 나는 단지 몇 분 안에 작성할 수 있다고 생각했습니다. 그러나 불행히도 이미 몇 시간이 걸렸습니다. 도와주세요. 제 삶의 시간이 걸리고 있습니다.
(내 걱정이 어리석은 것처럼 보였다면 나를 비난하지 마십시오. 단지 이유가 소진 된 것입니다)
{ ObjectSetInteger ( 0 , stoplossbmp, OBJPROP_STATE , false ); } else
{ ObjectSetInteger ( 0 , stoplossbmp, OBJPROP_STATE , true ); }
ObjectSetString ( 0 , stoplossedit, OBJPROP_TEXT , IntegerToString ( stoploss ) );
미리 감사드립니다.
비트맵 레이블은 버튼 개체와 약간 다르게 작동합니다.
두 개의 비트맵을 하나는 켜짐 상태용으로 사용하고 다른 하나는 꺼짐 상태용으로 사용합니다.
//--- description
#property description "Script creates \"Bitmap Label\" object."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName= "BmpLabel" ; // Label name
input string InpFileOn= "\\Images\\dollar.bmp" ; // File name for On mode
input string InpFileOff= "\\Images\\euro.bmp" ; // File name for Off mode
input bool InpState= false ; // Label pressed/released
input ENUM_BASE_CORNER InpCorner= CORNER_LEFT_UPPER ; // Chart corner for anchoring
input ENUM_ANCHOR_POINT InpAnchor= ANCHOR_CENTER ; // Anchor type
input color InpColor= clrRed ; // Border color when highlighted
input ENUM_LINE_STYLE InpStyle= STYLE_SOLID ; // Line style when highlighted
input int InpPointWidth= 1 ; // Point size to move
input bool InpBack= false ; // Background object
input bool InpSelection= false ; // Highlight to move
input bool InpHidden= true ; // Hidden in the object list
input long InpZOrder= 0 ; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Bitmap Label object |
//+------------------------------------------------------------------+
bool BitmapLabelCreate( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" , // label name
const int sub_window= 0 , // subwindow index
const int x= 0 , // X coordinate
const int y= 0 , // Y coordinate
const string file_on= "" , // image in On mode
const string file_off= "" , // image in Off mode
const int width= 0 , // visibility scope X coordinate
const int height= 0 , // visibility scope Y coordinate
const int x_offset= 10 , // visibility scope shift by X axis
const int y_offset= 10 , // visibility scope shift by Y axis
const bool state= false , // pressed/released
const ENUM_BASE_CORNER corner= CORNER_LEFT_UPPER , // chart corner for anchoring
const ENUM_ANCHOR_POINT anchor= ANCHOR_LEFT_UPPER , // anchor type
const color clr= clrRed , // border color when highlighted
const ENUM_LINE_STYLE style= STYLE_SOLID , // line style when highlighted
const int point_width= 1 , // move point size
const bool back= false , // in the background
const bool selection= false , // highlight to move
const bool hidden= true , // hidden in the object list
const long z_order= 0 ) // priority for mouse click
{
//--- reset the error value
ResetLastError ();
//--- create a bitmap label
if (! ObjectCreate (chart_ID,name, OBJ_BITMAP_LABEL ,sub_window, 0 , 0 ))
{
Print ( __FUNCTION__ ,
": failed to create \"Bitmap Label\" object! Error code = " , GetLastError ());
return ( false );
}
//--- set the images for On and Off modes
if (! ObjectSetString (chart_ID,name, OBJPROP_BMPFILE , 0 ,file_on))
{
Print ( __FUNCTION__ ,
": failed to load the image for On mode! Error code = " , GetLastError ());
return ( false );
}
if (! ObjectSetString (chart_ID,name, OBJPROP_BMPFILE , 1 ,file_off))
{
Print ( __FUNCTION__ ,
": failed to load the image for Off mode! Error code = " , GetLastError ());
return ( false );
}
//--- set label coordinates
ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x);
ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y);
//--- set visibility scope for the image; if width or height values
//--- exceed the width and height (respectively) of a source image,
//--- it is not drawn; in the opposite case,
//--- only the part corresponding to these values is drawn
ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width);
ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height);
//--- set the part of an image that is to be displayed in the visibility scope
//--- the default part is the upper left area of an image; the values allow
//--- performing a shift from this area displaying another part of the image
ObjectSetInteger (chart_ID,name, OBJPROP_XOFFSET ,x_offset);
ObjectSetInteger (chart_ID,name, OBJPROP_YOFFSET ,y_offset);
//--- define the label's status (pressed or released)
ObjectSetInteger (chart_ID,name, OBJPROP_STATE ,state);
//--- set the chart's corner, relative to which point coordinates are defined
ObjectSetInteger (chart_ID,name, OBJPROP_CORNER ,corner);
//--- set anchor type
ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);
//--- set the border color when object highlighting mode is enabled
ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- set the border line style when object highlighting mode is enabled
ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- set a size of the anchor point for moving an object
ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,point_width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- enable (true) or disable (false) the mode of moving the label by mouse
ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- successful execution
return ( true );
}
//+------------------------------------------------------------------+
//| Set a new image for Bitmap label object |
//+------------------------------------------------------------------+
bool BitmapLabelSetImage( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" , // label name
const int on_off= 0 , // modifier (On or Off)
const string file= "" ) // path to the file
{
//--- reset the error value
ResetLastError ();
//--- set the path to the image file
if (! ObjectSetString (chart_ID,name, OBJPROP_BMPFILE ,on_off,file))
{
Print ( __FUNCTION__ ,
": failed to load the image! Error code = " , GetLastError ());
return ( false );
}
//--- successful execution
return ( true );
}
//+------------------------------------------------------------------+
//| Move Bitmap Label object |
//+------------------------------------------------------------------+
bool BitmapLabelMove( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" , // label name
const int x= 0 , // X coordinate
const int y= 0 ) // Y coordinate
{
//--- reset the error value
ResetLastError ();
//--- move the object
if (! ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x))
{
Print ( __FUNCTION__ ,
": failed to move X coordinate of the object! Error code = " , GetLastError ());
return ( false );
}
if (! ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y))
{
Print ( __FUNCTION__ ,
": failed to move Y coordinate of the object! Error code = " , GetLastError ());
return ( false );
}
//--- successful execution
return ( true );
}
//+------------------------------------------------------------------+
//| Change visibility scope (object) size |
//+------------------------------------------------------------------+
bool BitmapLabelChangeSize( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" , // label name
const int width= 0 , // label width
const int height= 0 ) // label height
{
//--- reset the error value
ResetLastError ();
//--- change the object size
if (! ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width))
{
Print ( __FUNCTION__ ,
": failed to change the object width! Error code = " , GetLastError ());
return ( false );
}
if (! ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height))
{
Print ( __FUNCTION__ ,
": failed to change the object height! Error code = " , GetLastError ());
return ( false );
}
//--- successful execution
return ( true );
}
//+--------------------------------------------------------------------+
//| Change coordinate of the upper left corner of the visibility scope |
//+--------------------------------------------------------------------+
bool BitmapLabelMoveVisibleArea( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" , // label name
const int x_offset= 0 , // visibility scope X coordinate
const int y_offset= 0 ) // visibility scope Y coordinate
{
//--- reset the error value
ResetLastError ();
//--- change the object's visibility scope coordinates
if (! ObjectSetInteger (chart_ID,name, OBJPROP_XOFFSET ,x_offset))
{
Print ( __FUNCTION__ ,
": failed to change X coordinate of the visibility scope! Error code = " , GetLastError ());
return ( false );
}
if (! ObjectSetInteger (chart_ID,name, OBJPROP_YOFFSET ,y_offset))
{
Print ( __FUNCTION__ ,
": failed to change Y coordinate of the visibility scope! Error code = " , GetLastError ());
return ( false );
}
//--- successful execution
return ( true );
}
//+------------------------------------------------------------------+
//| Delete "Bitmap label" object |
//+------------------------------------------------------------------+
bool BitmapLabelDelete( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" ) // label name
{
//--- reset the error value
ResetLastError ();
//--- delete the label
if (! ObjectDelete (chart_ID,name))
{
Print ( __FUNCTION__ ,
": failed to delete \"Bitmap label\" object! Error code = " , GetLastError ());
return ( false );
}
//--- successful execution
return ( true );
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart ()
{
//--- chart window size
long x_distance;
long y_distance;
//--- set window size
if (! ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS , 0 ,x_distance))
{
Print ( "Failed to get the chart width! Error code = " , GetLastError ());
return ;
}
if (! ChartGetInteger ( 0 , CHART_HEIGHT_IN_PIXELS , 0 ,y_distance))
{
Print ( "Failed to get the chart height! Error code = " , GetLastError ());
return ;
}
//--- define bitmap label coordinates
int x=( int )x_distance/ 2 ;
int y=( int )y_distance/ 2 ;
//--- set label size and visibility scope coordinates
int width= 32 ;
int height= 32 ;
int x_offset= 0 ;
int y_offset= 0 ;
//--- place bitmap label at the center of the window
if (!BitmapLabelCreate( 0 ,InpName, 0 ,x,y,InpFileOn,InpFileOff,width,height,x_offset,y_offset,InpState,
InpCorner,InpAnchor,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return ;
}
//--- redraw the chart and wait one second
ChartRedraw ();
Sleep ( 1000 );
//--- change label's visibility scope size in the loop
for ( int i= 0 ;i< 6 ;i++)
{
//--- change visibility scope size
width--;
height--;
if (!BitmapLabelChangeSize( 0 ,InpName,width,height))
return ;
//--- check if the script's operation has been forcefully disabled
if ( IsStopped ())
return ;
//--- redraw the chart
ChartRedraw ();
// 0.3 seconds of delay
Sleep ( 300 );
}
//--- 1 second of delay
Sleep ( 1000 );
//--- change label's visibility scope coordinates in the loop
for ( int i= 0 ;i< 2 ;i++)
{
//--- change visibility scope coordinates
x_offset++;
y_offset++;
if (!BitmapLabelMoveVisibleArea( 0 ,InpName,x_offset,y_offset))
return ;
//--- check if the script's operation has been forcefully disabled
if ( IsStopped ())
return ;
//--- redraw the chart
ChartRedraw ();
// 0.3 seconds of delay
Sleep ( 300 );
}
//--- 1 second of delay
Sleep ( 1000 );
//--- delete the label
BitmapLabelDelete( 0 ,InpName);
ChartRedraw ();
//--- 1 second of delay
Sleep ( 1000 );
//---
}
예를 들어 동일한 bmp의 컬러 버전과 그레이스케일 버전을 사용하여 켜짐 및 꺼짐 상태를 표시할 수 있습니다.
참조:
https://docs.mql4.com/constants/objectconstants/enum_object/obj_bitmap_label
두 개의 이미지를 사용한 경우 상태를 설정하는 위치에 코드를 더 게시하세요. 클릭할 수 있게 하시겠습니까? 목표는 무엇입니까?아 왜 최근 댓글만 이해가 안가는지 모르겠는데 그게 문제인가요? 그렇다면 어떻게 해결할 수 있습니까?
나는 OrderSend() 함수 가 부울이 아닌 정수를 반환한다는 점을 지적하고 싶었습니다.
티켓 번호 또는 함수가 실패하는 경우 -1은 true 또는 false와 매우 다릅니다.
Marco vd Heijden :
두 개의 이미지를 사용한 경우 상태를 설정하는 위치에 코드를 더 게시하세요. 클릭할 수 있게 하시겠습니까? 목표는 무엇입니까?우선 좋은 의견 감사합니다. 감사합니다. 내 관심사가 설명되지 않았을 수도 있지만 하나 더 쓰려고 노력할 것입니다.
그래서 저는 항상 'test.mq4'에 코드를 작성하려고 합니다. 그리고 이미 내가 원하는 이미지 2개를 사용하고 있습니다. 그리고 다음과 같은 기능을 가져오고 싶습니다.
- State = true(이미지에 ' On '이 표시됨) - 이 함수에 대한 코드를 작성하려는 경우 - 'Stop Loss'가 내 주문에 적용될 수 있습니다.
- State = false(이미지에 ' Off '가 표시됨) - 이 함수에 대한 코드를 작성하고 싶은 경우 - 'Stop Loss'를 내 주문에 적용할 수 없습니다.
다른 기능에 이미 ' Bitmap Label Object'를 사용하고 있어도 이 기능을 수행할 수 없으며 다른 기능은 내가 원하는 기능이 완벽하게 작동합니다. 도와주세요.당신에게 최선을 다합니다.
(내가 .zip 파일을 만들었으므로 내 테스트 .mq4 파일과 2x .bmp 파일 형식을 찾을 수 있습니다. 내 문제를 이해하는 데 도움이 되길 바랍니다.)