[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 95

 
 if ((Opb==0) && (MA_1_t > MA_2_t + Rastvor*Point))           // Если разница между
     {                                          // ..МА 1 и 2 большая
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
      Opb++;					// Открытие только одного ордера
      Ops=0;
         if (VKO1>=Ask) {VP=VP*Koff;} 		// При прибыли предыдущего умножать на коэф.
         if (VKO1<Ask) {VP=VP*Koff1;}		// При убытке предыдущего умножать на коэф1.
      }
 if ((Ops==0) && (MA_1_t < MA_2_t - Rastvor*Point))           // Если разница между
     {                                          // ..МА 1 и 2 большая
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
      Ops++;					// Открытие только одного ордера
      Opb=0;
         if (VKO0<=Bid) {VP=VP*Koff;} 		// При прибыли предыдущего умножать на коэф
         if (VKO0>Bid) {VP=VP*Koff1;}		// При убытке предыдущего умножать на коэф1
      }
      
if ((Opn_S==true)||(Opn_B==true))      		// Если есть сигнал на открытие ордера
      {						// Вычисляем объем умножая на VP
      if (AccountBalance()<50000) Vol=Opn_Lots*VP;
      if (AccountBalance()>50000) Vol=2*Opn_Lots*VP;
      }
Ich kann nicht herausfinden, wo der Fehler liegt, bitte um Rat. Es heißt "nicht genug Geld für Lts=1.#INF"
 

Und prüfen Sie, ob die Kaution ausreicht? https://docs.mql4.com/ru/constants/marketinfo

Und prüfen Sie das Los am Ausgang ?

 

Das ist das Problem... Die Anzahl der Lose wächst ins Unendliche, d.h. die Erhöhung des Volumens wird eingeschleift, und per Code stellt sich heraus, dass es sich um eine einmalige Erhöhung handelt...

Danach, um es klar zu machen, siehe unten. und daher das gleiche mit Sell

if (Total==0 && Opn_B==true)         // Открытых орд. нет  
            {                                   // критерий откр. Buy
            RefreshRates();                     // Обновление данных
                                  
            Min_Lot=MarketInfo(Symb,MODE_MINLOT);  // Миним. колич. лотов 
            Free   =AccountFreeMargin();           // Свободн средства
            One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Стоимость 1 лота
            Step   =MarketInfo(Symb,MODE_LOTSTEP); // Шаг изменен размера
            Lts=MathFloor(Vol);                    // Для открытия 
            Alert ("Lts ", Lts);
            if(Lts < Min_Lot) Lts=Min_Lot;         // Не меньше минимальн
            if (Lts*One_Lot < Free) Alert(" Не хватает денег на ", Lts," лотов"); // Лот дороже свободн.
            
            SL=Ask-StopLoss_Open*Point;            // Вычисление SL откр.
            TP=Ask+TakeProfit_Open*Point;          // Вычисление TP откр.
            Alert("Попытка открыть Buy. Ожидание ответа..");
            Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP); //Открытие Buy
            if (Ticket > 0)                        // Получилось :)
                {
                Alert ("Открыт ордер Buy ",Ticket);
                VKO0=Ask; Opn_B =false; KO++;
                Alert ("Цена открытия =", VKO0);
                }
             
            
            if (Fun_Error(GetLastError())==1)   // Обработка ошибок
            continue;                           // Повторная попытка
                                         
            }
 
            continue;                           // Повторная попытка

es sich um eine so genannte "einmalige Aktion" handelt?

Cap, es ist offensichtlich, dass es einen Kreislauf gibt.

 
sergeev, Sie denken vielleicht selbst nicht richtig... es ist ein Zyklus, wenn ein Eröffnungsfehler auftritt, nicht um die Anzahl der Lose zu erhöhen.
 

Hallo!

Ich kann keine Antwort auf die folgende Frage finden:

Wenn ein schwebender Auftrag ausgeführt wird, ist sein Typ immer noch derselbe wie der Typ des schwebenden Auftrags, oder wird er in OP_BUY oder OP_SELL geändert?

 
oDin48:

Das ist das Problem... Die Anzahl der Lose wächst ins Unendliche, d.h. die Erhöhung des Volumens wird eingeschleift, und per Code stellt sich heraus, dass es sich um eine einmalige Erhöhung handelt...

Danach, um es klar zu machen, siehe unten. und daher das gleiche mit Sell

Versuchen Sie
if (Fun_Error(GetLastError())==0)   // Нет ошибки
break; 
Wenn ein Fehler auftritt, wird einfach versucht, die Position bei einem neuen Tick erneut zu eröffnen. Übrigens wurde mir hier im Forum (S. 90-91) erklärt, dass es ratsam ist, den Operator && (und) in if nicht zu verwenden.
 
gogent:

Wenn ein schwebender Auftrag ausgeführt wird, ist er dann noch derselbe wie der schwebende Auftrag, oder wird er in OP_BUY oder OP_SELL geändert?

Ja, natürlich tut sie das.
 

Weiß jemand, wie man die Anzahl der Pips in eine Währung umrechnen kann?

d.h. wenn der Gewinn in Währungseinheiten angegeben wird, dann sollten 50 Pips in Währungseinheiten umgerechnet werden... d.h. die Hebelwirkung sollte berücksichtigt werden...? 0_о

 

paladin80, das Problem ist nicht die Eröffnung einer Bestellung... es funktioniert gut... Ich habe diesen Teil überflogen, um deutlich zu machen, welche Variablen aus dem Beitrag vom 01.05.12 19:15 weiter verwendet wurden...

Das Problem ist folgendes (siehe unten): Es handelt sich um eine einmalige Ausführung, und aus irgendeinem Grund steigt Vol auf unendlich, also steigt auch Lts auf unendlich... Es ist nicht klar... bitte sehen Sie sich den fraglichen Beitrag an und sagen Sie mir, was falsch ist...

if ((Opn_S==true)||(Opn_B==true))               // Если есть сигнал на открытие ордера
      {                                         // Вычисляем объем умножая на VP
      if (AccountBalance()<50000) Vol=Opn_Lots*VP;
      if (AccountBalance()>50000) Vol=2*Opn_Lots*VP;
      }