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

 
Michey25 >>:

что тут не так?

Короче этот советник я прикрепляю к часовому графику, и если цена в начале часа выше чем cn1 а текущая не привышает её на 8 пунктов то ордер должен открыться (также если цена ниже текущего уровня) А он у меня почему-то сразу открывает позицию. Почему?

Und wo steht die 8-Punkte-Bedingung? Besser ist es, acht mit MarketInfo(NULL,MODE_POINT) zu multiplizieren;

 
splxgf >>:

А где записано условие на 8 пунктов? лучше восемь умножать на MarketInfo(NULL,MODE_POINT);

(a-cn1)<0.0008)

 
Helfen Sie mir, zwei EAs zu verschmelzen. Expert PYLOSE schließt Aufträge mit einem bestimmten MAGIKOM, wenn ein bestimmter Betrag von Geld, und die EA Trailing Trails Eigenkapital, wenn es einen bestimmten Betrag erreicht.helfen Sie mir einige Code von Trailing in PYLOSE einfügen, es auch Trails, aber nicht schließen Aufträge mit einem bestimmten MAGIKOM, wenn es einen bestimmten Betrag erreicht.und möglicherweise Kommentar zu den Trailing-Fonds auf dem Bildschirm angezeigt.thanks!
Dateien:
archive_1.zip  10 kb
 

Michey25


als ich geantwortet habe, war der Code ein bisschen anders ;)

Obwohl es einige Fragen gibt, hängt das Ergebnis von op(0) stark vom aktuellen Zeitrahmen ab. Es ist nicht klar, woher die cn kommen und welcher Art sie sind.

Können Sie nicht Alert(Open[0],cn1,Open[0]<cn1,a,(a-cn1)<0.0008) machen?

Verwenden Sie statt i=1 besser break, damit wird die Schleife sofort beendet, anstatt alle Befehle bis zum Ende auszuführen.

int i=0;
   double a,b;
   while (i==0)
   {
     a=MarketInfo("USDCAD", MODE_ASK);
     b=MarketInfo("USDCAD", MODE_BID); 
     if((Open[0]<cn1)&&((a-cn1)<0.0008))
      {
       OrderSend("USDCAD",OP_BUY,1,a,1,SL,cn2);
       i=1;
       }
     if((Open[0]>cn11)&&((cn11-b)<0.0008))
      {
       OrderSend("USDCAD",OP_SELL,1,b,1,SL1,cn21);
       i=1;
      }  
   }
 

Hallo. Bitte helfen Sie mir bei der Umsetzung der folgenden Aufgabe. Es gibt 2 unabhängige Bedingungen in einem EA, auf deren Grundlage separate Aufträge geöffnet werden, jeder mit seiner eigenen Magie. In einem Diagramm kann es zu jedem Zeitpunkt nur einen Auftrag für jede der Bedingungen geben, und sie können gleichzeitig miteinander sein. Um die Möglichkeit zu prüfen, Aufträge zu eröffnen, gehe ich wie folgt vor

int CalculateCurrentOrders(string symbol)
  {
   int buys=0, sells=0, buystop=0, sellstop=0;
//----
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && (OrderMagicNumber()== MAGIC1 || OrderMagicNumber()== MAGIC2))
              {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
          if(OrderType()==OP_BUYSTOP)  buys++;
         if(OrderType()==OP_SELLSTOP) sells++;
        }
     }
//----
   if( buys>0) return( buys);
   else       return(- sells);

Aber die Aufträge werden erst mit dem zweiten Zauber geöffnet.

Dann werden die Aufträge auch unabhängig voneinander abgeschlossen. Gleichzeitig verwendet der Auftrag mit der ersten Magie ein Schleppnetz und der zweite nicht

Ich habe dieses Beispiel verwendet, aber das Schließen erfolgt entweder nicht nach den Regeln der ersten oder der zweiten Bedingung oder überhaupt nicht

 

  for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1)
     if(OrderType()==OP_BUY) 
     if ( Sell1==1)
             {
              OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
              return(0);
             }
                     
      if(OrderType()==OP_SELL) 
      if ( Buy1==1)
             {
              OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
              return(0);
             }
  
      if(OrderType()==OP_BUYSTOP && Sell1==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
      if(OrderType()==OP_SELLSTOP && Buy1==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
    }
   
   for(int i2=0; i2<OrdersTotal(); i2++)
     {
      if(OrderSelect( i2, SELECT_BY_POS, MODE_TRADES)) 
   
         if(OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC2)
     if(OrderType()==OP_BUY)
      if ( Sellcl0==1)
       {

       OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
              return(0);
            }
                 
    if(OrderType()==OP_SELL) 
    if ( Buycl0==1)
    
            {
              OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
              return(0);
          
        }
     if(OrderType()==OP_BUYSTOP) 
     if ( Sellcl0==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
      if(OrderType()==OP_SELLSTOP && Buycl0==1)
        {
         OrderDelete(OrderTicket());
        return(0);
         }
      }   
    
     // MODIFICATION -------
     
     TrailingPositionsBuy( parab);
    TrailingPositionsSell( parab);
   // TrailingPositionsBuystop(parab);
   // TrailingPositionsSellstop(parab);
    return (0);
   }
/*bool ExistPositions() {
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
            return(True);
         }
      } 
   } 
   return(false);
}*/
     
void TrailingPositionsBuy(double parab) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1) { 
            if (OrderType()==OP_BUY) { 
             //  if (Bid-OrderOpenPrice()>trailingStop*Point) { 
              //    if (OrderStopLoss()<Bid-trailingStop*Point) 
                     ModifyStopLoss( parab);
                                   
               } 
            } 
         } 
      } 
   } 
//} 
void TrailingPositionsSell(double parab) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1) { 
            if (OrderType()==OP_SELL) { 
             //  if (OrderOpenPrice()-Ask>trailingStop*Point) { 
             //     if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)  
                     ModifyStopLoss( parab);
                  
               } 
            } 
         } 
      } 
   } 

Sell1, Buy1, Sellcl0, Buycl0 sind Beschreibungen der Abschlussbedingungen.


Würde eine solche doppelte Aufhebung von Positionen überhaupt funktionieren? Ich danke Ihnen!

 
exolon >>:

Здравствуйте. Помогите пожалуйста реализовать такую вещь. В одном эксперте работают 2 независимых условия, на основе которых открываются отдельные ордера, каждый со своим magic. В каждый момент времени на одном графике может быть только один ордер по каждому из условий, при этом они могут быть одновременно друг с другом. Для проверки возможности открытия ордеров делаю такую конструкцию

Но открываются ордера только со вторым magic.

Далее, закрываются ордера тоже независимо друг от друга. При этом ордер с первым magic использует трал, а второй нет

Применил вот такой вариант, но закрытия либо происходят не по правилам ни от первого, ни от второго условия, либо не происходят вообще

sell1, buy1, sellcl0, buycl0 - описания условий на закрытие.


Будет ли вообще работать такой двойной перебор позиций? Благодарю!


nach dem Schließen und Löschen von Aufträgen den Empfänger entfernen und an das Ende der Funktion setzen oder stattdessen ein Kontinuum setzen

 

Hallo zusammen, ich schreibe gerade mein erstes mql-Programm und lerne gleichzeitig die Sprache.

Ich lerne die Sprache. Können Sie mich bitte beraten?


Ich habe eine Frage: Wenn ich mein erstes mql-Programm schreibe, würde ich gerne wissen, was daran falsch ist. Können Sie mir sagen, was los ist? Ich habe vier Stunden damit verbracht, das Nachschlagewerk durchzusehen, ich verstehe es selbst nicht.


void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

 
Jahspear писал(а) >>

Hallo zusammen, ich schreibe gerade mein erstes mql-Programm und lerne gleichzeitig die Sprache.

Ich lerne die Sprache. Können Sie mich bitte beraten?

Ich habe eine Frage: Wenn ich mein erstes mql-Programm schreibe, würde ich gerne wissen, was daran falsch ist. Können Sie mir sagen, was los ist? Ich habe etwa vier Stunden lang in dem Nachschlagewerk gestöbert, aber ich verstehe es nicht.

void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

Und wofür ich die Schleife gemacht habe. Liegt keine Bedingung vor, sollten wir nicht eine unbekannte Anzahl von Tagen abwarten, bis das Signal erscheint.

 

Guten Tag.

Der Indikator hat den Namen IndicatorShortName("iC_C_mod, ..... ");

Ich muss jedoch neben dieser Beschriftung einen Kommentar mit einer sich dynamisch verändernden Variablen in das Anzeigefenster einfügen.

Wie f-i Comment();

Ich brauche sie im Indikatorfenster, aber nicht im Diagramm.

Bitte um Rat?

 
Jahspear >>:



void CheckSell()
{
if((NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
Sell();
}


Wahrscheinlich so etwas wie das hier, denn Endlosschleifen dauern auf moderner Hardware sehr lange.
Grund der Beschwerde: