State = false ( image shows 'Off ') - and I just want to write code for this function - 'Stop Loss' could not apply to my orders.もし、State = false ( image shows 'Off ') - and I just want to write code for this function - 'Stop Loss' could not apply to my orders.
下のコードはうまくいっているように見えますが、すでにブール '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;
}
}
それで、もしあなたが上記のコードがうまく機能すると 言うなら、私は上記のコードがうまく機能するかどうかを尋ねる必要があります。それから、上記のコードの組み合わせは最適なのか?だから、私は最適なコードの組み合わせを 取得しようとしている、そのコードは完璧に動作する必要がありますです。
どうか、私を助けてください、または良いアドバイスをお願いします。
よろしくお願いします。
失敗するとエラーが表示され、ドキュメントでエラーコードを 調べることができます。
スリッページやオフクオートでordersendが失敗することもあるので、必ずしもコーディングの問題である必要はありません。
ストップが市場価格に近すぎる場合は、コーディングの問題になります。
また、私はorderに別の関数を書き、オンチャートイベントの中でそれらを呼び出すだけです。
しかし、結果は同じであるべきです。
また、注文するための関数を別に書き、オンチャートイベントの中でそれらを呼び出すだけでよいでしょう。
以下のコードの組み合わせで良いでしょうか?
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 を返します。
#チェックマーク - 開く
ストップロスのデフォルト値については、以下のコードを使用することができ、それは私にとっては良いことです。
しかし、私はすでに'チェックマーク'使用'オン/オフ'に数時間を費やしたが、残念ながら良い結果は得られなかった。ただ、'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 ) );
ありがとうございます。
ビットマップラベルの動作は、ボタンオブジェクトとは少し異なります。
オン状態用とオフ状態用の2つのビットマップを使用します。
//--- 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
2つの画像を使用した場合は、状態を設定しているコードをさらに投稿してください。クリック可能にしますか?目標は何ですか?ああ、私はあなたの最新のコメントを理解することができない理由がわからない、それは問題ですか?もしそうなら、どのように私はそれを解決することができますか?
OrderSend()関数は BooleanではなくIntegerを返すことを指摘したかっただけです。
関数が失敗した場合のチケット番号または-1は、真または偽とは非常に異なっています。
Marco vd Heijden:
もし、2つの画像を使用したのであれば、あなたのコードをもっと掲載してください。まず最初に、素晴らしいコメントありがとうございます。もしかしたら、私の懸念が説明されていなかったかもしれませんが、もう1つ書いてみますね。
だから、私はいつも自分のアイデアのために'test.mq4'にコードを書くようにしています。そして、その中ですでに2つの画像を使っているのですが、どちらを使うか。そして、以下のような機能を持たせたいと考えています。
- State = true ( image shows 'On ') - そして私はこの関数のコードを書きたいだけです - 'Stop Loss' は私の注文に適用できます。
- State = false ( image shows 'Off ') - and I just want to write code for this function - 'Stop Loss' could not apply to my orders.もし、State = false ( image shows 'Off ') - and I just want to write code for this function - 'Stop Loss' could not apply to my orders.
他の機能では、すでに'Bitmap Label Object'を使っていますし、他の機能も私が欲しいものは完全に動作します。だから、私を助けてください。よろしくお願いします。
( zipファイルを作りましたので、私のテスト用.mq4ファイルと2x .bmpファイル形式があります - 私の懸念を理解するのに役立つと思います)