귀하의 좋은 의견을 이해하고 주문, 손절매 및 이익실현 기능에 대한 몇 가지 좋은 코드를 작성하려고 노력 중입니다. 감사합니다.
그래서 저는 이미 아래 코드와 같은 것을 시도했고 10핍에 대해 EURUSD와 FB 손절매 값 이 모두맞는지 확인해야 합니다 . (내가 생각하는 바를 알고 싶다면 - 그냥 로그/결과 아래에 예라고 생각합니다. 둘 다 10핍에 대한 올바른 값입니다. ) 예:손절매 값 = 10; 포지션 - 매수 통나무:EURUSD | 가격(요청): 1.05 6 33 / 손절매: 1.05 5 33 통나무:FB | 가격(요청): 119. 6 9 / 손절매: 119. 5 9
( void OnChartevent() 에 의해 아래 함수를 호출합니다)
// this part of code from OnChartEvent() //--- if ( sparam == _buy_name_btn ) { ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false ); _Buy_calc_SL_TP();
나는 Mr. William 의 코멘트를 EA의 코드 책임자에게 포함시키려고 노력할 것입니다. - 다시 한 번 William에게 감사드립니다. 그레이트 핍의 계산 MQL4 (이 코드 산업이 저에게 매우 광범위하게 보이기 때문에 저를 비난하지 마십시오. 그리고 때때로 저는 제 정신을 잃습니다. 어쨌든 저는 제 Trade Panel EA의 코드를 곧 완성할 수 있기를 바랍니다)
그리고 테스트를 마친 후 테스트 EA의 코드를 공유하겠습니다. 코드가 좋은지/맞는지 아니면 무엇입니까? (저는 전문 코더/프로그래머가 아니기 때문에 작업 중입니다-)
좋아, 충분히 공평해. 눈이 아파서 당신의 글을 읽을 수 없습니다. 다른 사람들도 그렇게 느끼면 내가 아니라 당신이 그리운 것입니다.
나는 당신의 이 이름을 몰랐습니다. 나는 당신이 @Gumrai를 좋아한다는 것을 알고 있습니다. 그래서 죄송합니다. 당신의 댓글에 대해 조금 화를 냈어요. 그래서 당신은 내 코드 지식이 0 이하일 때 이 코멘트 를 도와주었습니다. 내 모든 의견을 무시하는 데 문제가 없습니다. 도움이 필요하거나 다른 것이 필요합니다. 하지만 당신에게 화난 대답을 해서 미안할 뿐입니다.
시장이 닫혀 있고 다른 것은 잘 모르겠습니다 . 하지만 아래 코드와 같은 것을 시도했는데 뭔가 놓친 것 같지만 찾을 수 없습니다. (제 Trade Panel EA에는 Open Buy 및 Open Sell 위치에 대한 코드가 있지만 이 EA가 어떻게 작동하는지 확신하기 위해 직접 작성하려고 합니다.)
도움과 조언에 미리 감사드립니다.
#define CHANGE double///< Difference of two prices. #define POINT int///< `CHANGE / _Point`. #define PIP double///< `POINT / PipsPerPOINT`. CHANGE points_to_change(POINT n){ return n * _Point ;} POINT change_to_points(CHANGE c){ return POINT(c / _Point + 0.5 ) ;} CHANGE pips_to_change (PIP n){ return points_to_change(pips_to_points(n));} PIP change_to_pips (CHANGE c){ return points_to_pips(change_to_points(c));} POINT pips_to_points (PIP n){ if ( ( _Digits & 1 ) == 1 ) n *= 10.0 ; return POINT(n);} PIP points_to_pips (POINT n){ PIP p = n; if ( ( _Digits & 1 ) == 1 ) p /= 10.0 ; return p;}
좋아 그래서 당신이 사용하는 경우
double stop;
stop=stoploss* Point ();
Print ( DoubleToString (stoploss));
Point() 함수를 사용하면 손절매의 가치를 얻을 수 있으며 각 Bid 및 Ask에서 추가하거나 빼서 중지 가격 수준을 알려야 합니다.
이익을 취하는 경우에도 동일하지만 물론 그 반대입니다.
코드 기반에서 일부 EA를 확인할 수 있습니다. 코더가 EA에서 이러한 작업을 수행하는 방법에 대한 많은 예와 변형이 있습니다.
예를 들어 다음은 Trailing Master https://www.mql5.com/en/code/16136 입니다.
// 1. Main function
//-------------------------------------------------------------------------
void OnTick ( void )
{
Comment ( "Copyright © 2016, Il Anokhin\n" + TimeToStr ( TimeCurrent (), TIME_DATE | TIME_SECONDS ));
//--- 1.1. Define pip -----------------------------------------------------
if ( Digits == 4 || Digits <= 2 ) pip= Point ;
if ( Digits == 5 || Digits == 3 ) pip= Point * 10 ;
//--- 1.2. Trailing -------------------------------------------------------
for (i= 0 ;i< OrdersTotal ();i++)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== true )
{
if ( OrderSymbol ()== Symbol () && TS> 0 && OrderProfit ()> 0 )
{
if (UC== true && OrderComment ()==Comm && UM== true && OrderMagicNumber ()==Magic && OrderType ()== OP_BUY && OrderOpenPrice ()+TS*pip<= Bid && OrderStopLoss ()< Bid -TS*pip) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TS*pip, OrderTakeProfit (), 0 );
if (UC== true && OrderComment ()==Comm && UM== true && OrderMagicNumber ()==Magic && OrderType ()== OP_SELL && OrderOpenPrice ()-TS*pip>= Ask && ( OrderStopLoss ()> Ask +TS*pip || OrderStopLoss ()== 0 )) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Ask +TS*pip, OrderTakeProfit (), 0 );
if (UC== true && OrderComment ()==Comm && UM== false && OrderType ()== OP_BUY && OrderOpenPrice ()+TS*pip<= Bid && OrderStopLoss ()< Bid -TS*pip) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TS*pip, OrderTakeProfit (), 0 );
if (UC== true && OrderComment ()==Comm && UM== false && OrderType ()== OP_SELL && OrderOpenPrice ()-TS*pip>= Ask && ( OrderStopLoss ()> Ask +TS*pip || OrderStopLoss ()== 0 )) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Ask +TS*pip, OrderTakeProfit (), 0 );
if (UC== false && UM== true && OrderMagicNumber ()==Magic && OrderType ()== OP_BUY && OrderOpenPrice ()+TS*pip<= Bid && OrderStopLoss ()< Bid -TS*pip) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TS*pip, OrderTakeProfit (), 0 );
if (UC== false && UM== true && OrderMagicNumber ()==Magic && OrderType ()== OP_SELL && OrderOpenPrice ()-TS*pip>= Ask && ( OrderStopLoss ()> Ask +TS*pip || OrderStopLoss ()== 0 )) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Ask +TS*pip, OrderTakeProfit (), 0 );
if (UC== false && UM== false && OrderType ()== OP_BUY && OrderOpenPrice ()+TS*pip<= Bid && OrderStopLoss ()< Bid -TS*pip) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TS*pip, OrderTakeProfit (), 0 );
if (UC== false && UM== false && OrderType ()== OP_SELL && OrderOpenPrice ()-TS*pip>= Ask && ( OrderStopLoss ()> Ask +TS*pip || OrderStopLoss ()== 0 )) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Ask +TS*pip, OrderTakeProfit (), 0 );
}
}
}
//--- 1.3. End of main function -------------------------------------------
코더 Il Anokhin 주먹을 볼 수 있는 곳에서 pip를 정의합니다.
그러나 여기에 Дима https://www.mql5.com/en/code/8674 의 E-smart 후행이라는 또 다른 예가 있습니다.
//+------------------------------------------------------------------+
void ModifyStopLossInPoint( int stoploss)
{
bool result;
double sl = 0 ;
double point = MarketInfo ( OrderSymbol (), MODE_POINT );
if ( OrderType () == OP_BUY ) sl = OrderOpenPrice () + stoploss * point;
if ( OrderType () == OP_SELL ) sl = OrderOpenPrice () - stoploss * point;
result = OrderModify ( OrderTicket (), OrderOpenPrice (),sl, OrderTakeProfit (), 0 ,CLR_NONE);
if (result && UseSound) PlaySound (var_132);
}
//+------------------------------------------------------------------+
일을 하는 것의 미묘한 차이에 주목하십시오.
나는 가장 잘 맞는 것을 찾을 때까지 항상 다양한 시도를 한다.
좋아, 그래서 당신이 사용한다면 ...
Omg, 읽고 무언가를 시도하기 전에 모든 것에 대한 놀라운 감사를 빠르게 확인하십시오 . 나는 곧 그것을 시도합니다.
한 번 더 큰 감사 @Marco vd Heijden
개체는 서로의 맨 위에 쌓이기 때문에 차트 이벤트()가 어떤 버튼을 클릭했는지 또는 겹칠 수 있는 다른 개체보다 우선 순위가 가장 높은 개체를 알려주는 것이 중요합니다.
대단히 감사 합니다. 귀하의 의견 이 더 명확 하고 유용합니다 .
당신에게 최선을 다합니다.
좋아 그래서 당신이 사용하는 경우
나는 가장 잘 맞는 것을 찾을 때까지 항상 다양한 시도를 한다.
귀하의 좋은 의견을 이해하고 주문, 손절매 및 이익실현 기능에 대한 몇 가지 좋은 코드를 작성하려고 노력 중입니다. 감사합니다.
그래서 저는 이미 아래 코드와 같은 것을 시도했고 10핍에 대해 EURUSD와 FB 손절매 값 이 모두 맞는지 확인해야 합니다 . (내가 생각하는 바를 알고 싶다면 - 그냥 로그/결과 아래에 예라고 생각합니다. 둘 다 10핍에 대한 올바른 값입니다. )
예: 손절매 값 = 10; 포지션 - 매수
통나무: EURUSD | 가격(요청): 1.05 6 33 / 손절매: 1.05 5 33
통나무: FB | 가격(요청): 119. 6 9 / 손절매: 119. 5 9
( void OnChartevent() 에 의해 아래 함수를 호출합니다)
//---
if ( sparam == _buy_name_btn )
{
ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
_Buy_calc_SL_TP();
Print ( " | Click Verify / " );
}
//---
return ;
{
//---
if ( _StopLoss_ON == true )
{
//_Sl = OrderOpenPrice() - _StopLoss * _Pip;
_Sl = Ask - _StopLoss * _Pip;
Print ( " | Buy Calc SL TP Function / StopLoss: " , _Sl );
}
//---
return ;
}
작동하는 것 같습니다.
나는 Mr. William 의 코멘트를 EA의 코드 책임자에게 포함시키려고 노력할 것입니다. - 다시 한 번 William에게 감사드립니다. 그레이트 핍의 계산 MQL4
(이 코드 산업이 저에게 매우 광범위하게 보이기 때문에 저를 비난하지 마십시오. 그리고 때때로 저는 제 정신을 잃습니다. 어쨌든 저는 제 Trade Panel EA의 코드를 곧 완성할 수 있기를 바랍니다)
그리고 테스트를 마친 후 테스트 EA의 코드를 공유하겠습니다. 코드가 좋은지/맞는지 아니면 무엇입니까? (저는 전문 코더/프로그래머가 아니기 때문에 작업 중입니다-)
Keith Watford :
좋아, 충분히 공평해. 눈이 아파서 당신의 글을 읽을 수 없습니다.
다른 사람들도 그렇게 느끼면 내가 아니라 당신이 그리운 것입니다.
시장이 닫혀 있고 다른 것은 잘 모르겠습니다 . 하지만 아래 코드와 같은 것을 시도했는데 뭔가 놓친 것 같지만 찾을 수 없습니다.
(제 Trade Panel EA에는 Open Buy 및 Open Sell 위치에 대한 코드가 있지만 이 EA가 어떻게 작동하는지 확신하기 위해 직접 작성하려고 합니다.)
도움과 조언에 미리 감사드립니다.
#define POINT int ///< `CHANGE / _Point`.
#define PIP double ///< `POINT / PipsPerPOINT`.
CHANGE points_to_change(POINT n){ return n * _Point ;}
POINT change_to_points(CHANGE c){ return POINT(c / _Point + 0.5 ) ;}
CHANGE pips_to_change (PIP n){ return points_to_change(pips_to_points(n));}
PIP change_to_pips (CHANGE c){ return points_to_pips(change_to_points(c));}
POINT pips_to_points (PIP n){ if ( ( _Digits & 1 ) == 1 ) n *= 10.0 ; return POINT(n);}
PIP points_to_pips (POINT n){ PIP p = n; if ( ( _Digits & 1 ) == 1 ) p /= 10.0 ; return p;}
string prfx = "test" ;
string sellbutton = prfx + "sell" ;
string sounduse = "tick.wav" ;
int stoploss = 10 ;
int takeprofit = 10 ;
int magic = 12345 ;
int ticket = 0 ;
int slippage = 3 ;
double lot = 0.01 ;
double sl ;
bool stoploss_on = true ;
bool result ;
bool sound_use = true ;
//---
//---
int OnInit ()
{
ObjectCreate ( 0 , sellbutton, OBJ_BUTTON , 0 , 0 , 0 );
ObjectSetString ( 0 , sellbutton, OBJPROP_TEXT , "Sell" );
ObjectSetInteger ( 0 , sellbutton, OBJPROP_XDISTANCE , 20 );
ObjectSetInteger ( 0 , sellbutton, OBJPROP_YDISTANCE , 20 );
ObjectSetInteger ( 0 , sellbutton, OBJPROP_XSIZE , 80 );
ObjectSetInteger ( 0 , sellbutton, OBJPROP_YSIZE , 40 );
ObjectSetInteger ( 0 , sellbutton, OBJPROP_CORNER , CORNER_LEFT_UPPER );
ObjectSetInteger ( 0 , sellbutton, OBJPROP_COLOR , clrWhite );
ObjectSetInteger ( 0 , sellbutton, OBJPROP_BGCOLOR , clrMaroon );
ObjectSetInteger ( 0 , sellbutton, OBJPROP_STATE , false );
ObjectSetInteger ( 0 , sellbutton, OBJPROP_ZORDER , 1 );
Print ( "ObjectsTotal: " , ObjectsTotal () );
return ( 0 );
}
//---
//---
void OnTick ()
{
//---
//---
return ;
}
//---
//---
void OnDeinit ( const int reason)
{
//---
ObjectsDeleteAll ( 0 , prfx );
//---
return ;
}
//---
//---
void OnChartEvent ( const int id ,
const long & lparam ,
const double & dparam ,
const string & sparam
)
{
// Sell
if ( sparam == sellbutton )
{
ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
ticket = Orderfuntions( sellbutton );
}
return ;
}
//---
//---
void SellCalcSLTP()
{
//---
if ( stoploss_on == true )
{
if ( OrderType () == OP_SELL ) sl = OrderOpenPrice () - pips_to_change( stoploss );
if ( OrderType () == OP_BUY ) sl = OrderOpenPrice () + pips_to_change( stoploss );
result = OrderModify ( OrderTicket (), OrderOpenPrice (), sl, OrderTakeProfit (), 0 , CLR_NONE );
if ( result && sound_use ) PlaySound ( sounduse );
}
//---
return ;
}
//---
//---
int Orderfuntions( string _Order_selector )
{
// Sell Order
SellCalcSLTP();
if ( _Order_selector == sellbutton )
{
ticket = OrderSend ( _Symbol , OP_SELL , lot, Bid , slippage, sl, takeprofit, "comment" , magic, 0 , clrMaroon );
}
return (ticket);
}
괜찮아 보이지만 ordermodify를 사용할 수 없습니다. 먼저 OrderSelect() 함수 로 주문을 선택해야 합니다.