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

 

Lieber, ich brauche etwas Hilfe.

Ich habe den Code für die Buchhaltung, das Öffnen und Schließen von Aufträgen aus dem Tutorial (tradingexpert.mq4) übernommen. Der Code ist für eine Position gedacht, ich benötige aber fünf Positionen.

Wir haben den Code wie folgt leicht modifiziert (geänderte Zeilen in Fettdruck), so dass die Positionen in der richtigen Menge geöffnet werden, aber wenn wir umkehren, wird nur eine Position geschlossen und die umgekehrte wird sofort geöffnet.

Wie kann ich es so einrichten, dass alle Positionen bei der Umkehrung geschlossen werden und dann nur die gegenüberliegende Position geöffnet wird?

   // Учёт ордеров
   Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>5)                           // Было не более одного орд, стало не более пяти
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
   // Открытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if (Total < 5 && Opn_B==true)     // Открытых орд. нет +. Было Total < 1, стало Total < 5
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         SL=Bid - New_Stop(StopLoss)*Point;     // Вычисление SL откр.
         TP=Bid + New_Stop(TakeProfit)*Point;   // Вычисление TP откр.
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Открытие Buy
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Buy ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
   // Закрытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if (Tip==0 && Cls_B==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         Ans=OrderClose(Ticket,Lot,Bid,2);      // Закрытие Buy
         if (Ans==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Buy ",Ticket);
            break;                              // Выход из цикла закр
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
 
Forexman77:

Lieber, ich brauche etwas Hilfe.

Ich habe den Code für die Buchhaltung, das Öffnen und Schließen von Aufträgen aus dem Tutorial (tradingexpert.mq4) übernommen. Der Code ist für eine Position gedacht, ich benötige aber fünf Positionen.

Wir haben den Code wie folgt leicht modifiziert (geänderte Zeilen in Fettdruck), so dass die Positionen in der richtigen Menge geöffnet werden, aber wenn wir umkehren, wird nur eine Position geschlossen und die umgekehrte wird sofort geöffnet.

Wie kann ich es so einrichten, dass alle Positionen bei der Umkehrung geschlossen werden und dann nur die gegenüberliegende Position geöffnet wird?


Machen Sie Ticket zu einem Array Ticket[5] und speichern Sie alle 5 Tickets darin. Gehen Sie beim Schließen alle Tickets entsprechend durch.
 
Vinin:

Der Grad der Nutzung der Bibliotheken macht Sie nicht zu einem Anfänger. Nachdem ich mir Ihren Code angesehen habe, würde ich zwei Wochen brauchen, um ihn zu verstehen. Wenn nicht mehr. Ich denke also, dass Sie keine Antwort erhalten werden.
Vitya, es gibt keinen Grund, irgendetwas zu verstehen - der Mann will globale Variablen aus einer "Sandbox" (EA mit seinen Bibliotheken) in der anderen "Sandbox" (kompilierte Bibliothek) sichtbar machen. :)))
 

Ich bin kein Programmierer, ich bin ein Code-Builder. So baute ich diesen Indikator (ich sehe, dass Sie einen Text Exposition tun können, nicht eine Datei t-das ist, was ich tun werde, um es leichter zu verstehen.

#property indicator_separate_window
#property indicator_buffers 1
#property  indicator_color1 Lime

//--------------------------------------------------------------------
double Buffer[];
//--------------------------------------------------------------------

int init()
{
SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, 2);
SetIndexBuffer(0,Buffer);
return(0);
}
// -------------------------------------------------------------------

int deinit()
{
return(0);
}
//--------------------------------------------------------------------

int start()
{
int StartBar = Bars - IndicatorCounted() - 1;
for(int i = StartBar; i >= 0; i--)
{
if(TimeDayOfWeek(Time[i]) < TimeDayOfWeek(Time[i+1]))
Buffer[i] = 0;
else
Buffer[i] = Buffer[i+1];
if(Close[i]>Close[i+1]&&Close[i+1]>=Close[i+2]){//если текущее и преддыдущее движение растут
Buffer[i] += NormalizeDouble((Close[i] - Close[i+1])/Point,0);}
if(Close[i]<Close[i+1]&&Close[i+1]<Close[i+2]){//если текущее и преддыдущее движение падают
Buffer[i] += NormalizeDouble((Close[i+1] - Close[i])/Point,0);}
if(Close[i]>Close[i+1]&&Close[i+1]<Close[i+2]){//если текущее лвижение растет а предыдущее падает
Buffer[i] += NormalizeDouble((Close[i+1] - Close[i])/Point,0);}
if(Close[i]<Close[i+1]&&Close[i+1]>=Close[i+2]){//если текущее движение падает а предыдущее растет
Buffer[i] += NormalizeDouble((Close[i] - Close[i+1])/Point,0);}
}
return(0);
}
//--------------------------------------------------------------------

Sie zeigt die Summe der Punkte und die Dynamik ihrer Summierung während der Woche - bei kleineren Zeitrahmen, wenn die vorherige Bewegung von Close[i+2] zu Close[i+1] weitergeht, wird die aktuelle Bewegung Close[i] addiert, wenn nicht - wird subtrahiert. Ich sollte es so vorschreiben, dass das Programm den Abschluss des Freitags sieht, anstatt den Balken zu schließen. Ich weiß, dass es mit DayOfWeek und 5 (Freitagsnummer) gemacht werden kann, aber wie kann ich es praktisch machen? Hilfe.

 
TarasBY:
Vitya, hier muss nichts geklärt werden - die Person möchte, dass globale Variablen aus einer Sandbox (EA mit seinen Bibliotheken) in einer anderen Sandbox (kompilierte Bibliothek) sichtbar sind. :)))

Igor, ein kleines bisschen falsch! In der "Sandbox" (kompilierte Bibliothek) werden nur die Funktionen und alle Variablen im Verzeichnis deklariert. Und die Variablen, die im Inluder (Include-Datei) deklariert sind, sollten in der Eule sichtbar sein, da ich das Inluder direkt in die Eule eingefügt habe. Sind Sie anderer Meinung?
 
Vitek2010:

Ich bin kein Programmierer, ich bin ein Code-Builder. So baute ich diesen Indikator (ich sehe, dass Sie einen Text Exposition tun können, nicht eine Datei t-das ist, was ich tun werde, um es leichter zu verstehen.

Sie zeigt die Summe der Punkte und die Dynamik ihrer Summierung während der Woche - bei kleineren Zeitrahmen, wenn die vorherige Bewegung von Close[i+2] zu Close[i+1] weitergeht, wird die aktuelle Bewegung Close[i] addiert, wenn nicht - wird subtrahiert. Ich sollte es so vorschreiben, dass das Programm den Abschluss des Freitags sieht, anstatt den Balken zu schließen. Ich weiß, dass es mit DayOfWeek und 5 (Freitagsnummer) gemacht werden kann, aber wie kann ich es praktisch machen? Hilfe.


Wird es passen?

//+------------------------------------------------------------------+
//|                                                    Vitek2010.mq4 |
//|                                            Copyright 2014, Vinin |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Vinin"
#property link      "vinin@mail.ru"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property  indicator_color1 Lime

//--------------------------------------------------------------------
double Buffer[];
//--------------------------------------------------------------------

int init()
  {
   SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,2);
   SetIndexBuffer(0,Buffer);
   return(0);
  }
// -------------------------------------------------------------------

int deinit()
  {
   return(0);
  }
//--------------------------------------------------------------------

int start()
  {
   int StartBar=Bars-IndicatorCounted()-1;
   if (StartBar>1) StartBar--;
   
   for(int i=StartBar; i>=0; i--)
     {
      Buffer[i]=Buffer[i+1];
      int pos0=iBarShift(NULL, PERIOD_W1, Time[i]);
      int pos1=iBarShift(NULL, PERIOD_W1, Time[i+1]);
      if (pos0==pos1) 
         Buffer[i]+=MathAbs(Close[i]-Close[i+1]);
      else 
         Buffer[i]=MathAbs(Close[i]-Close[i+1]);
     }
   return(0);
  }
//--------------------------------------------------------------------
 
hoz:

Igor, ein bisschen falsch! Nur die Funktionen befinden sich in der Sandbox (kompilierte Bibliothek), und alle Variablen werden im Inluder deklariert. Und die Variablen, die im Inluder (Include-Datei) deklariert sind, sollten in der Eule sichtbar sein, da ich das Inluder direkt in die Eule eingefügt habe. Meinen Sie nicht auch?
was hat dann der Verweis auf die kompilierte Bibliothek damit zu tun?
 
Vinin:


Ist das in Ordnung?

Nein, ich erkläre es Ihnen - Ihr Forum ist wie eine Hoffnung für die letzte kompetente Hochburg von Prog. und Einfügen von Größe - so sieht es die Schrift PERIOD_W1, aber weder die Verwendung von Größe noch die Verwendung von festen Bezugspunkten wie Daten erzielen den gewünschten Effekt. Ich habe eine spezielle Frage zum Freitag gepostet - übrigens lässt sich Ihr Code nicht kompilieren, weil er 'Version' sagt - unbekannte Eigenschaft, wenn Sie also nicht wissen, wie Sie DayOfWeek und 5 (die Zahl des Freitags) in den Code einfügen können,helfen andere Optionen nicht .
 
Vitek2010:
Nein, ich erkläre es Ihnen - Ihr Forum ist wie eine Hoffnung für die letzte kompetente Hochburg von Prog. und Einfügen von Größe - so sieht es der Schriftzug PERIOD_W1, aber weder die Verwendung von Größe noch die Verwendung von festen Datumsangaben bringen den gewünschten Effekt. Ich habe eine spezielle Frage zum Freitag gepostet - übrigens lässt sich Ihr Code nicht kompilieren, weil er 'Version' sagt - unbekannte Eigenschaft, wenn Sie also nicht wissen, wie Sie DayOfWeek und 5 (die Zahl des Freitags) in den Code einfügen können,helfen andere Optionen nicht .

TimeDayOfWeek(Time[i]) gibt nicht Time[i], sondern ein bestimmtes Datum im Format D'2014.01.27' an.

Und wenn Sie wissen wollen, welcher Tag heute ist, rufen Sie einfach DayOfWeek() auf.

 
evillive:

In TimeDayOfWeek(Time[i]) setzen Sie nicht Time[i], sondern ein bestimmtes Datum im Format D'2014.01.27'.

Wenn Sie feststellen wollen, welcher Tag gerade ist, rufen Sie einfach DayOfWeek() auf.

Wo haben Sie über TimeDayOfWeek () (im Beispiel) gelesen ?:)))