Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 234

 
Integer:


Nun, jetzt geht's los, alles auf einmal... Moderatoren, es wäre besser, dort für Ordnung zu sorgen, wo sie überwacht werden muss. Im Forum ist ein Wahnsinn los, und wo sind die Moderatoren? Bleiben Sie stecken, machen Sie es kaputt, schicken Sie es weg, es gibt Moderatoren. Vielleicht ist es an der Zeit, mit dem Blödsinn aufzuhören?

Es schmerzt mich zu sehen, wie sich die Giganten des Forums wegen nichts streiten. Dies ist ein Forum für Programmierer einer sehr mächtigen Ressource. Seien Sie höflich. Anregung:

1. Wenn versucht wird, zu anderen Persönlichkeiten zu wechseln, auch wenn dies nur heimlich geschieht, wird der Spieler für 24 Stunden gesperrt;

2. Beleidigung einer Person - eine Woche Sperre;

3. wiederholte Beleidigungen mit Flüchen - ein Monat Sperre;

4. alle vorangegangenen Verwarnungen ignoriert und Verstöße in einer harten Art und Weise wiederholt - permanenter Bann.

 
yosuf:

Es ist schmerzhaft zu sehen, wie sich die Giganten des Forums über Kleinigkeiten streiten. Dies ist ein Forum von Programmierern einer mächtigen Ressource. Seien Sie höflich. Anregung:

1. Wenn versucht wird, zu anderen Persönlichkeiten zu wechseln, auch wenn dies nur heimlich geschieht, wird der Spieler für 24 Stunden gesperrt;

2. Beleidigung einer Person - eine Woche Sperre;

3. wiederholte Beleidigungen mit Flüchen - ein Monat Sperre;

4. alle früheren Verwarnungen zu ignorieren und Verstöße in harter Form zu wiederholen - ewige Sperre.



Ich stimme dem absolut zu, nur leider sind die Moderatoren hier nicht kompetent genug, um "etwas Verdecktes" zu erkennen. So ist es auch mit all den hochrangigen Diplomaten hier.
 

Tut mir leid, dass ich so abschweife, aber vielleicht kann mir jemand sagen, worum es sich handelt:

Aus dem Handbuch:

"Es ist möglich, Parameter per Referenz zu übergeben. In diesem Fall wirkt sich die Änderung solcher Parameter auf die entsprechenden Variablen in der aufgerufenen Funktion aus, die als Referenz übergeben wird. Die Elemente von Arrays können nicht per Referenz übergeben werden. Parameter können nur innerhalb der Grenzen eines einzelnen Moduls per Referenz übergeben werden, für Bibliotheksfunktionen ist eine solche Möglichkeit nicht vorgesehen. Um anzugeben, dass der Parameter als Referenz übergeben wird, muss der Modifikator & hinter dem Datentyp stehen.

Arrays können auch per Referenz übergeben werden, wobei alle Änderungen in das ursprüngliche Array übernommen werden. Im Gegensatz zu einfachen Parametern können Arrays in Bibliotheksfunktionen auch als Referenz übergeben werden.

Um einen Wert per Verweis aus einer Bibliotheksfunktion zu übergeben, muss ich einen Proxy in Form eines Arrays der Einheitsdimension verwenden,

Gibt es andere Umgehungsmöglichkeiten?

Und warum wird das so gemacht?

 
ALXIMIKS:

Tut mir leid, dass ich so abschweife, aber vielleicht kann mir jemand sagen, worum es sich handelt:

Aus dem Handbuch:

"Es ist möglich, Parameter per Referenz zu übergeben. In diesem Fall wirkt sich die Änderung solcher Parameter auf die entsprechenden Variablen in der aufgerufenen Funktion aus, die als Referenz übergeben wird. Die Elemente von Arrays können nicht per Referenz übergeben werden. Parameter können nur innerhalb der Grenzen eines einzelnen Moduls per Referenz übergeben werden, für Bibliotheksfunktionen ist eine solche Möglichkeit nicht vorgesehen. Um anzugeben, dass der Parameter als Referenz übergeben wird, muss der Modifikator & hinter dem Datentyp stehen.

Arrays können auch per Referenz übergeben werden, wobei alle Änderungen in das ursprüngliche Array übernommen werden. Im Gegensatz zu einfachen Parametern können Arrays in Bibliotheksfunktionen auch als Referenz übergeben werden.

1. Um einen Wert per Verweis aus einer Bibliotheksfunktion zu übergeben, muss ich einen Proxy in Form eines Arrays der Einheitsdimension verwenden,

Gibt es andere Umgehungsmöglichkeiten?

2. Warum wird das so gemacht?

1. Richtig. Es gibt keinen anderen Weg in MQL4.

2. Was genau? Wenn es sich um die Übergabe per Verweis handelt, dann dient sie der Übergabe großer Datenmengen (größer als die Länge des Basistyps). Sie dürfen den Stapel nicht mit ihnen belasten. Normalerweise werden Strukturen, Klassen und Arrays als Zeiger oder Referenz übergeben. Obwohl die Klasse und die Struktur von der Funktion durch return zurückgegeben werden können. Sie können auch einen Verweis oder Zeiger auf eine Klasse, Struktur oder ein Array zurückgeben.

 

Ich habe dieses Problem:

Wenn ich den Stoploss ändere, gelingt es von Zeit zu Zeit nicht, einen Stop für den zuletzt geöffneten Auftrag zu setzen. Das passiert recht selten, aber von Zeit zu Zeit schießt es durch.

Ich habe keine Fehler in den Preisen. Nur ein Dreckskerl setzt manchmal einen Auftrag nicht auf die letzte Position, nach der der Auftrag neu berechnet wird.

Können Sie mir sagen, wo ich einen Fehler gemacht habe?

//+-------------------------------------------------------------------------------------+
//|                        Управление StopLoss, TakeProfit                              |
//+-------------------------------------------------------------------------------------+
bool ProfitManagement()
{
double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
double StopLossSell = SellAP-Profit*Point;
double TakeProfitSell = SellAP - Profit*Point;
RefreshRates();
for(int good = 0; good < OrdersTotal(); good ++)     // Выбираем со всего массива ордеров
 {
 if(OrderSelect (good, SELECT_BY_POS, MODE_TRADES))             
 if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
 if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  //Выбираем ордера эксперта
   { 
//-------------------------Order Buy-----------------------------------------------------  
if (BuyCount >1)                                           //Если открыты длинные позиции
 {
 if (BuyAP < Bid)                                                //Если  мы идем по рынку  
 if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)           // Профит не равен нужному
 if (Bid - StopLossBuy > DedZone)                    // Уровень достаточно удален от цены
 if (WaitForTradeContext())                                // Свободен ли торговый поток?
 if (OrderType() == OP_BUY)                                        // Выбираем ордера Buy
 if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime))    // Изменяем StopLoss
  {
 Alert (Symbol()," Хрень со стопами! ",   GetLastError());
 return(false);
  }

// ну и далее по логике
 
yosuf:

Es ist schmerzhaft zu sehen, wie sich die Giganten des Forums über Kleinigkeiten streiten. Dies ist ein Forum der Programmierer der mächtigsten Ressource. Seien Sie höflich. Anregung:

1. Wenn versucht wird, zu anderen Persönlichkeiten zu wechseln, auch wenn dies nur heimlich geschieht, wird der Spieler für 24 Stunden gesperrt;

2. Beleidigung einer Person - eine Woche Sperre;

3. wiederholte Beleidigungen mit Flüchen - ein Monat Sperre;

4. alle vorherigen Verwarnungen zu ignorieren und Verstöße in harter Form zu wiederholen - unbefristete Sperre.


Und das Erschießungskommando wann? Wird es keine geben?
 
Limita:

Ich habe dieses Problem:

Wenn ich den Stoploss ändere, gelingt es von Zeit zu Zeit nicht, einen Stop für den zuletzt geöffneten Auftrag zu setzen. Das passiert recht selten, aber von Zeit zu Zeit schießt es durch.

Ich habe keine Fehler in den Preisen. Nur ein Dreckskerl setzt manchmal einen Auftrag nicht auf die letzte Position, nach der der Auftrag neu berechnet wird.

Bitte teilen Sie mir mit, was ich falsch gemacht habe?

Erklären Sie diese Abfolge in Worten:

   //-------------------------Order Buy-----------------------------------------------------  
         if (BuyCount >1) {
            if (BuyAP < Bid)                                      //Если  мы идем по рынку, то выполнится следующая  
            if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)   // Профит не равен нужному
            if (Bid - StopLossBuy > DedZone)                      // Уровень достаточно удален от цены
            if (WaitForTradeContext())                            // Свободен ли торговый поток?
            if (OrderType() == OP_BUY)                            // Выбираем ордера Buy
            if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
               Alert (Symbol()," Хрень со стопами! ",   GetLastError());
               return(false);
            }

Einfach ausgedrückt: Wie würden Sie einem Partner, der weit vom Programmieren entfernt ist, sagen

 

Wir wollen z.B. 50 Pips pro Position verdienen. StopLoss entspricht unserem Durchschnittspreis + 50 Pips .

Wenn wir eine offene Long-Position haben, verdienen wir damit einen bestimmten Geldbetrag. Wir setzen StopLoss auf ein bestimmtes Niveau. Lassen Sie den Markt weiter wachsen. Wenn wir noch nicht genug Geld verdienen, warten wir, bis wir anfangen, genug zu verdienen.

Wir eröffnen eine weitere Position in der Richtung Kaufen. Wenn sich der Durchschnittspreis ändert, ändern wir den StopLoss.

Und natürlich setzen wir Stops, befolgen die Regeln eines Brokers (Handelsfluss, Stop-Level), sonst wird der Broker uns nicht verstehen :)))

Ich hoffe, ich konnte das erklären :))

 
Limita:

Wir wollen z.B. 50 Pips pro Position verdienen. StopLoss entspricht unserem Durchschnittspreis + 50 Pips .

Wenn wir eine offene Long-Position haben, verdienen wir damit einen bestimmten Geldbetrag. Wir setzen StopLoss auf ein bestimmtes Niveau. Lassen Sie den Markt weiter wachsen. Wenn wir noch nicht genug Geld verdienen, warten wir, bis wir anfangen, genug zu verdienen.

Wir eröffnen eine weitere Position in der Richtung Kaufen. Wenn sich der Durchschnittspreis ändert, ändern wir den StopLoss.

Und natürlich setzen wir Stops, befolgen die Regeln eines Brokers (Handelsfluss, Stop-Level), sonst wird der Broker uns nicht verstehen :)))

Ich hoffe, ich konnte das erklären :))

Ja ... Ich meinte - die Logik dieser Zeilen ...

Die Logik ist nicht eindeutig, da es keine geschweiften Klammern gibt. Das bedeutet, dass nicht jede Zeile erfüllt wird, wenn die vorhergehende Bedingung erfüllt ist

 
Limita:

Ich habe dieses Problem:

Wenn ich den Stoploss ändere, gelingt es von Zeit zu Zeit nicht, einen Stop für die zuletzt geöffnete Order zu setzen. Das passiert recht selten, aber von Zeit zu Zeit schießt es durch.

Ich habe keine Fehler in den Preisen. Nur ein Dreckskerl setzt manchmal einen Auftrag nicht auf die letzte Position, nach der der Auftrag neu berechnet wird.

Bitte sagen Sie mir, wo ich einen Fehler gemacht habe?


for (int good = 0; good < OrdersTotal(); good ++){                                // Выбираем со всего массива ордеров
    }    

Es ist besser, es so zu machen (jemand schrieb, dass er Probleme beim Ändern oder Löschen von Aufträgen mit Ihrer Methode hatte):

for (int good = OrdersTotal()-1; good >= 0; good --){     // Выбираем со всего массива ордеров
    }  

Und warum Öl und Butter? (eine Sache in Ruhe lassen)

 if (OrderSymbol() != Symbol() || OrderMagicNumber() !=  MagicNumber) continue;
 if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber) {          //Выбираем ордера эксперта
    }
Grund der Beschwerde: