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

 

Hallo, ich bin an dieser Frage interessiert. Bietet alpari einen Server an, auf den Sie Ihren Berater hochladen können, damit er rund um die Uhr arbeiten kann? Wären Sie so freundlich, mir persönlich zu antworten?

 
gheka:

Es funktioniert nicht, vielleicht muss ich hier etwas ändern oder es nach dem Start einfügen.

Ich habe versucht, Ihren Code auf Papier ins Russische zu übersetzen, das ich verstehe, aber es funktioniert nicht,

Es ist zu kompliziert, vor allem, wenn die Bedingungen in jeder Bedingung aufeinander folgen, und eine Bedingung von acht Bedingungen.

Natürlich bestreite ich nicht, dass derjenige, der diesen Code geschaffen hat, ein Wunder ist, aber für mich ist es eine komplette Perversion (auf eine gute Art und Weise)

Ich bin nicht zu faul, zu jeder Operation und Bedingung Kommentare hinzuzufügen, außer bei der Standardfunktion.


Der Code enthält einige Redundanzen, ist aber lesbar.

 
Frage zum Ändern von Zeiträumen im Programm ... Zum Beispiel gibt es eine bestimmte Abfolge von Operatoren, die auf verschiedene Zeiträume angewandt werden sollten ... soweit ich weiß, ist es einfacher, dies in Form eines Zyklus zu tun ... indem man den Zeitraum ändert... Ich finde eine Funktion in der Dokumentation, die einen Periodenwert zurückgibt ... aber ich kann keine Funktion finden, um ihn zu ändern ... was mache ich falsch?
 

Irgendetwas funktioniert bei Ihnen nicht, nicht dieser Code... :)

bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {// Объявление функции. Передаваемые параметры: sy = символ, op - тип, mn - магик
  datetime t;                                                  // Переменная содержит время закрытия ордера
  double   ocp, osl;                                           // ocp - цена закрытия позиции, osl - цена СтопЛосс закрытой позиции
  int      dg, i, j=-1, k=OrdersHistoryTotal();                // k содержит общее количество ордеров в истории

  if (sy=="0") sy=Symbol();                                 // Если в ф-цию передан sy равный 0 или NULL, то использовать символ графика
  for (i=0; i<k; i++) {                                     // Цикл по массиву закрытых ордеров
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {      // Если выбран ордер из массива закрытых ордеров, ...
      if (OrderSymbol()==sy || sy=="") {                    // ... если его символ совпадает с нашим, ...
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {  // ... если его тип Бай или Селл, ...
          if (op<0 || OrderType()==op) {                // ... если тип ордера равен или -1 (имеется ввиду любой) или равен переданному в ф-цию, ...
            if (mn<0 || OrderMagicNumber()==mn) {       // ... если его магик или любой (-1) или равен переданному в ф-цию (магику советника), ...
              if (t<OrderCloseTime()) {    // ... если переменная t содержит время закрытия меньше, чем время закрытия выбранного ордера, то ...
                t=OrderCloseTime();        // ... то присвоим переменной t время закрытия выбранного ордера (этот ордер закрыт позже предыдущего)
                j=i;                                        // Запишем в переменную j индекс найденного ордера с максимальным временем закрытия
              }
            }
          }
        }
      }
    }
  }                                                       // По окончании цикла в переменной j находится индекс последнего закрытого ордера
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {      // Выберем его по индексу
    dg=MarketInfo(sy, MODE_DIGITS);                       // Количество цифр после десятичного точки в цене инструмента, заданного переменной sy
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2; // Честно... точно не скажу, но вижу, что корректировка под йену
    ocp=NormalizeDouble(OrderClosePrice(), dg);           // Нормализуем цену закрытия ордера для дальнейшего сравнения с ценой СтопЛосс
    osl=NormalizeDouble(OrderStopLoss(), dg);             // Нормализуем цену СтопЛосс ордера для сравнения с ценой закрытия
    if (ocp==osl) return(True);                           // Если эти цены равны, значит поза закрыта по стопу, возвращаем значение "Истина"
  }
  return(False);                                          // Возвращаем "Ложь"
}

Das ist die ganze Logik... Viktor hatte Recht - es ist überflüssig, aber so einfach wie möglich... :)

 
Skopcheny:
Frage zur Änderung des Zeitraums im Programm ... zum Beispiel gibt es eine bestimmte Abfolge von Operatoren, die auf verschiedene Zeiträume angewandt werden sollten ... soweit ich weiß, ist es einfacher, dies in Form einer Zeitleiste zu tun ... indem man den Zeitraum ändert... Ich finde in der Dokumentation eine Funktion, die einen Periodenwert zurückgibt... aber ich kann keine Funktion finden, um ihn zu ändern... was mache ich falsch?

Die Periode des Diagramms kann einen der folgenden Werte annehmen:

Konstante Wert Beschreibung
PERIOD_M1 1 1 Minute
PERIOD_M5 5 5 Minuten
PERIOD_M15 15 15 Minuten
PERIOD_M30 30 30 Minuten
PERIOD_H1 60 1 Stunde
PERIOD_H4 240 4 Stunden
PERIOD_D1 1440 1 Tag
PERIOD_W1 10080 1 Woche
PERIOD_MN1 43200 1 Monat
0 (Null) 0 Zeitraum der aktuellen Grafik
 
Vielen Dank, ich brauche nur etwas Klarheit ... Reicht es aus, für eine Gruppe von Marktteilnehmern, die an einem bestimmten Zeitraum arbeiten sollen, einen der Zeiträume anzugeben, wie sie in dieser Tabelle aufgeführt sind?
 
Skopcheny:
Vielen Dank, ich brauche nur etwas Klarheit ... Reicht es für eine Gruppe von Marktteilnehmern, einen bestimmten Zeitraum zu bearbeiten, aus, nur einen der Zeiträume anzugeben, wie sie in dieser Tabelle aufgeführt sind?
Um Ihre Frage richtig beantworten zu können, müssen Sie zumindest ein Beispiel für einen Code sehen, in dem Sie einen bestimmten Zeitraum angeben müssen...
 
artmedia70:
Um Ihre Frage richtig beantworten zu können, müssen Sie zumindest einen Beispielcode sehen, in dem Sie speziell den Zeitraum festlegen müssen...


string trend()
{int count,count_change;
double bar_centr;
string trend;
bool clear;
for (int i=10;i!=0;i--)
{
bar_centr = (High[i]-Low[i])/2+Low[i]);
if (bar_centr>((High[i+1]-Low[i+1])/2+Low[i+1])
count++;

if (bar_centr<((High[i+1]-Low[i+1])/2+Low[i+1])
count--;
}

Print (count, "period ",Period());


if (count>3) trend="buy";
if (count<-3) trend="sell";
if (count<3||count>-3) trend="uncertain";





return(trend);}

diese Funktion muss nacheinander auf verschiedene Zeiträume angewendet werden ... Es funktioniert, wenn ich es mit Windows im Terminal mit verschiedenen Zeitfenstern verbinde ... Die Frage ist, ob es für EA möglich ist, mehrere verschiedene Zeiträume zu verwalten ...

 
Skopcheny:


diese Funktion muss nacheinander auf verschiedene Zeiträume angewendet werden ... Es funktioniert, wenn ich den EA mit Windows im Terminal mit verschiedenen Zeiträumen verbinde ... Die Frage ist, ob es für EA möglich ist, mehrere verschiedene Zeiträume zu verwalten ...

Ich verstehe, dass Sie möchten, dass Ihre Funktion nicht nur mit dem aktuellen Diagramm und der aktuellen Periode arbeitet, sondern mit jeder beliebigen Periode, die ihr übergeben wird ...

string trend(string sy="", int tf=0)
{
   int count,count_change;
   double bar_centr;
   string trend;
   bool clear;

   if (sy=="" || sy=="0") sy=Symbol();      
   if (tf==0) tf=Period();
   
   for (int i=10; i>0; i--)
      {
         bar_centr = (iHigh(sy,tf,i)-iLow(sy,tf,i))/2+iLow(sy,tf,i);
         if (bar_centr>((iHigh(sy,tf,i+1)-iLow(sy,tf,i+1))/2+iLow(sy,tf,i+1)))
            count++;
         if (bar_centr<((iHigh(sy,tf,i+1)-iLow(sy,tf,i+1))/2+iLow(sy,tfi+1)))
            count--;
      }

   Print (count,"период ",tf);

   if (count>3) trend="покупка";
   if (count<-3) trend="продажа";
   if (count<3||count>-3) trend="неопределенность";

   return(trend);
}

Rufen Sie nun Ihre Funktion wie folgt auf

trend(Symbol(), Periode()); // Es werden Werte für den Chart und die Periode zurückgegeben, in denen sich der EA bewegt...

trend(USDJPY, PERIOD_D1); // Gibt Werte für das Symbol USDJPY und den Zeitraum "1 Tag" zurück

Anstelle von PERIOD_D1 können Sie auch 1440 eingeben - das Ergebnis ist dasselbe...

Wird sie ohne Parameter aufgerufen, gibt die Funktion Werte für das aktuelle Symbol und die Periode zurück (sie sind standardmäßig gesetzt)

 
artmedia70:

Ich verstehe, dass Sie möchten, dass die Funktion nicht nur mit dem aktuellen Graphen und Zeitraum arbeitet, sondern mit jedem beliebigen Graphen, der ihr übergeben wird...

Rufen Sie nun Ihre Funktion wie folgt auf:

trend(Symbol(), Periode()); // Es werden Werte für den Chart und die Periode zurückgegeben, in denen sich der EA bewegt...

trend(USDJPY, PERIOD_D1); // Gibt Werte für das Symbol USDJPY und den Zeitraum "1 Tag" zurück

Anstelle von PERIOD_D1 können Sie auch 1440 eingeben - es ist dasselbe...




umfassende Antwort... vielen Dank ...