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

 
Tema97:

Was soll ich jetzt tun? Ich habe eine kanalbasierte Strategie - gibt es einen alternativen Ersatz?

Natürlich gibt es das. Berechnen Sie die Werte, speichern Sie sie in einem Array oder einer Struktur, und verwenden Sie sie für Ihren EA. Und Sie können die Objekte auch von dort aus zeichnen - die Werte sind verfügbar.
 
Tema97:

Was soll ich jetzt tun? Ich habe eine kanalbasierte Strategie - gibt es einen alternativen Ersatz?

Was gibt es da einzubauen? Abfrage des Indikators über iCustom.
Für den Verkauf können Sie mit#resource einbetten
 
Ich möchte Folgendes umsetzen
die Möglichkeit, verschiedene Zeitrahmen zu EINEM Blatt hinzuzufügen (in verschiedenen Fenstern, aber auf einem Blatt)
Bitte beraten Sie mich, wohin ich gehen und wo ich graben soll). Ist dies über mql oder WInApi möglich?
vielleicht gibt es Beispiele für den Artikel, die ich nicht finden konnte(
 
kocunyc89:

Bitte helfen Sie mir, dies zu beheben! Es gibt Fehler 'Void' - Erklärung ohne Typ 36 4 und wo sollte ich neu anordnen oder schreiben Sie zurück?
//--------------------------------------------------------------------
Void OnTick()
{

void wird mit einem kleinen Kleinbuchstaben statt mit einem Großbuchstaben geschrieben. Sehen Sie, es ist eine andere Farbe. Setzen Sie den Cursor auf dieses Wort und drücken Sie F1 - das hilft oft.

Nach der Reparatur erscheinen so viele Fehlermeldungen... Ich habe die Fehlermeldungen behoben, aber überprüfen Sie die Logik selbst

#property strict

bool Результат;

extern int   SL             = 200,      //Стоплосс в пунктах
             TStop          = 20,       //
             TStep          = 10,       //
             TP             = 85;       //Тейкпрофит в пунктах
//extern double Lot          = 0.10;     //используется только при risk = 0
extern double Lots           =  0;       // лот, если 0, то динамический
extern double RiskPercentage =  50;      // % от депо на лот, если динамический
extern int    MaxOrders      = 6;        //Максимальное кол-во ордеров одного направления

//--------------------------------------------------------------------
int STOPLEVEL,Magic=123321,tip;
datetime TimeBar;

string txt;
//--------------------------------------------------------------------
int init()
{
   if(Digits==3||Digits==5)
   {
      TStop *=10;
      TStep *=10;
      SL    *=10;
   }
   return(INIT_SUCCEEDED);
}


//--------------------------------------------------------------------
void OnTick()
{
  double Lot = Lots;
  int Ticket = 0;
  if (Lots==0)
  {
    double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
    double minLot = MarketInfo(Symbol(), MODE_MINLOT);
    double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
    double step   = MarketInfo(Symbol(), MODE_LOTSTEP);
    double account = AccountFreeMargin();
    double percentage = account*RiskPercentage/100;
  
    Lot = MathRound(percentage/margin/step)*step;
  
    if(Lot < minLot) Lot = minLot;

    if(Lot > maxLot)Lot = maxLot;
  }

  int buy=0,sell=0;
  for (int i=0; i<OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         tip=OrderType();
         if (tip==0) buy++;
         if (tip==1) sell++;
    }  
  }

  Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",buy,"\nSel ",sell);
  double TrPr=0,StLo=0;
  double L    = NormalizeDouble(Low[0], Digits);
  double L1   = NormalizeDouble(Low[1], Digits);
  double L2   = NormalizeDouble(Low[2], Digits);
  double L3   = NormalizeDouble(Low[3], Digits);

  double H   = NormalizeDouble(High[0],Digits);
  double H1  = NormalizeDouble(High[1],Digits);
  double H2  = NormalizeDouble(High[2],Digits);
  double H3  = NormalizeDouble(High[3],Digits);

  double O   = NormalizeDouble(Open[0], Digits);
  double O1  = NormalizeDouble(Open[1], Digits);
  double O2  = NormalizeDouble(Open[2], Digits);
  double O3  = NormalizeDouble(Open[3], Digits);

  double C   = NormalizeDouble(Close[0],Digits);
  double C1  = NormalizeDouble(Close[1],Digits);
  double C2  = NormalizeDouble(Close[2],Digits);
  double C3  = NormalizeDouble(Close[3],Digits);

                         //LONG
  if (buy<MaxOrders  && TimeBar!=Time[0]&& H>H1&&H1>H2&&H2>H3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Blue);
    if (Ticket==0)
    Print("Error BUY",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
      TimeBar=Time[0];
    }
  }

                                  //SHORT
  if (sell<MaxOrders && TimeBar!=Time[0]&& L>L1&&L1>L2&&L2>L3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Red);
    if (Ticket==0)
    Print("Error SELL",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Red);
      TimeBar=Time[0];
    }
  }

  Trailing();
}
//!!! куда передвинуть?   return(0);


void Trailing()
{
  for(int i=OrdersTotal() -1; i>=0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
      if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      {
        if(OrderType()==OP_BUY)
        {
          if (Bid-OrderOpenPrice()> TStop*Point || OrderStopLoss() ==0)
          {
            if(OrderStopLoss()<Bid-(TStep+TStop)*Point || OrderStopLoss() ==0)
            {
              if(!OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(Bid-TStop*Point, Digits),0,0))
              Print("Ошибка модификации ордера на покупку");
            }
          }
        }

        if(OrderType()==OP_SELL)
        {
          if (OrderOpenPrice()-Ask>TStop*Point || OrderStopLoss() ==0)
          {
            if((OrderStopLoss()> (Ask+(TStep+TStop)*Point))  || (OrderStopLoss()==0)  )
            {
              if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TStop*Point,Digits),0,0))
                {
                        Print("Ошибка модификации ордера на продажу");
                }
            }
          }
        }
      }
    }
  }
}

 
LRA:

void wird klein geschrieben, nicht groß. Schauen Sie nach, ob sie eine andere Farbe hat. Setzen Sie den Cursor auf dieses Wort und drücken Sie F1 - das hilft oft.

Nach der Reparatur erscheinen so viele Fehlermeldungen... Die Fehlermeldungen wurden behoben, aber überprüfen Sie die Logik selbst


Vielen Dank, lieber Mann!

 
Hallo, meine Herren Händler! Ich habe einen Signalroboter geschrieben, der auf dem Code basiert, den ich oben gepostet habe. Der Roboter erzeugt Signale für Optionen fast genau, aber mit einer Verzögerung von zwei Balken. Was sollte ich im Code ändern, um die gleichen Ergebnisse zu erzielen, aber zwei Takte früher? Oder ist das unmöglich? Ich danke Ihnen.
 
Können Sie mich bitte beraten - ich habe einen benutzerdefinierten Indikator - Kanal - ich brauche, um den Wert der oberen Grenze des Kanals zurückgeben - wie man dies tun?
 
artmedia70:

Die Variable int enthält genau die Anzahl der Sekunden seit 1970, während die Variable datetime das Datum enthält.

Wenn Sie einen bestimmten Balken in der Historie benötigen, spielt es keine Rolle, wie Sie ihn spezifizieren - durch das Datum oder durch die Anzahl der Sekunden, in jedem Fall wird die Variable den Zeitpunkt der Öffnung dieses bestimmten Balkens anzeigen, unabhängig von der Ankunft neuer Ticks und der Öffnung neuer Balken.

Vielen Dank, aber es gibt noch ein Problem. Ich habe Indikator, der stat-Funktion hat, sollte diese Funktion NUR verwendet werden, wenn neue Signal ankommt, aber dieses Problem ist auf jedem bar zählen, ich habe alles getan und normalisiert die doble im Vergleich, so ich denke, ich bin geschraubt. Das hat mir den ganzen Abend vermiest, kann mir jemand erklären, was los ist ???? Indikator in der Atache in der 193 Zeile ist ein Funktionsaufruf mit einer Bedingung, aber die Bedingung ist nicht erfüllt und Furction stat ist bei der Ankunft von jedem bar berechnet, ich bin schon gelangweilt, um den Fehler zu finden, Jungs helfen bitte helfen!!!!! Vielen Dank im Voraus....
Dateien:
 

Ich habe erst jetzt herausgefunden, dass die Statistikfunktion neu berechnet wird, wenn der Indikator von einem anderen Indikator aus aufgerufen wird, wenn sich beide im Diagramm befinden. Das heißt, er wird einmal für sich selbst berechnet und das zweite Mal für den Indikator, der ihn aufruft. Was ist das?

 

Auf dem Bild ist Folgendes zu sehen. Der Kommentar oben ist der Pufferwert im Hauptindikator, in dem die Berechnung stattfindet, und der Ausdruck (unten) ist derselbe Puffer, der jedoch nur in einem anderen Indikator aufgerufen und im Ausdruck ausgegeben wird. Der Unterschied ist beträchtlich, ABER WIE!!!!!

die erste Datei ist die Hauptdatei, die zweite ruft den Puffer der ersten Datei auf....

Dateien: