[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 662

 
drknn:


Richtig, denn der erste Parameter gibt eine Zahl zurück und der zweite Parameter ist ein ganzzahliger Wert innerhalb akzeptabler Grenzen. Die Frage ist nur, was genau in die Variable einfließen wird. Versuchen Sie, es so zu drucken, wie es ist, und versuchen Sie diese Konstruktion:

Es ist interessant... Ich habe es so gemacht:

int Trend_BBOsMA (string sy, int tf)
{
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB    =iCustom(sy,tf,"BB_MA",13,13,0,1),
   OsMA  =iOsMA  (sy,tf,9,21,5,PRICE_CLOSE,1),
   AC1   =NormalizeDouble(iAC(sy,tf,1),8),
   AC2   =NormalizeDouble(iAC(sy,tf,2),8),
   AC3   =NormalizeDouble(iAC(sy,tf,3),8);
   
   Comment("\n","AC1 = ",AC1," AC2=",AC2);
   string str1=AC1;
   Print("str1 = ",str1);
   string str2=AC2;
   Print("str2 = ",str2);
   
   if (BB>0 && OsMA>0 && AC1>AC2) return(1);
   if (BB<0 && OsMA<0 && AC1<AC2) return(-1);
   else return(0);
}
Kommentar zeigt
an.

AS1 = 0,001 AS2 = 0,001,

Im Datenfenster: AC1 = 0,001008, AC2 = 0,001020,

und im Protokoll heißt es (die letzten beiden Werte):

0,00100029
0,00100771

 
IgorM:

Ich kann nicht herausfinden, wie man die Extrema einer Funktion findet

Ich habe ein Datenfeld, das Werte speichert:

Wie findet man Frakturen - Extrema, indem man ein Datenfeld mit 250 Elementen verwendet und nur die Elementnummern speichert, an denen sich diese Extrema befinden?


Leute, es ist ein bisschen kompliziert :)
Sie könnten eine einfache Methode skizzieren:

//+------------------------------------------------------------------+
void searchExtremums(double base[], double &find[]){
   int step = 1;
   for(int loop = 0; loop < ArraySize(base)-2; loop++){
      if((base[loop] > base[loop+1] && base[loop+1] < base[loop+2]) || (base[loop] < base[loop+1] && base[loop+1] > base[loop+2])){
         ArrayResize(find, step);
         find[step - 1] = base[loop+1];
         step++;
      }
   }   
}
//+------------------------------------------------------------------+

Sie übergeben das Array, in dem Sie die Extrema finden wollen (base), und das Array, in das sie geschrieben werden sollen (find), ein Beispielaufruf für das Array Vladimir:

double res[];
searchExtremum(my_array, res);

Und wir zeigen Ihnen das Ergebnis:

for(int s = 0; s < ArraySize(res); s++)Alert(res[s])
Das scheint einfacher zu sein :)
 
ToLik_SRGV:


Es scheint einfacher zu sein :)


OK, ich werde heute versuchen, es zu überprüfen, es könnte einfacher sein, aber ich kann die Kombination nicht richtig in meinem Kopf bekommen

void searchExtremums(double base[], double & find[]){

Ich muss nun Funktionen wie diese überprüfen

 
IgorM:

OK, ich werde heute versuchen, es zu überprüfen, es könnte einfacher sein, aber ich kann die Kombination nicht richtig in meinem Kopf bekommen

void searchExtremums(double base[], double & find[]){

jetzt muss ich solche Funktionen überprüfen

Igor, ich habe bereits in diesem Thread darüber geschrieben :)))

Wenn Sie eine Variable über ihren Parameter an eine Funktion übergeben, wird die Variable als Wert übergeben, d. h., wenn Sie die Variable in der Funktion selbst ändern, wird sie nicht überschrieben.
Versuchen Sie, ihn als Referenz zu übergeben, indem Sie ein "&" vor dem Parameternamen einfügen

void simple(string &s){
//                 ^
//       спец сим. & перед именем переменной задает передачу по ссылке, а не по значению
//
}
 
Mathemat:

Der Beitrag von Volfram wurde gelöscht, weil er sich in mehreren Threads verbreitet hat.

Wolfram, Sie haben eigens zu diesem Zweck einen eigenen Thread erstellt. Sie haben bereits eine Antwort erhalten, ist das nicht genug?

P.S. Lassen Sie mich Ihnen ein Geheimnis verraten, Wolfram: Das Fehlen eines offensichtlichen Interesses an Ihrer Idee deutet implizit darauf hin, dass die Idee keine Aufmerksamkeit verdient. Dementsprechend war niemand bereit, sie "gegen Bezahlung" umzusetzen.

Sie haben die Option der E-Mail-Benachrichtigung deaktiviert...

Woher wissen Sie überhaupt, ob jemand geantwortet hat oder nicht, wenn Sie es nicht wissen? Wann werden Sie es zurückbekommen?

 
artmedia70:

Es ist interessant... Ich habe dies getan:

Der Kommentar wird gleichzeitig angezeigt

AS1 = 0,001 AS2 = 0,001,

Im Datenfenster AC1 = 0,001008, AC2 = 0,001020,

und im Protokoll heißt es (die letzten beiden Werte):

0.00100029
0.00100771


Das liegt wahrscheinlich an den Entwicklern ;)
 
artmedia70:

Es ist interessant... Ich habe dies getan:

Der Kommentar wird gleichzeitig angezeigt

AS1 = 0,001 AS2 = 0,001,

Im Datenfenster AC1 = 0,001008, AC2 = 0,001020,

und im Protokoll heißt es (die letzten beiden Werte):

0.00100029
0.00100771

Ich habe es auch versucht, alles scheint in Ordnung zu sein, in dem Kommentar:
AC = -0,0004, in der Zeitschrift -0,00035586
AC2 = -0,0007, Zeitschriften -0,00068589
 
ToLik_SRGV:
Ich habe es auch versucht, alles scheint in Ordnung zu sein, im Kommentar:
AC = -0.0004, im Journal -0.00035586
AC2 = -0.0007, im Journal -0.00068589

Comment() scheint die Werte intern zu runden... Und wie praktisch es manchmal ist, sie während der visuellen Prüfung direkt auf dem Bildschirm zu sehen... Allerdings nicht gerade... :)

Ja, und übrigens, hier auf einem Forum über Normalisierung lesen so von ein paar Stunden bis 7.30 Uhr ...
Die Normalisierung sollte so nah wie möglich an der Vergleichsoperation durchgeführt werden... Daher denke ich, dass ich einige Dinge in einigen Funktionen und Codes ändern sollte... Und dann wird der Test den Unterschied zeigen...

 
artmedia70:

Comment() scheint die Werte intern zu runden... Und wie praktisch es manchmal ist, sie während der visuellen Prüfung direkt auf dem Bildschirm zu sehen... Allerdings nicht gerade... :)

Als ich eine Funktion zur Verwaltung einer Partie schrieb, musste ich eine dll-Bibliothek in Delphi erstellen, da die Aufgabe, die ich mit MQL4 lösen musste, unmöglich zu lösen war...
 

Hallo! Können Sie mir, der ich ein Superdummie in MQL4 bin, bitte erklären, was das Richtige ist. Ich schreibe gerade meinen ersten EA. Ich gebe eine SellStop-Order auf, und nachdem diese ausgelöst wurde, wird die BuyStop-Order platziert. Ich glaube, ich muss OrdeCloseTime verwenden. Ich habe viele Varianten ausprobiert, aber der EA sieht den Auftrag nur, wenn OrdeCloseTime==0. Nachdem SellStop geschlossen wurde, wird SellStop wieder geöffnet. Ich stelle Ihnen den Code zur Verfügung. Bei dieser Variante werden SellStop und BuyStop gleichzeitig geöffnet. Bitte helfen Sie mir. Ich danke Ihnen im Voraus.

int I = 0;

int start()

{

wenn (I < 1)

{

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,OP_SS,Slippage,SL,CP_SS);

wenn (Ticket>0)

{ Alert("OrderSend"," ",ticket); } else { Alert("!OrderSend","",GetLastError()); }

//--------------------------------------------------------------------------

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{ Alert("OrderSelect", ",ticket); } else { Alert("!OrderSelect"," ",GetLastError()); }

//--------------------------------------------------------------------------

OrderSend(Symbol(),OP_BUYSTOP,Lot,OP_BS,Slippage,SL,CP_BS);

}

I=1;

}

zurück (0);

//--------------------------------------------------------------------------

Grund der Beschwerde: