Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 582

 

Guten Tag.

Es ist mir ein Rätsel, warum der folgende Algorithmus nicht funktioniert. Es wird kein Array an die Funktion übergeben. Zuerst habe ich nach dem Grund dafür gesucht, aber in diesem Testbeispiel bin ich fündig geworden.

Berichte: "Cannot find 'functest' in 'TestLib.ex4' " dann "unresolved import function call."

Inhalt der Datei Test.mq4

#Eigenschaft streng
#include <TestLibx.mqh>

int-Masse [5];

int OnInit() { return(INIT_SUCCEEDED); }
void OnDeinit(const int reason) { }

void OnTick()
{
(Masse);
int c=0;
for (c=0;c<5;c++) Print (" mass[",c,"]=",mass[c]," ");
Schlaf(2000);
}

Inhalt der Bibliotheksdatei TestLibx.mq4

#Eigenschaftsbibliothek
#Eigenschaft streng
void functest (int &massx[])
{
int c=0;
while (c<5)
{
massx[c]=MathRand();
c++;
}
Rückkehr;
}
Inhalt der Bibliotheksdatei TestLibx.mqh

#Eigenschaft streng
#import "TestLibx.ex4"
void functest (int &massx[]);
#import

Hängen Sie die Originaldateien an das Archiv an.

Bitte helfen Sie mir zu verstehen, wie man Arrays in MQL4 an die Bibliotheksfunktion übergeben.

Ich danke Ihnen.

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Дифференциальный индикатор Султонова Уважаемые...
Dateien:
MQL4.zip  11 kb
 
Alexey Viktorov:
Die Differenz der Werte ist größer als 10*Punkt, aber wir müssen berücksichtigen, ob die Differenz positiv oder negativ sein wird.

Ich danke Ihnen. Ich möchte in den Tausch von Punkten und Provisionen wechseln. Was ist daran falsch?

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:

Ich danke Ihnen. Ich möchte in den Tausch von Punkten und Provisionen wechseln. Was ist los?

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

Ich danke Ihnen.

Op, Sie haben Ihre Antwort geändert, ich brauche den Gewinn nicht zu wissen. Tausch und Provision, es kann mehr als eine Position geben.

 
bij:

Ich danke Ihnen.

Op, etwas, das Sie in Ihrer Antwort geändert haben, ich muss den Gewinn nicht kennen. Tausch und Provision.

Es ist nur so, dass Sie durch das Los dividieren und multiplizieren müssen.

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()

Das Prinzip selbst hat gezeigt, was ich verwende. Und die Anwendung auf Ihren Code ist ganz einfach.

 
Konstantin Nikitin:

Es ist nur so, dass man die Division durch das Los hat und man multiplizieren muss.

Das Prinzip selbst hat gezeigt, was ich verwende. Und die Anwendung auf Ihren Code ist ziemlich einfach.

Ich verstehe, danke.
 

Hallo!

Frage: Der Indikator erstellt grafische Objekte(OBJ_ARROW), aber einige von ihnen erscheinen erst nach der Kompilierung oder dem Wechsel des Zeitrahmens. Bei der Kompilierung treten keine Fehler oder Warnungen auf. Im Testprogramm wird Print("Fehler beim Aufruf von ObjectCreate():",GetLastError());0, Print("Fehler beim Aufruf von ObjectCreate():",GetLastError());4200.

Wenn es Ihnen nichts ausmacht, einem Dummkopf zu antworten!

 
Wie kann der Prüfer programmatisch Angebote aus einem anderen (kleineren) Zeitrahmen laden?
 
Juer:
Wie kann der Prüfer programmatisch Angebote für einen anderen (kleineren) Zeitrahmen laden?
Der hohe Zeitrahmen basiert auf den Daten des niedrigen Zeitrahmens. Es ist also nicht notwendig.
 
bij:
Schließen Sie die Position, wenn die aktuelle Zeit = Eröffnungszeit plus 5 Minuten ist oder bei der Eröffnung eines neuen Balkens, wenn die Chartperiode M5 ist.

Ich danke Ihnen. Es wurde besser. Aber jetzt gibt es ein weiteres Problem. Das Testgerät liefert mir immer 100 %ige Ergebnisse. Aber so funktioniert es nicht. Viele Geschäfte werden eröffnet und normalerweise nach der im Protokoll angegebenen Zeit geschlossen. Allerdings sind nicht alle Geschäfte profitabel, wie aus dem Ergebnisdiagramm hervorgeht, in dem die Zeitpunkte der Eröffnung und Schließung von Positionen zu sehen sind. Was kann der Grund für eine solche linke 100% sein?

Danke auch an Artem!