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

 
artmedia70:

Hier haben Sie

void OpenBuy() {

double dStopLoss = 0, dTakeProfit = 0;
double Lots_New = Lot;

wenn (isLossLastPos(NULL, -1, MAGIC))
Lose_Neu *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))

Lose_Neu = Los;

Es handelt sich um eine Funktion, und gleich zu Beginn dieser Funktion weisen Sie der Variablen Lots_New den Wert = Lot zu;

Überlegen Sie sich, wie sie sich danach verändern wird, wenn Sie sie immer wieder in ihren ursprünglichen Zustand zurückversetzen?

Wo habe ich Ihnen gesagt, Sie sollen es schreiben? In den externen Variablen vor der Startfunktion...

Und normalisieren Sie den Wert des Loses auf die richtige Größe:

Lots_New = NormalizeLot(Lot*2, False, "");




Ich danke Ihnen vielmals!

Können Sie uns auch sagen, ob Sie den Wert eines Loses zu jedem nachfolgenden Verlustauftrag hinzufügen können? Sie können etwas wie dieses verwenden

1 Los 0,01

2 Partien 0,01

3 Partien 0,02

4 Los 0,03

5 Los 0,07

.....

15 Los 1.2

Die Möglichkeit, den Lotwert im Code zu ändern.

Und falls sich ein Geschäft als profitabel erweisen sollte, würde alles wieder auf Anfang gestellt.

Ich werde Ihnen im Voraus danken.

Ich danke Ihnen.

 
Necron:
Roger, danke, aber es funktioniert immer noch nicht richtig. Ich habe versucht, einen weiteren Trailing-Stop hinzuzufügen, aber der Fehler ist immer noch da :( Gibt es einen Unterschied zwischen Trailing-Stop für eine Position und Trailing-Stop für mehrere Positionen gleichzeitig?

Das macht im Prinzip keinen Unterschied.
Versuchen Sie meine Funktion, es ist einfach genug, übergeben Sie als Parameter, medjic, und gewünschte Schleppnetz.
Der Aufruf dieser Funktion erfolgt beim Start an beliebiger Stelle, solange sie bei jedem Tick dorthin "spritzt".

//+------------------------------------------------------------------+
void trailing(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUY){
            if(Bid - OrderStopLoss() > Point*trailing){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
         if(OrderType() == OP_SELL){
            if(OrderStopLoss() - Ask > Point*trailing || OrderStopLoss() == 0){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+

Offensichtlich sollten Aufträge unterschiedliche Schieberegler haben.

 
Bitte sagen Sie mir, warum es nicht funktioniert:

OrderSelect(1,SELECT_BY_POS,MODE_TRADES);

Fehlercode 4051. Es gibt einen offenen OP_BUY Auftrag.
Dateien:
ma_1.mq4  3 kb
 
itum:

Helfen Sie mir, ein Problem zu lösen!


Ich suche nach Aufträgen, die offen oder in Bearbeitung sind. Wenn sie verfügbar sind, entscheide ich, ob es sich um einen Kauf- oder Verkaufsauftrag handelt. Unter bestimmten Bedingungen (wenn einer größer als der andere oder kleiner als der dritte ist), möchte ich diesen Auftrag schließen. Ändern Sie die Parameter und öffnen Sie sie erneut.

Das Problem ist, dass es immer ein Signal gibt, um den Auftrag zu schließen und zu öffnen. Deshalb wird meine Bestellung geschlossen und wieder geöffnet, und so öffnet und schließt sie sich ... )))

Wie lässt sich dieses Problem lösen? Ga
Ich glaube, es ist ein Déjà-vu... Bin ich der Einzige? Sie haben bereits mehrere Antworten erhalten... Hm?
Tragen Sie hier Ihren Code mit Öffnungs- und Öffnungsbedingungen ein. Wir werden den Finger darauf legen... :)
 
an11:
Bitte sagen Sie mir, warum es nicht funktioniert:

OrderSelect(1,SELECT_BY_POS,MODE_TRADES);

Fehlercode 4051. Es gibt einen offenen OP_BUY Auftrag.

Die Zählung der Nummern in der Funktion OrderSelect() beginnt bei Null. Und Sie haben 1, was bedeutet, dass Sie nach der zweiten Bestellung suchen, obwohl Sie nur eine auf dem Markt haben, weshalb es nicht funktioniert.

 
Vinin:
Sie können dies mit Parametern tun, aber nicht mit Mustern. Sie müssen zunächst die Kriterien festlegen. Ähnlich, nicht ähnlich. Und wenn sie ähnlich ist, in welchem Umfang. Zumindest um wie viel (in Prozenten). Im einen Fall die Zeitkomponente, im anderen Fall die Preiskomponente. Wie man sie miteinander in Beziehung setzt. Obwohl ich eine neuronale Schicht anbringen kann. Die Kohonen-Schicht macht das sehr gut.

Ich habe 12 Varianten eines Musters in einem meiner Indikatoren, das Muster ist das gleiche, aber die Werte sind immer unterschiedlich und ihr Verhältnis ist unterschiedlich )), ....) Ich habe noch nie mit neuronalen Netzen gearbeitet, und ich denke, dass meine Erfahrung im Schreiben elementarer Algorithmen mit mql nicht ausreicht, auch wenn sie mir vielleicht hilft, das Problem zu lösen. Ich habe diese Aufgabe früher "barbarisch" bewältigt, indem ich Kohonen ersetzte, indem ich alle Parameter in Exxel zum Zeitpunkt des Auftretens des Musters und des Ergebnisses, wenn das Geschäft eröffnet wurde, aufschrieb und dann mit Hilfe der Exxel-Analyse nach weiteren Übereinstimmungen in Korrelation mit der Rentabilität suchen musste. So oder so habe ich etwas bekommen, und das System hat das Muster klug definiert, aber es war trotzdem nicht sehr intelligent).
 
cyclik33: ...

Ich weiß nicht, welche Funktion du verwendest, aber die allgemeine Idee ist folgende: Da deine Tonhöhe nicht gleichmäßig ist, schlage ich vor, ein Array zu verwenden, in das du die benötigten Volumina schreibst und dann die Funktion verwendest, um ihren Wert zu durchlaufen.

Beispiel für meinen Code:

//+------------------------------------------------------------------+
double getMartinLot(double lot, double arrayLot[]){//ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;   
   static int loop;
   if(loop == ArraySize(arrayLot))loop = 0;   
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА   
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ
      loop = 0;
   }else{
      save_Lot = arrayLot[loop];                   //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ
      loop++;
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+
Beispiel für einen Funktionsaufruf:
//+------------------------------------------------------------------+
int start()
  {
   double volume[] = {0.1, 0.1, 0.2, 0.3, 0.7};   //создаем массив с объемами

   if(OrdersTotal() == 0){
      OrderSend(Symbol(), OP_BUY, getMartinLot(0.1, volume), Ask, 10, Bid - 25*Point, Bid + 25*Point, "", 777);
   }
}
//+------------------------------------------------------------------+
 
artmedia70:
Ich glaube, es ist ein De ja vu... Bin ich der Einzige? Es haben Ihnen schon mehrere Leute geantwortet... Hm?
Geben Sie Ihren Code mit der Bedingung für das Öffnen und Öffnen der Pose ein. Wir werden den Finger darauf legen... :)
Ich auch :))) Valentin will aus irgendeinem Grund den Code nicht zeigen, wahrscheinlich will er seine Ideen nicht zeigen...
 
ToLik_SRGV:

Ich weiß nicht, welche Funktion du verwendest, aber hier ist eine allgemeine Idee: Da deine Tonhöhe nicht flach ist, schlage ich vor, ein Array zu verwenden, in das du die benötigten Mengen schreibst und dann die Funktion verwendest, um die Werte durchzugehen.

Beispiel für meinen Code:

Beispiel für einen Funktionsaufruf:

Herzlichen Dank!!!!!

Ich verwende Ihren Code auch (und er funktioniert übrigens gut), aber ich wollte den Artemis-Code zuerst in einem anderen EA installieren, weil ich mehr Probleme damit hatte und es eine prinzipielle Frage war, warum er nicht richtig funktionierte.

Nochmals vielen Dank !!!! Ich werde es jetzt ausprobieren!

 

Die Frage mag trivial sein, der Expert Advisor handelt auf M1, das Signal zum Eröffnen einer Order kam, nehmen wir an, der Stop ist short und die Order wurde auf dem Sl geschlossen, aber die Bedingung zum Eröffnen besteht weiterhin.

Wie lässt sich am besten sicherstellen, dass der Auftrag nicht in derselben Minute erneut geöffnet wird?