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

 

Hier müssen wir schwebende Aufträge platzieren und ihre Preise im Verhältnis zum Schlusskurs des vorherigen Balkens berechnen. BUYSTOP wird gesetzt, während SELLSTOP den Fehler 130 zurückgibt. Liegt ein Fehler in diesem Code vor? Oder in einer anderen Funktion.

void SetOrders() {

double ldStop=0, ldTake=0;
int spr=MarketInfo(Symbol(), MODE_SPREAD);
double PredBar=iClose(NULL,PERIOD_M5,1);
double pAsk=PredBar+(DistanceSet+spr)*Point;
double pBid=PredBar-(DistanceSet+spr)*Point;

if (!ExistOrder(1)) {
if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
}
if (!ExistOrder(2)) {
if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
}
}
 
Pomid:

Hier müssen wir schwebende Aufträge platzieren und ihre Preise im Verhältnis zum Schlusskurs des vorherigen Balkens berechnen. BUYSTOP wird gesetzt, während SELLSTOP den Fehler 130 zurückgibt. Liegt ein Fehler in diesem Code vor? Oder in einer anderen Funktion.

void SetOrders() {

  double ldStop=0, ldTake=0;
  int    spr=MarketInfo(Symbol(), MODE_SPREAD);
  double PredBar=iClose(NULL,PERIOD_M5,1);
  double pAsk=PredBar+(DistanceSet+spr)*Point;
  double pBid=PredBar-(DistanceSet+spr)*Point;

  if (!ExistOrder(1)) {
    if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
    if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
    SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
  }
  if (!ExistOrder(2)) {
    if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
    if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
    SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
  }
}

Warum wenden Sie sich nicht an den Autor? Er ist noch am Leben und jung, nicht alt! Die Koordinaten stehen im Code über jeder Funktion! Jeder kennt ihn und respektiert ihn!

Und lernen Sie, wie man mit SRC Code wie diesen einfügt!

void SetOrders() {

  double ldStop=0, ldTake=0;
  int    spr=MarketInfo(Symbol(), MODE_SPREAD);
  double PredBar=iClose(NULL,PERIOD_M5,1);
  double pAsk=PredBar+(DistanceSet+spr)*Point;
  double pBid=PredBar-(DistanceSet+spr)*Point;

  if (!ExistOrder(1)) {
    if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
    if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
    SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
  }
  if (!ExistOrder(2)) {
    if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
    if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
    SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
  }
}

Sie haben mit PredBar herumgespielt, ohne es zu verstehen, und das ist das Ergebnis! Lernen Sie zuerst die Mathematik!

 
Guten Abend, bitte teilen Sie mir mit, wie ich das Problem mit dem nicht funktionierenden Indikator in der neuen Version lösen kann. Beim Kompilieren wird der Fehler "TotalOrders" - illegaler Switch-Ausdruckstyp (der Fehler ist im Code hervorgehoben) ausgegeben. Mit freundlichen Grüßen, alexander.
 for (i=0; i<k; i++)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
    {
      if ((OrderSymbol()==Symb) && (OrderType()==op))
        {
            ko++;
            TotalOrders[ChartListPosition+1][ko][1]=NormalizeDouble(OrderOpenPrice(),dig);
            TotalOrders[ChartListPosition+1][ko][2]=NormalizeDouble(OrderStopLoss(),dig);
            TotalOrders[ChartListPosition+1][ko][3]=NormalizeDouble(OrderTakeProfit(),dig);
            TotalOrders[ChartListPosition+1][ko][4]=OrderTicket();
            TotalOrders[ChartListPosition+1][ko][5]=OrderLots();
            TotalOrders[ChartListPosition+1][ko][6]=OrderType();
            TotalOrders[ChartListPosition+1][ko][7]=OrderMagicNumber();
            TotalOrders[ChartListPosition+1][0][0]=ko;
           
              switch(TotalOrders[ChartListPosition+1][ko][6])
              {
               case OP_BUY:
                        Type="Buy";
                break;
                
               case OP_BUYSTOP:
                        Type="Buy Stop";

 for(int j=1;j<=OrdersCount;j++)  
      {
       
         switch(TotalOrders[ChartsListPosition+1][j][6])
          {
           case OP_SELL: 
               if (TotalOrders[ChartsListPosition+1][j][2]!=0 && 
                   ask>=(TotalOrders[ChartsListPosition+1][j][2]-NormalizeDouble(StopLevel*point,dig)))  
                   {
                    test=StopLossColor;
                   } 
                   else
                   {
                   if (TotalOrders[ChartsListPosition+1][j][3]!=0 && 
                       ask<=(TotalOrders[ChartsListPosition+1][j][3]+NormalizeDouble(StopLevel*point,dig)))
                      {
                       test=TakeProfitColor;
                      }
                   }
             break;       
 
karwin:
Guten Abend, könnten Sie mir bitte sagen, wie ich das Problem mit dem nicht funktionierenden Indikator in der neuen Version lösen kann? Beim Kompilieren wird der Fehler "TotalOrders" - illegaler Switch-Ausdruckstyp (der Fehler ist im Code hervorgehoben) ausgegeben. Mit freundlichen Grüßen, alexander.

Die Variable sollte dort stehen und nicht etwas anderes:

              int Переменная=TotalOrders[ChartListPosition+1][ko][6];
              switch(Переменная)
              {
               case OP_BUY:
                        Type="Buy";
                break;
                
               case OP_BUYSTOP:
                        Type="Buy Stop";
 

Hallo Kameraden.

Können Sie mich beraten, ich bin nicht sehr vertraut mit MT5, ich habe kaum jemals verwendet es, während der Prüfung nur ein CPU-Kern beschäftigt ist, ich habe 8 von ihnen, warum ist das? Wie kann ich es reparieren?


 
7Konstantin7:

Hallo Kameraden.

Können Sie mich beraten, ich bin nicht sehr vertraut mit MT5, ich habe kaum jemals verwendet es, während der Prüfung nur ein CPU-Kern beschäftigt ist, ich habe 8 von ihnen, warum ist das? Wie kann ich es reparieren?


Sie sollten im fünften Forum fragen
 
7Konstantin7:

Hallo Kameraden.

Können Sie mich beraten, ich bin nicht sehr vertraut mit MT5, ich habe kaum jemals verwendet es, während der Prüfung nur ein CPU-Kern beschäftigt ist, ich habe 8 von ihnen, warum ist das? Wie kann ich es reparieren?


Ist es für Tests oder für die Optimierung? Wenn Sie nur testen - ein Kern funktioniert, aber wenn Sie die Option "Optimieren" im Strategietester aktivieren, funktionieren alle Kerne des Prozessors.
 
borilunad:

Du hast mit PredBar herumgespielt, ohne es zu verstehen, und das ist das Ergebnis! Lernen Sie zuerst die Mathematik!

Danke, ich habe es gelernt und korrigiert.
 
evillive:
Sie sollten im fünften Forum danach fragen

"Ich bin kein Mitglied der Website, deshalb habe ich die Frage hier gestellt.

barabashkakvn:
Ist das während des Testens oder der Optimierung der Fall? Wenn Sie nur testen - ein Kern funktioniert, aber wenn Sie die Option "Optimieren" in der Strategie-Tester zu aktivieren, werden alle Kerne des Prozessors laufen.

Ich habe alles verstanden, vielen Dank an alle. Während des Tests funktioniert ein Kern und alles funktioniert so, wie es sein sollte,

Ich kann nicht verstehen, warum sie nicht einfach die volle Leistung des Prozessors für den Test genutzt haben.

 
7Konstantin7:

"Ich bin kein Mitglied der Website, deshalb habe ich die Frage hier gestellt.

Ich habe alles verstanden, vielen Dank an alle. Während des Tests funktioniert ein Kern und alles funktioniert so, wie es sein sollte,

Ich kann nicht verstehen, warum sie bei den Tests nicht die gesamte Leistung des Prozessors nutzen.

Und warum sollten wir beim Testen alle Kerne belasten (ohne aktivierte Optimierung)? Denn wenn man mit Visualisierung testet, hat man es nicht eilig, und wenn man ohne Visualisierung testet - so erledigen moderne Computer diese Aufgabe wie Sonnenblumenkerne auf einem einzigen Kern.
Grund der Beschwerde: