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

 

Skripte sind von EAs nicht zu unterscheiden...

Manchmal verwenden Skripte das #property show_inputs, um einen Dialog mit Parametern anzuzeigen, wie in EA (es ist dort selbstverständlich), aber es ist schwer, den Unterschied zu erkennen...

 

Können Sie einen Algorithmus vorschlagen... Wir müssen den Zeitpunkt des Hochs und des Tiefs des hohen Zeitrahmens im niedrigen Zeitrahmen finden.

   double H=iHigh(NULL,TF2,i);
   double L=iLow(NULL,TF2,i);  
   datetime timeH=
   datetime timeL=
 
zfs:

Können Sie einen Algorithmus vorschlagen... Sie müssen den Zeitpunkt des Hochs und des Tiefs des hohen Zeitrahmens im niedrigen Zeitrahmen finden.

Erinnern Sie sich oder verwenden Sie sofort i - den gefundenen Index.

Und iTime(NULL,TF2,i) wird die Zeit sein.

 
Craft:

Er hat es nicht bis zum Morgen ausgehalten. Es wurde ein wenig besser, aber die Platzierungen der Auftragsblüten ließen sich nicht vermeiden. Wie kann ich einen Einzelauftrag zu den gewünschten Konditionen einrichten? Sie sagten: Nein, das geht nicht, nur durch Analyse der Auftragshistorie - wie sollen wir das machen oder was ist sonst geeignet?

wie diese

int i,orders_total=OrdersTotal();

bool order_on_last_bar=false;

if(orders_total>0) //если есть ордера
{
   for(i=orders_total-1;i>=0;i--) //перебираем их все
   {
      OrderSelect(i,SELECT_BY_POS);
      if(iBarShift(OrderOpenTime())==0) //если номер бара, соответствующего сремени открытия, равен 0
         order_on_last_bar=true; //фиксируем этот факт
   }
}

if(order_on_last_bar==false) // на нулевом баре нет открытых ордеров
{
   //делаем то что нам нужно
}
 

Ich habe diese Frage schon einmal gestellt, aber jetzt brauche ich sie erneut, um das maximale Volumen für die Eröffnung einer Position zu berechnen. Ich schreibe es so:

// Расчет максимального объема
   for (double m = 0.1; AccountFreeMarginCheck(Symbol(),OP_SELL,m)>30; m = m + 0.1)
      {
       Max_lots   = m;
       double Ost = AccountFreeMarginCheck(Symbol(),OP_SELL,m);
      }

Aber Max_lots ist die ganze Zeit gleich Null... Ich weiß nicht, vielleicht kennt jemand eine kompetentere Konstruktion zur Berechnung einer solchen Sache?

 
alsu:

wie diese

Ich füllte alle iBarShift Funktion Werte (Kompilierung verursacht Fehler vor), int i wurde bereits oben deklariert. Ich habe versucht, diese Wiedergabe zu entfernen und ersetzen Sie es mit j für die Zwecke des Experiments, aber es hat nicht funktioniert - ich bekam mehrere Bestellung öffnen/schließen auf einige Bars. Unten ist der Code mit den Öffnungsbedingungen, vielleicht habe ich etwas durcheinander gebracht. Was können wir sonst noch tun?

   int j,orders_total=OrdersTotal();

bool order_on_last_bar=false;

if(orders_total>0) //если есть ордера
{
   for(j=orders_total-1;j>=0;j--) //перебираем их все
   {
      OrderSelect(j,SELECT_BY_POS);
      if(iBarShift(NULL,0,OrderOpenTime())==0) //если номер бара, соответствующего времени открытия, равен 0
         order_on_last_bar=true; //фиксируем этот факт
   }
}

if(order_on_last_bar==false) // на нулевом баре нет открытых ордеров
{
while(true)                                  // Цикл закрытия орд.
     {
      if (Total==0 && Opn_B==true)              // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,0,0);//Открытие Buy
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Buy ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      if (Total==0 && Opn_S==true)              // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates();                        // Обновление данных
         Alert("Попытка открыть Sell. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,0,0);//Открытие Sel
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Sell ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }
  }
 
Craft:

Ich füllte alle iBarShift Funktion Werte (Kompilierung verursacht Fehler vor), int i wurde bereits oben deklariert; Ich habe versucht, diese Wiedergabe zu entfernen und ersetzen Sie es mit j für saubere Experiment; es hat nicht funktioniert - ich bekam mehrere Ordnung öffnen/schließen auf einige Bars. Unten ist der Code mit den Öffnungsbedingungen, vielleicht habe ich etwas durcheinander gebracht. Was können wir sonst noch tun?

1. Was ist die Variable "Total", wo ist ihr Wert zugewiesen?

2. es wäre besser, else vor das zweite if(Total==0 if(

 
alsu:

1. Was ist die Variable Total und wo wird ihr Wert zugewiesen?

Dies basiert auf dem Beispiel aus dem Artikel Simple Expert: https://book.mql4.com/ru/samples/expert

int start()
  {
   int
   Total,                           // Количество ордеров в окне 
...
   // Учёт ордеров
   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>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
 

alsu:

2. vor dem zweiten if(Total==0 ist es besser, ein else if(.

Es hat nicht geholfen. alsu, entschuldigen Sie, dass ich mich einmische, aber ich möchte der Sache wirklich auf den Grund gehen.
 
Craft:
Es hat nicht geholfen. alsu, entschuldige die Aufdringlichkeit, aber ich möchte es wirklich herausfinden (zu Ende bringen).

keine große Sache.

Versuchen Sie, /* */ ein Stück Code aus dem einfachen EA zu übertragen, und ersetzen Sie Total durch orders_total - eine Variable, die wir selbst deklariert haben.