//---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //----
//---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ string sy="NULL"; int op=-1; int mn=-1; bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) { datetime t; double ocp, osl; int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderCloseTime()) { t=OrderCloseTime(); j=i; } } } } } } } if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { dg=MarketInfo(sy, MODE_DIGITS); if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2; ocp=NormalizeDouble(OrderClosePrice(), dg); osl=NormalizeDouble(OrderStopLoss(), dg); if (ocp==osl) return(True); } return(False); } int start() { //---- bool stopl; stopl = isCloseLastPosByStop(sy,op,mn); if (stopl == true) Alert ("последняя сделка закрылась по s/l"); //---- return(0); }
아날로그를 보십시오. 특히 Equity_simple.mq4
고맙습니다! 표시기 자체는 별도의 창에서 작동합니다...
그리고 #property...를 표준 Expert Advisor에 삽입했지만 저널에는 - 2011.03.09 18:04:58 Expert 'MACD 샘플'은 지표이며 실행할 수 없습니다.
거래 내역을 읽고 다음 포지션이 청산된 시점의 잔고를 계산해야 합니다.
주식은 조금 더 복잡하지만 똑같이 할 수 있습니다.
모든 계산은 표준 로트로 축소하거나 포인트로 계산할 수 있습니다.
여기에서 아무것도 읽거나 셀 수 없도록 표시기가 모든 것을 표시하도록 합니다.
그럼 실행해 보는 건 어떨까요?
-------------------------------------------------- -------------------------------------------------- ----------------
나는 3-4시간 동안 그 과정에서 빠져 나온다.
손절매 종료 후 메시지를 표시하고 싶지만 mt4에서는 아무 일도 일어나지 않습니다.
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
string sy="NULL";
int op=-1;
int mn=-1;
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, osl;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
osl=NormalizeDouble(OrderStopLoss(), dg);
if (ocp==osl) return(True);
}
return(False);
}
int start()
{
//----
bool stopl;
stopl = isCloseLastPosByStop(sy,op,mn);
if (stopl == true)
Alert ("последняя сделка закрылась по s/l");
//----
return(0);
}
여기에서 아무것도 읽거나 셀 수 없도록 표시기가 모든 것을 표시하도록 합니다.
그럼 실행해 보는 건 어떨까요?
-------------------------------------------------- -------------------------------------------------- ----------------
나는 3-4시간 동안 그 과정에서 빠져 나온다.
유사한 지표가 이미 존재합니다.
조언은 이미 이전 페이지에서 제공되었습니다.
여기에서 아무것도 읽거나 셀 수 없도록 표시기가 모든 것을 표시하도록 합니다.
다음은 단순화된 형식의 코드입니다.
유사한 지표가 이미 존재합니다.
만난 적이 없습니다. 당신이 볼 수 있습니까?
만난 적이 없습니다. 당신이 볼 수 있습니까?
여기를보십시오 https://www.mql5.com/ru/forum/103774
어드바이저가 특정 시간에 매수 또는 매도하도록 하는 방법( sleep 을 사용하지 않음)?