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

 
gyfto:

Nun, theoretisch, wenn zusätzliche Indikatorpuffer selbst deklariert werden und weitere Trendlinien verwendet werden, dann wird es funktionieren...

Warum heißt es dann in der Dokumentation, dass
die Anzahl der Puffer 8 nicht überschreiten darf
, ist nicht klar. Es wird nicht gesagt, dass es sich um die Anzahl der Hauptpuffer handelt, sondern um die Anzahl aller Puffer. Hier steht die Anzahl der Puffer und das war's. Ich lese das hier, und es ist mein Verständnis, dass dies für die Gesamtzahl der Puffer für einen bestimmten Indikator gelten sollte.
 
gyfto:

Nein, ich spreche von ObjectCreate(), dort müssen Sie die Fensternummer setzen. Ich habe Ihnen gezeigt, wie Sie es einstellen können, wenn es sich um ein Unterfenster handelt (d. h. nicht um Null, was das Hauptfenster ist).

Sie haben dort also den Funktionsparameter WindowOnDropped, wenn Sie ein Objekt erstellen, und das ist bereits so etwas wie das Hauptfenster relativ. Oder ist das Hauptfenster dasFenster ganz links im Terminal?
 

Hallo! Ich verstehe nicht, warum die Buystop-Aufträge nicht gelöscht werden.

extern double Lots       =0.01;
extern int    Magic      =333;

extern int    StopLoss      = 100;      // Размер фиксированного стопа
extern int    TakeProfit    = 100;       // Размер фиксированного тэйка
extern int    DistanceSet   = 160;      // Расстояние от рынка
extern int    Slippage      = 3;       // Проскальзывание цены
color  clOpenBuy     = LightBlue;    // Цвет ордера BuyStop
color  clOpenSell    = LightCoral;   // Цвет ордера SellStop
string Name_Expert   = "Scalp";

string Symb;
bool Work=true;

extern bool   UseSound       = True;  // Использовать звуковой сигнал
extern string NameFileSound  = "expert.wav";  // Наименование звукового файла
//============================================================================================
int start()
  {
   int
   Total,
   Tip=-1,
   Ticket,
   TicketB,
   TicketS,
   TicketMB,
   TicketMS,
   buys,
   sells,
   mbuys,
   msells;
   double
   OP_PriceSell,
   OP_PriceBuy, 
   Lot,
   Lts,
   Min_Lot,
   Max_Lot,
   Step,
   Free,
   One_Lot,
   Price,
   SL,
   TP,
   TP1,
   PriceB,
   PriceS,
   SLB,
   SLS;
   bool
   Ans  =false,
   Opn_B=false,
   Opn_S=false,
   Cls_B=false,
   Cls_S=false;
//============================================================================================
   // Учёт ордеров
   Symb=Symbol();
   Total=0;
   buys=0;
   sells=0;
   mbuys=0;
   msells=0;                                    
   for(int i=1; i<=OrdersTotal(); i++)
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true)
        {
         Total++;
         if(OrderType()==OP_BUYSTOP)  buys++;
         if(OrderType()==OP_SELLSTOP) sells++;
         if(OrderType()==OP_BUY)  mbuys++;
         if(OrderType()==OP_SELL) msells++;
         if(OrderType()==OP_BUYSTOP) TicketB=OrderTicket();
         if(OrderType()==OP_SELLSTOP) TicketS=OrderTicket(); 
         Ticket=OrderTicket();
         Tip   =OrderType();
         TP    =OrderTakeProfit();
         Lot   =OrderLots();
        }
     }
//============================================================================================
   // Открытие ордеров
   while(true)                                  
     {
      if (Total==0)            
        {                                      
         star();
        }
      break;                                   
     }
//============================================================================================
  while(true)
     {
      if(Total==2)
        {
         if(msells==1)
           {
            if(buys==1)
              {
               if(OrderType()==OP_BUYSTOP && OrderLots()==Lots)
                 {
                  OrderDelete(Ticket);
                 }
              }
           }
        }
      if(Total==2)
        {
         if(mbuys==1)
           {
            if(sells==1)
              {
               if(OrderType()==OP_SELLSTOP && OrderLots()==Lots)
                 {
                  OrderDelete(Ticket);
                 }
              }
           }
        }
      break;
     }  
//============================================================================================
   return;
  }
//============================================================================================
//+------------------------------------------------------------------+
void star() {
  double ldStop=0, ldTake=0;
  double pAsk=Ask+DistanceSet*Point;
  double pBid=Bid-DistanceSet*Point;

  if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
  if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
  SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake);

  if (StopLoss!=0) ldStop=pBid+StopLoss*Point;
  if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
  SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake);
}

//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//| Параметры:                                                       |
//|   op     - операция                                              |
//|   pp     - цена                                                  |
//|   ldStop - уровень стоп                                          |
//|   ldTake - уровень тейк                                          |
//+------------------------------------------------------------------+
void SetOrder(int op, double pp, double ldStop, double ldTake) {
  color  clOpen;
  string lsComm=GetCommentForOrder();

  if (op==OP_BUYSTOP) clOpen=clOpenBuy;
  else clOpen=clOpenSell;
  OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,0,0,clOpen);
  if (UseSound) PlaySound(NameFileSound);
}

//+------------------------------------------------------------------+
//| Генерирует и возвращает строку коментария для ордера или позиции |
//+------------------------------------------------------------------+
string GetCommentForOrder() {
  return(Name_Expert+" "+GetNameTF(Period()));
}

//+------------------------------------------------------------------+
//| Возвращает наименование таймфрейма                               |
//+------------------------------------------------------------------+
string GetNameTF(int TimeFrame) {
        switch (TimeFrame) {
                case PERIOD_MN1: return("Monthly");
                case PERIOD_W1:  return("Weekly");
                case PERIOD_D1:  return("Daily");
                case PERIOD_H4:  return("H4");
                case PERIOD_H1:  return("H1");
                case PERIOD_M30: return("M30");
                case PERIOD_M15: return("M15");
                case PERIOD_M5:  return("M5");
                case PERIOD_M1:  return("M1");
                default:                     return("UnknownPeriod");
        }
}
//+------------------------------------------------------------------+
 
hoz:

Warum heißt es dann in der Dokumentation, dass
die Anzahl der Puffer 8 nicht überschreiten darf
? Es wird nicht die Anzahl der Hauptpuffer angegeben... nicht alle Puffer. Hier steht die Anzahl der Puffer und das war's. Ich lese es so, dass es für die Gesamtzahl der Puffer eines bestimmten Indikators gelten soll.

Ich spreche nicht von den Indikatorpuffern, ich spreche von den simulierten Indikatorpuffern. Und dort ArrayResize(CustomBuffer, Bars) im Wrapper von IndicatorCounted(), und die Enden der Trendlinien ganz rechts sollten von Bid neu gezeichnet werden.

hoz:

Sie haben dort also einen Funktionsparameter, wenn Sie ein Objekt erstellen - WindowOnDropped, und das ist bereits so etwas wie das Hauptfenster relativ. Oder ist das Hauptfenster ganz linksunter den Fenstern des Terminals?
Nein, ich war anfangs auch verwirrt. Wir haben zum Beispiel zwei Charts geöffnet, Euron und Gold. Sie haben also beide einen Index von Null. Wenn sie jedoch Unterfenster haben, werden sie von eins an nummeriert. Zum Beispiel habe ich drei Indizes auf den eurenne Chart geworfen, zwei auf Gold, und alle fünf mit #property separate_window und alle verschiedenen Unterfenster. Dann wird eurene die Fensternummern 0, 1, 2, 3 und gold 0, 1, 2 haben.
 

Ich habe eine Frage. Ehrlich gesagt, mein Hirn kocht. Wenn Sie können - helfen Sie mir.

int n=1, limit=3;
double result;//или int result, что не столь сейчас важно
double temp[];
int start(){
        for(int slow=10; slow<=10*limit; slow++){
                for(int fast=10; fast<=slow; fast++){
                        for(int period=1; period<=slow/10; period++){
                                n++; Print(n-1, ": ", slow-9, ", ", fast-9, ", ", period);
                                //здесь идёт тестирование машки с параметрами slow, fast, period, а результаты тестирования заносим в массив:
                                ArrayResize(temp,n); temp[n-1]=result;
                        }
                }
        }
        //и находим максимальный результат:
        int max=ArrayMaximum(temp);
   return(0);
}

Nun eine Frage: Wie kann ich die Werte von langsam, schnell, Periode durch max (die Position eines Elements im Array ist) wiederherstellen? Die Reihenfolge, in der die Werte in temp[] abgelegt werden, wird in Print() angegeben. Ich habe 3 als Grenze angegeben, aber es kann jede beliebige Zahl verwendet werden. Hier sind die ersten 77 Werte (Limit=2):

            10: 4, 4, 1  20: 6, 5, 1  30: 8, 2, 1  40: 9, 4, 1   50: 10, 5, 1   60: 11, 3, 1  70: 11, 8, 1
1: 1, 1, 1  11: 5, 1, 1  21: 6, 6, 1  31: 8, 3, 1  41: 9, 5, 1   51: 10, 6, 1   61: 11, 3, 2  71: 11, 8, 2
2: 2, 1, 1  12: 5, 2, 1  22: 7, 1, 1  32: 8, 4, 1  42: 9, 6, 1   52: 10, 7, 1   62: 11, 4, 1  72: 11, 9, 1
3: 2, 2, 1  13: 5, 3, 1  23: 7, 2, 1  33: 8, 5, 1  43: 9, 7, 1   53: 10, 8, 1   63: 11, 4, 2  73: 11, 9, 2
4: 3, 1, 1  14: 5, 4, 1  24: 7, 3, 1  34: 8, 6, 1  44: 9, 8, 1   54: 10, 9, 1   64: 11, 5, 1  74: 11, 10, 1
5: 3, 2, 1  15: 5, 5, 1  25: 7, 4, 1  35: 8, 7, 1  45: 9, 9, 1   55: 10, 10, 1  65: 11, 5, 2  75: 11, 10, 2
6: 3, 3, 1  16: 6, 1, 1  26: 7, 5, 1  36: 8, 8, 1  46: 10, 1, 1  56: 11, 1, 1   66: 11, 6, 1  76: 11, 11, 1
7: 4, 1, 1  17: 6, 2, 1  27: 7, 6, 1  37: 9, 1, 1  47: 10, 2, 1  57: 11, 1, 2   67: 11, 6, 2  77: 11, 11, 2
8: 4, 2, 1  18: 6, 3, 1  28: 7, 7, 1  38: 9, 2, 1  48: 10, 3, 1  58: 11, 2, 1   68: 11, 7, 1
9: 4, 3, 1  19: 6, 4, 1  29: 8, 1, 1  39: 9, 3, 1  49: 10, 4, 1  59: 11, 2, 2   69: 11, 7, 2
 
gyfto:

Ich habe eine Frage. Ehrlich gesagt, mein Hirn kocht. Wenn Sie können - helfen Sie mir.

Jetzt eine Frage: wie kann ich Werte langsam, schnell, Zeitraum durch max (die Position eines Elements in der Anordnung ist) wiederherstellen? Die Reihenfolge, in der die Werte in temp[] abgelegt werden, wird in Print() angegeben. Ich habe 3 als Limit angegeben, aber es kann eine beliebige Zahl sein.


Bei "n++" wird geprüft, ob das Ergebnis maximal ist; wenn es maximal ist, werden die Werte für langsam, schnell usw. gespeichert.
 
Man könnte drei weitere Arrays (oder ein dreidimensionales Array) für langsame, schnelle... Dies ist besser, denn falls Sie die Ergebnisse irgendwie sortieren wollen, stehen Ihnen immer Testparameter zur Verfügung.
 
Wenn diese Aktionen häufig sind, z.B. einmal pro Balken oder 10 Balken, ist es besser, Arrays für Ergebnisse und drei Arrays mit Parameterwerten im Initem zu skalieren, durch diese Schleifen zu blättern und die Arrays mit Periodenwerten zu füllen. Dann scrollen Sie alles in einer Schleife. Dann können wir die Funktion ArrayMaximum verwenden und die Dinge in Ordnung bringen. Dies wird die Arbeit so schnell wie möglich machen.
 
gyfto:

Nein, ich war anfangs auch verwirrt. Wir haben zum Beispiel zwei Charts geöffnet, den Euro und den Goldpreis. Sie haben also beide einen Index von Null. Wenn sie jedoch Unterfenster haben, werden sie von eins an nummeriert. Zum Beispiel habe ich drei Indizes auf den eurenne Chart geworfen, zwei auf Gold, und alle fünf mit #property separate_window und alle verschiedenen Unterfenster. Dann hätte das Eurene die Fensternummern 0, 1, 2, 3 und das Gold die Nummern 0, 1, 2.

Ganz genau! Ich arbeite einfach nicht mit Puten, deshalb habe ich nicht darauf geachtet, als ich die Hilfe studierte. Das macht alles Sinn.

gyfto:

Ich spreche nicht von Indikatorpuffern, ich spreche von simulierten Indikatorpuffern. Dort ArrayResize(CustomBuffer, Bars) im Wrapper von IndicatorCounted(), und die Enden der Trendlinien ganz rechts sollten von Bid neu gezeichnet werden.

Und ich habe speziell gefragt, wie man mehr als 6 Linien in ein Diagramm einzeichnet. In welchem Fenster (0 oder anders, das spielt keine Rolle). Das ist es, was mich im Moment am meisten interessiert, und das war auch meine ursprüngliche Frage.
 
Integer:

Bei "n++" wird geprüft, ob das Ergebnis maximal ist, wenn es maximal ist, werden die Werte für langsam, schnell usw. gespeichert.

Daran habe ich nicht gedacht.


Integer:
Sie können drei weitere Arrays (oder ein dreidimensionales Array) für langsame, schnelle... Das ist besser, denn für den Fall, dass Sie die Ergebnisse irgendwie sortieren wollen, sind immer Testparameter verfügbar.

Dreidimensional ist ideal, aber ArrayMaximum() funktioniert nur eindimensional, so dass Sie das Array in ein lineares konvergieren müssen, und wieder müssen Sie herausfinden, wo alles ist. Aber ich habe fastMax=slow, und das ist das Problem. Aber drei verschiedene Arrays... Ich habe das gleiche Ergebnis, es ist also entweder ein dreidimensionales oder ein lineares.


Integer:
Skalenarrays für Ergebnisse

Ich kenne diese Terminologie nicht, bitte erklären Sie sie. Eine lineare Anordnung der Länge in einem Würfel erstellen?


Nun, zumindest gibt es bereits eine Option. Über MathMax(result, resultPrev).