초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 143

 
Лауреат :
마법 으로 열린 포지션 을 닫는 함수를 만드는 방법. 시간 기록에서 지정된 수의 양초가 지난 후.
 int numBars = 5 ;
void OnTick ()
{
     for ( int i = OrdersTotal (); i >= 0 ; i--)
     {
           if (! OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) continue ;
           if ( OrderSymbol () != _Symbol )                 continue ;
           if ( OrderMagicNumber () != Magic)             continue ;
           if ( OrderOpenTime () > Time [numBars- 1 ] )      continue ; 
          
           /* work */
     }
}
 
sviter-pro :
자, 실험 중입니다!!! 구체적인 논리! 돕다?

거기에 무엇이 특별한가요?

마지막 위치를 보고 반대쪽을 엽니다.

 
Konstantin Nikitin :

잘 확인하십시오

 
sviter-pro :

확인 확인

 

안녕하세요. 이 기능을 도와주세요. 하나의 계정은 여러 고문과 거래하는 것을 의미합니다. 각 Expert Advisor는 하루에 한 번 이상 거래를 열 수 없습니다. true 를 반환하는 함수가 필요합니다. 이미 고문과 거래가 있었고 거짓 인 경우 거래가 없었다면. 내가 이해하는 한 현재 날짜에 대한 확인은 마법 으로 수행되어야 합니다. 도움이 된다면 이러한 점검이 필요한 각 Expert Advisors에 이 기능을 구축할 계획입니다. 고맙습니다.

 
Kolya32 :

안녕하세요. 이 기능을 도와주세요. 하나의 계정은 여러 고문과 거래하는 것을 의미합니다. 각 Expert Advisor는 하루에 한 번 이상 거래를 열 수 없습니다. true 를 반환하는 함수가 필요합니다. 이미 고문과 거래가 있었고 거짓 인 경우 거래가 없었다면. 내가 이해하는 한 현재 날짜에 대한 확인은 마법 으로 수행되어야 합니다. 도움이 된다면 이러한 점검이 필요한 각 Expert Advisors에 이 기능을 구축할 계획입니다. 고맙습니다.

모든 것이 이미 우리 앞에서 이루어졌습니다)) 여기를 보십시오 .

 

isTradeToDay() 함수가 필요한 것 같습니다. 음, 실험해보겠습니다) 감사합니다.

int mn=-1을 주석 처리한 다음 코드에서 mn을 Magic으로 교체하여 함수를 약간 수정했습니다. 테스터에서 이 기능으로 어드바이저를 실행한 결과, 나 자신에게 큰 결점이 있음을 발견했습니다 . 어드바이저를 테스트하는 시간이 몇 배나 늘어났습니다!!! 이제 데모 계정에서 이 기능으로 Expert Advisors를 테스트했습니다. 계정에 5명의 고문이 있습니다. 거래가 지연되어 열릴까 걱정됩니다. 가장 중요한 것은 약간의...

부울 isTradeToDay(문자열 sy="", int op=-1 /*,int mn=-1*/) {
정수 i, k=OrdersHistoryTotal();

if (sy=="0") sy=Symbol();
(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 (Magic<0 || OrderMagicNumber()==Magic) {
if (TimeDay(OrderOpenTime())==Day()
&& TimeMonth(OrderOpenTime())==월()
&& TimeYear(OrderOpenTime())==Year()) return(True);
}
}
}
}
}
}
k=주문 총계();
(i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (Magic<0 || OrderMagicNumber()==Magic) {
if (TimeDay(OrderOpenTime())==Day()
&& TimeMonth(OrderOpenTime())==월()
&& TimeYear(OrderOpenTime())==Year()) return(True);
}
}
}
}
}
}
반환(거짓);
}

 

차트에 그리드의 손익분기점을 표시해야 합니다.

포인트 수익:

double current_Prof_Pts = current_Prof_Bux/current_summ_lot/( SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_VALUE )/( SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_SIZE )/ _Point )

BUY 그리드의 손익분기점

 zero = Bid -current_Prof_Pts* _Point

(SELL 각각: Ask+ current_Prof_Pts* _Point )

결과: true와 유사하지만 항상 true 값을 중심으로 약 3포인트 이동합니다.

오류가 어디에 있습니까?

 
Kolya32 :

isTradeToDay() 함수가 필요한 것 같습니다. 음, 실험해보겠습니다) 감사합니다.

나 자신에게 큰 단점을 발견했습니다 . 어드바이저를 테스트하는 시간이 몇 배 증가했습니다!!!

물론이죠. 함수는 보편적으로 작성됩니다. 각 틱에서 이를 참조하면 주기가 계정의 전체 기록을 통해 진행된다는 것을 알 수 있습니다. 그리고 계정 내역이 상당히 깊을 수 있습니다(주문이 100,000건 이상인 경우를 만났습니다). 실행 속도를 높이기 위해 매번 전체 기록에 대해 루프를 실행할 필요가 없습니다. 처음에 한 번만 수행하고 마지막으로 처리된 주문의 인덱스를 기억하는 것으로 충분합니다. 다음에 저장된 인덱스보다 큰 인덱스가 있는 주문만 반복해야 합니다. 그런 다음 마지막 주문의 색인을 다시 기억하십시오.

 
Igor Zakharov :

차트에 그리드의 손익분기점을 표시해야 합니다.

포인트로 이익:

BUY 그리드의 손익분기점

(SELL 각각: Ask+ current_Prof_Pts* _Point )

결과: true와 유사하지만 항상 true 값을 중심으로 약 3포인트 이동합니다.

말해봐, 어디가 잘못됐어?

떠 다니는 스프레드 가 책임이 있습니다.