[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 409

 
Die Anforderung des Diagramms ist ähnlich wie bei CopyRates ArrayCopySeries, nicht RefreshRates. CopyRates ist die einzige Nicht-Handelsfunktion, die den Server bewegt.
 
Zhunko:
Wenn Sie das Diagramm öffnen und aktualisieren, wird eine Anfrage nach neuen Daten an den Server gesendet. Einige gierige Maklerfirmen geben ihr Geld lieber für ihre eigenen Taschen aus als für leistungsfähigere Server und einen breiteren Kanal. Sie müssen die Anzahl der Anfragen des Terminals begrenzen, damit ein schwacher Server nicht "hängen bleibt". MRC hat nur 2000 Anfragen pro Tag. Es ist 10 Mal weniger als die Anzahl ihrer Instrumente multipliziert mit der Anzahl der TFs, ohne die Handelsanfragen zu zählen.
Nun, wir müssen solche Küchen vermeiden. Das ist das erste Mal, dass ich etwas Negatives über MRC höre. Es bleibt abzuwarten, ob nur das Terminal oder ob die Funktionen auch (außer Handel) den Server ansprechen. Ich habe diese Frage dem Support gestellt (ich habe oben darüber geschrieben, noch keine Antwort). Wenn nicht nur, dann fällt alles an Ort und Stelle, und wenn nur das Terminal, dann geht alles aus absurd, dass die Art von Terminal läuft und es wird den Server zu kontaktieren, um Zitate zu aktualisieren, überschreiten das Limit ohne Handel. Ich halte sie für unzureichend, und dennoch greifen die Funktionen, wie Victor sagte, außer dem Handel, nicht auf den Server zu.

Zhunko:

In MQL4 enthaltene Funktionen helfen, den Code zu straffen. So sieht zum Beispiel ein Indikator für 3000 Zeilen in meinem Code aus.

Die Sache ist die, dass ich Bibliotheken gesehen habe und es in der Dokumentation erwähnt wird, dass Inludes normalerweise ganz oben im Code platziert werden, wo globale Variablen deklariert werden. Wenn es Funktionen in Inludes gibt, erscheint es seltsam, dass an einer Stelle, an der globale Variablen deklariert werden, tatsächlich eine Funktion und alternativ eine Art von Variablen vorhanden ist. So ist der Code nicht geschrieben. Wenn Variablen, die im Expert Advisor verwendet werden, und externe benutzerdefinierte Variablen ganz oben deklariert werden, stellt niemand Funktionen daneben! Aber sie platzieren Einlagen mit Funktionen, und das wird als normal angesehen, so wie ich es verstehe. Das ist es, was mich hier am meisten verwirrt.

Es erscheint einfach nicht logisch...

Andererseits wäre es eine logische und lesbare Sache, wenn anstelle mehrerer Funktionen, die dafür zuständig sind, z.B. ein Handelssignal für ein bestimmtes Attribut zu erhalten, irgendwo eine Inline platziert wird.

Zhunko:

Leider lässt der Compiler nicht zu, dass eine Inklusion mehr als einmal in einem Modul verwendet wird. Dies ist in der Regel ein Weg, um sich wiederholenden Code zu sparen.

Das ist eine Kleinigkeit. Die Hauptsache ist doch, dass man die wichtigsten umständlichen Funktionen und Codefragmente außerhalb des Hauptcodes unterbringt und sie über Inline aufruft. Und dann können Sie die Funktion, die Sie eingefügt haben, über den Funktionsnamen aufrufen... Und Sie müssen sich über diese Einschränkung keine Sorgen machen.
 

Guten Tag zusammen.

Studieren der Funktionen MarketInfo ( ) und Print( )

Hier ist ein einfacher Code, der diese Funktionen verwendet

Tester, TF 60 min.

double T ;
int start()
{
 T = MarketInfo("EURUSD",MODE_HIGH); // в глобальную переменную Т запоминаем максимум дневной свечи,который должна возвращать  MarketInfo ( )
Print (" corresponds to ", T );           //
if ( T > iHigh( Symbol (), 0,10))  // если максимум текущей дневной свечи > High свечи N10(ТФ60 мин)
OrderSend(Symbol(),OP_SELL,0.1,Bid,1,0,0,"jfh",123 ); открыть ордер
}                                                                                                                       
return;

ПРОБЛЕМА 1.Ордер не открывается 2.Print() постоянно возвращает 0 ПРИМЕЧАНИЕ. Для открытия ордера - мне нужной сравнивать параметры свечей разных ТФ(60 мин и 1440 мин.) Подскажите пожалуйста как это можно сделать. Спасибо.

 
Integer:
Die Anforderung aus dem Diagramm sieht aus wie die CopyRates ArrayCopySeries-Anforderung und nicht die RefreshRates-Anforderung. CopyRates ist die einzige Nicht-Handelsfunktion, die den Server bewegt.

Überprüft RefreshRates(). Wenn dieser Expert Advisor z.B. auf EURUSD ausgeführt wird und ein anderes Tool, dessen Fenster lange Zeit nicht geöffnet war, in die Einstellungen eingefügt wird (so dass der Verlauf nicht vorhanden ist), erscheint der Verlauf.

extern string Tool           = "AUDNZD"; // Имя инструмента.
extern bool   IsRefreshRates = true;     // Флаг включения обновления таймсерий.
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start()
 {
  string sTool = Tool; // Имя инструмента.
  if (Tool == "") sTool = Symbol();
  while (!IsStopped())
   {
    if (IsRefreshRates) RefreshRates();
    string sComment = StringConcatenate("MarketInfo()\n",
                                        TimeToStr(MarketInfo(sTool, MODE_TIME), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n",
                                        DoubleToStr(MarketInfo(sTool, MODE_BID), Digits), "  ", DoubleToStr(MarketInfo(sTool, MODE_ASK), Digits),
                                        "\n\nПредопределенные переменные\n",
                                        TimeToStr(Time[0], TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n",
                                        DoubleToStr(Bid, Digits), "  ", DoubleToStr(Ask, Digits),
                                        "\n\nМассивы-таймсерии\n");
    for (int i = 0; i < 10; i++)
     {
      sComment = sComment + StringConcatenate(TimeToStr(iTime(sTool, 0, i), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "  ",
                                              DoubleToStr(iOpen(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iLow(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iHigh(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iClose(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iVolume(sTool, 0, i), 0), "\n");
     }
    Comment(sComment);
    Sleep(300);
   }
 }

RefreshRates() bezieht sich also weiterhin auf den Server und füllt den Verlauf. Folglich ist es notwendig, die Ankunft der Geschichte zu kontrollieren.

Der Support sagt, dass sich keine der Funktionen direkt auf den Server bezieht. Alles wird über das Terminal ausgeführt :-).

 
TarasBY:
Wenn Sie GetProfitFromDateInCurrency() verwenden (Original - das ist WICHTIG: Ich weiß nicht, was Sie in Ihrer Version dort haben könnten), dann sollte die Funktion wie folgt aufgerufen werden:

und die Funktion gibt die Gewinne der seit Beginn des aktuellen Tages abgeschlossenen Aufträge zurück.

Und mit Print() können Sie alle dummen Dinge im Code abfangen.


es funktioniert nicht. Es zeigt alle verfügbaren Gewinne aus den Geschäften für die gesamte Historie an.

Hier ist die ursprüngliche Funktion, an der ich natürlich nichts geändert habe

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит в валюте депозита                  |
//|             закрытых с определённой даты позиций                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (dt<OrderCloseTime()) {
              p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
  }
  return(p);
}

Hier ist der Aufruf und Ausdruck

GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_D1, 0));  
Print(   GetProfitFromDateInCurrency () );
 
Zhunko:

Überprüft RefreshRates(). Wenn dieser Expert Advisor z.B. auf EURUSD ausgeführt wird und ein anderes Tool, dessen Fenster lange Zeit nicht geöffnet war, in die Einstellungen eingefügt wird (so dass der Verlauf nicht vorhanden ist), erscheint der Verlauf.

RefreshRates() bezieht sich also weiterhin auf den Server und füllt den Verlauf. Folglich ist es notwendig, die Ankunft der Geschichte zu kontrollieren.

Der Support sagt, dass sich keine der Funktionen direkt auf den Server bezieht. Also, alles wird über das Terminal erledigt :-)


Vadim, ich habe Ihr Skript auf einem Terminal ausgeführt, auf dem ich außer den Majors und den Crosses mit dem Yen nie irgendwelche Instrumente geöffnet habe. Wie auch immer, hier ist ein Screenshot:

Nichts wird gepumpt, weil das Marktdatenfeld leer ist, den Kommentaren nach zu urteilen...

 
hoz:


Vadim, ich habe Ihr Skript auf einem Terminal ausgeführt, auf dem ich außer den Majors und den Crosses mit dem Yen nie irgendwelche Instrumente geöffnet habe. Wie auch immer, hier ist ein Screenshot:

Es wird nichts hochgepumpt, da das Marktdatenfeld leer ist, den Kommentaren nach zu urteilen...


Ja. Er hat auch nicht bemerkt, dass er MarketInfo() in seinem Expert Advisor hat und nicht nur RefreshRates().
 
Zhunko:

Überprüft RefreshRates(). Wenn dieser Expert Advisor z.B. auf EURUSD ausgeführt wird und ein anderes Tool, dessen Fenster lange Zeit nicht geöffnet war, in die Einstellungen eingefügt wird (so dass der Verlauf nicht vorhanden ist), erscheint der Verlauf.

RefreshRates() bezieht sich also weiterhin auf den Server und füllt den Verlauf. Folglich ist es notwendig, die Ankunft der Geschichte zu kontrollieren.

Der Support sagt, dass sich keine der Funktionen direkt auf den Server bezieht. Also, alles wird über das Terminal erledigt :-)


Der Grad der Vorstellungskraft ist beeindruckend. Warum erscheinen die Daten nur für einige Symbole (die nicht geöffnet wurden) und nicht für alle in der Marktübersicht? Woher wusste die Funktion RefreshRates(), dass einige Symbole aktualisiert werden sollten und andere nicht?

Junko, hör auf zu schwafeln.

 
lottamer:


funktioniert nicht. Gibt alle verfügbaren Gewinne aus Geschäften in der gesamten Historie aus.

Hier ist die ursprüngliche Funktion, an der ich natürlich nichts geändert habe

Hier ist der Aufruf und Ausdruck

GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_D1, 0));  
Print(   GetProfitFromDateInCurrency () );

Es ist also alles korrekt. Sie "lesen" die Funktion Zeile für Zeile und verstehen, wie sie funktioniert, wenn Sie zu gelangweilt sind, sie selbst zu schreiben, und alles wird sich von selbst ergeben...

Sie haben einen Funktionsparameter:

iTime (NULL, PERIOD_D1, 0)

ist derZeitpunkt derÖffnung des letzten Tagesbalkens, d.h. alle Positionen, die vor der Öffnung des aktuellen Tagesbalkens geschlossen wurden, werden berechnet und aufsummiert! Ergibt das einen Sinn? Legen Sie also eine andere Messlatte an, die erforderlich ist oder wie auch immer sie lautet. Aber es liegt an Ihnen, das zu erkennen.

 
Integer:

Ja. Er hat auch nicht bemerkt, dass er MarketInfo() in seinem Expert Advisor hat, nicht nur RefreshRates().


Alle anderen Funktionen:


DoubleToStr(iOpen(sTool, 0, i), Digits), ",
DoubleToStr(iLow(sTool, 0, i), Digits), ",
DoubleToStr(iHigh(sTool, 0, i), Digits), " ",
DoubleToStr(iClose(sTool, 0, i), Digits), ",
DoubleToStr(iVolume(sTool, 0, i), 0), "\n");

Selbstverständlich werden die Daten aktualisiert.