MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 582

 

안녕하세요.

다음 알고리즘이 작동하지 않는 이유는 뇌 전체가 망가졌습니다. 함수에 배열을 전달하지 않습니다. 처음에는 이유를 한참 찾았지만 이제는 그런 테스트 예제에서 현지화에 성공했습니다.

보고: "'TestLib.ex4'에서 'functest'를 찾을 수 없습니다 ." " "미해결 가져오기 함수 호출"

Test.mq4 파일의 내용

#속성엄격
#include <TestLibx.mqh>

intmass[5];

int OnInit() { 반환(INIT_SUCCEEDED); }
무효 OnDeinit(const int 이유) { }

무효 OnTick()
{
functest(질량);
정수 c=0;
for (c=0;c<5;c++) Print ( " mass[",c,"]=",mass[c]," ");
수면(2000);
}

TestLibx.mq4 라이브러리 파일의 내용

#속성 라이브러리
#속성엄격
무효 functest(int &massx[])
{
정수 c=0;
동안 (c<5)
{
massx[c]=MathRand();
C++;
}
반품;
}
TestLibx.mqh 라이브러리 파일의 내용

#속성엄격
#import "TestLibx.ex4"
무효 functest(int &massx[]);
#수입

아카이브에 원본 파일을 첨부했습니다.

MQL4에서 라이브러리 함수에 배열을 전달하는 방법을 알아내도록 도와주세요.

고맙습니다.

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Дифференциальный индикатор Султонова Уважаемые...
파일:
MQL4.zip  11 kb
 
Alexey Viktorov :
값의 차이는 10 *Point 보다 크지만 양수 또는 음수 차이를 고려해야 합니다.

고맙습니다. 스왑과 커미션을 포인트로 전환하고 싶습니다. 뭐가 문제 야?

double OrderSwap_Commission( int mn=- 1 )
  {
   int i= 0 ;
   double sum= 0 ,lots= 0 ;
   double pips= 0 ; //своп, комисся в пунктах
   for (i= 0 ; i< OrdersTotal (); i++)
     {
       if (! OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) continue ;
       if ( OrderSymbol ()!= Symbol ()) continue ;
       if ( OrderMagicNumber ()!=mn) continue ;
       if ( OrderType ()== OP_SELL || OrderType ()== OP_BUY )
        {
         lots=lots+ OrderLots ();
         sum=sum+ OrderSwap ()+ OrderCommission ();
        }
     }
   if (lots!= 0 )
     {
      pips= NormalizeDouble ( MathAbs ((sum)/( SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_VALUE )/lots))* _Point , _Digits );
      pips=( MathRound (pips* MathPow ( 10 , Digits )))/ MathPow ( 10 , Digits );
     }
   return (pips);
  }
//
 
bij :

고맙습니다. 스왑 포인트와 커미션을 전환하고 싶습니다. 뭐가 문제 야?

 int   pipsProfitOrder = ( int ) MathFloor ( ( OrderProfit () + OrderSwap () + OrderCommission () ) / ( SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_VALUE )* OrderLots ()) );
 
Konstantin Nikitin :

고맙습니다.

오, 당신은 대답을 바꿨습니다, 나는 이익을 알 필요가 없습니다. 스왑 및 커미션, 위치는 둘 이상일 수 있습니다.

 
bij :

고맙습니다.

오, 당신은 대답을 바꿨습니다, 나는 이익을 알 필요가 없습니다. 스왑 및 커미션.

단지 제비로 나눗셈이 있지만 곱해야 한다는 것입니다.

 SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_VALUE )* OrderLots ()

원리 자체는 내가 사용하는 것을 보여주었습니다. 코드에 적용하는 것은 매우 쉽습니다.

 
Konstantin Nikitin :

단지 제비로 나눗셈이 있지만 곱해야 한다는 것입니다.

원리 자체는 내가 사용하는 것을 보여주었습니다. 코드에 적용하는 것은 매우 쉽습니다.

이해합니다. 감사합니다.
 

안녕하세요!

질문: 표시기는 그래픽 개체 (OBJ_ARROW)를 생성하지만 일부는 컴파일 또는 시간 프레임 변경 후에만 나타납니다. 컴파일 오류나 경고가 없습니다. 테스터에서 Print("ObjectCreate() 호출 오류:",GetLastError());0, Print("ObjectCreate() 호출 오류:",GetLastError());4200.

어렵지 않다면 찻주전자에 답하세요!

 
그리고 테스터에서 다른 기간(더 작은)에 대한 견적을 프로그래밍 방식으로 로드하려면 어떻게 해야 합니까?
 
Juer :
그리고 테스터에서 다른 기간(더 작은)에 대한 견적을 프로그래밍 방식으로 로드하려면 어떻게 해야 합니까?
오래된 TF는 젊은 TF의 데이터에 따라 구축됩니다. 따라서 필요하지 않습니다.
 
bij :
현재 시간 = 포지션 개시 시간 에 5분을 더한 경우 또는 차트 기간이 M5인 경우 새로운 막대가 열릴 때 포지션을 청산합니다.

고맙습니다. 나아지 다. 하지만 이제 또 다른 문제가 발생합니다. 테스터는 지속적으로 100% 성능을 제공합니다. 하지만 그런 일은 일어나지 않습니다. 많은 거래가 열리고 일반적으로 로그에 따라 지정된 시간 이후에 닫힙니다. 그러나 포지션을 열고 닫는 순간을 볼 수 있는 테스트 결과 차트에서는 당연히 모든 거래가 수익성이 있는 것은 아닙니다. 그런 왼쪽 백퍼센트와 무엇을 연결할 수 있습니까?

Artyo님도 감사합니다!