[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 557

 
T-G:

Hallo, ich habe eine Frage zur Lebensdauer einer Bestellung. Ich brauche eine Bestellung, die 2 Minuten lang "live" ist.

Warum führt eine solche Konstruktion zu Fehler 3 - warum und wie kann man ihn korrigieren?

Die Bestellung sollte mindestens 15 Minuten lang aktiv sein. Wenn weniger benötigt wird, dann wird es mit OrderDelete gelöscht
 
orb:

Verstehe, bisher ist es für mich einfacher, so zu schreiben.

Können Sie mir sagen, wie ich die Ausführung noch einmal loswerde?



So etwas wie "einfacher" gibt es nicht - man schreibt nicht: " Sagen Sie mir, wie ich die Zeit SOFORT los werden kann...". "Und beim Code muss man bedenken, dass alles, was man geschrieben hat, von einer dummen Maschine verstanden werden sollte.

Es gibt also zwei Möglichkeiten: richtig und falsch.

Ich verstehe Faulheit, es richtig umzuschreiben, Faulheit, die Regeln zu verstehen, also sagen Sie mir, wie lange Sie schon versuchen, dieses Ding in eine Datei zu schreiben? Drei Wochen...

 
Hallo, könnten Sie mir sagen, wie ich eine Bedingung schreiben kann: Wenn eine offene Position(egal wie viele, Nummerierung ist nicht erforderlich) eine oder mehrere profitable Positionen schließt, wie eröffne ich danach eine neue?
 
Stasjan:
Hallo, beraten, wie man eine Bedingung zu schreiben: wenn eine offene Position (egal wie viele, Nummerierung ist nicht erforderlich) schließt eine oder mehrere profitabel, wie eine neue Position (ein) nach, dass zu öffnen?


Editieren Sie selbst:

//---Поиск последнего отработавшего ордера для открытия очередной позиции ---   
   for (orderIndex = (OrdersHistoryTotal() - 1); orderIndex >= 0; orderIndex--)
   {   
      if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY)) {Print("Ошибка при доступе к исторической базе (",GetLastError(),")");continue;}   
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))  continue;              
   //------------------------- Принимаем в расчет только ордер, закрытый cамым крайним -----------------------
      if (time<OrderCloseTime())     //(сравниваем его с хранящимся в пероеменной time) 
        {
         time=OrderCloseTime();     //если время закрытия ордера больше - ложим его в переменную     
         int lastType = OrderType();
         double lastLots = OrderLots();
         double lastProfit = OrderProfit() + OrderSwap();
         
         // Анализ только что закрывшегося ордера      
         if (lastProfit >= 0.0)
         {
  //---Ордер закрылся с прибылью - обнуляем счетчик итераций, счетчик для подсчета последовательного убытка позиций колен лавины,
  //---текущий и суммарный убыток и открываемся стартовым лотом по тренду                 
            Sum_Loss=0;    
            Iteration = 0; 
            if (Lot(StopLossPips)==false) //Функции  передаем ширину накала 
           {
              Comment("Пополните счет. Не хватает средств на минимальный лот. Советник остановлен.");   // Если средств не хватает на мин, то выход
              Print ("Пополните счет. Не хватает средств на минимальный лот. Lots_New = ",Lots_New, " AccountFreeMargin() = ", AccountFreeMargin() ); 
                                                                                                        // Если средств не хватает на мин, то выход
              return (0);
           }
            
          // Ордер закрылся с прибылью, открываемся стартовым лотом                     
                                                                        // if (iOpen(Symbol(),signal_period,1)<iClose(Symbol(),signal_period,1))
           if(OsMA_1>0 && OsMA_2<0)
              switch(Filter.Hour)  // торги по времени Да=1/Нет=0
               {
                 case 0:  WmOrderSend(Symbol(), OP_BUY, Lots_New, Ask, 0, 0, "старт после профита", MagicNumber); break; 
                 case 1:  if (TimeHour(TimeCurrent()) >= Start && TimeHour(TimeCurrent()) <  End)WmOrderSend(Symbol(), OP_BUY, Lots_New, Ask, 0, 0, "старт после профита", MagicNumber); break; 
               } 
            
                
           if(OsMA_1<0 && OsMA_2>0)  
              switch(Filter.Hour)  // торги по времени Да=1/Нет=0                    
               {
                 case 0:  WmOrderSend(Symbol(), OP_SELL, Lots_New, Bid, 0, 0, "старт после профита", MagicNumber); break;
                 case 1:  if (TimeHour(TimeCurrent()) >= Start && TimeHour(TimeCurrent()) <  End)WmOrderSend(Symbol(), OP_SELL, Lots_New, Bid, 0, 0, "старт после профита", MagicNumber); break;
               }         
         }
         else
         {
            // Ордер закрылся с убытком - открываемся в ОБРАТНОМ направлении c увеличением объема позиции в соотв-ии с вариантом ММ, если 
            // количество итераций не выше максимального                                 
           if (Iteration <= Max_Iteration && VAR_MM == 0)                  
              // Последующие лоты открываются по множителю в соответствие с числами ФИБО           
               switch(Iteration)                                  // Заголовок switch 
                   {                                              // Начало тела switch                  
                     case 1 : Lots_New = lastLots * 1; lots = lastLots; Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );break; //расчет нового объема       
                     case 2 : Lots_New = lots * 2;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;   
                     case 3 : Lots_New = lots * 3;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;      
                     case 4 : Lots_New = lots * 5;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;  
                     case 5 : Lots_New = lots * 8;    Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;     
                     case 6 : Lots_New = lots * 13;   Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;      
                     case 7 : Lots_New = lots * 21;   Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;     
                     case 8 : Lots_New = lots * 34;   Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;         
                     case 9 : Lots_New = lots * 55;   Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;           
                     case 10: Lots_New = lots * 89;   Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break; 
                     case 11: Lots_New = lots * 144;  Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;               
                     case 12: Lots_New = lots * 233;  Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;               
                     case 13: Lots_New = lots * 377;  Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;               
                     case 14: Lots_New = lots * 610;  Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;  
                     case 15: Lots_New = lots * 987;  Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;               
                     case 16: Lots_New = lots * 1597; Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );  break;                            
                     default: Lots_New = lots * 2584; Print("Iteration = ", Iteration, " Lots_New = ", Lots_New );   
                   }                                    // Конец тела switch      
                    
         
            
 // ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...            
                    Lots_New = NormalizeLots(Lots_New);
                    if (lastType == OP_SELL) WmOrderSend(Symbol(), OP_BUY, Lots_New, Ask, 0, 0, "итерация" , MagicNumber);
                    if (lastType == OP_BUY)  WmOrderSend(Symbol(), OP_SELL,Lots_New, Bid, 0, 0, "итерация" , MagicNumber);                           
    } // к еlse - конец работы после предыдущего убыточного закрытого ордера         
         return (0);
      }    // к  if (time<OrderCloseTime())  - конец анализа и торгов по итогам закрытия самого свежего ордера  
      
// Найден закрытый ордер, но он старый      
      break;
   }       // выход из цикла по истории ордеров
   
 
FAQ:


es gibt kein "einfacher" - man schreibt nicht "sag mir, wie man es loswird, während man es tut... "Sie müssen bedenken, dass alles, was Sie geschrieben haben, von einem dummen Gerät verstanden werden sollte.

Es gibt also zwei Möglichkeiten: richtig und falsch.

Ich verstehe auch, dass Sie SEHR faul sind, richtig umzuschreiben, SEHR faul, die Regeln zu verstehen, also sagen Sie mir, wie lange Sie Ihr Thema mit dem Schreiben in eine Datei belästigt haben? Drei Wochen...

Ich löse Probleme, wie sie entstehen, den Expert Advisor programmiere ich seit dem 10. Januar. Es ist 4 Wochen her. Ich versuche seit dem 6. Januar, in MQL zu programmieren.
 
orb:
Ich löse Probleme, wenn sie auftauchen, den Expert Advisor programmiere ich seit dem 10. Januar. Es ist 4 Wochen her. Ich versuche seit dem 6. Januar in MQL zu programmieren.
Sie müssen das Prinzip richtig zu schreiben. die Daten auf die Eingabe, auf die Ausgabe, was in der Haupt-Block. und dann den Code zu optimieren. mit der Zeit wird es eine Gewohnheit, genau die Optimierung und korrekte Schreiben, und ich kann Sie verstehen und sein wie Sie, die nicht für einen Anfänger zu optimieren ist.
 
Danke Roman, aber ich kann nicht herausfinden, woher die Hälfte der Variablen stammt, da nicht der gesamte Code
 
Stasjan:
Danke Roman, aber ich kann nicht herausfinden, woher die Hälfte der Variablen stammt, da nicht der gesamte Code
#include <stdlib.mqh>
#include <stderror.mqh>
//#include <dynamic_channel.mqh>             // динамический канал
//#include <TrailingByFractals_LAVINA.mqh>
//#include <TrailingByFractals.mqh>
//
// Внешние переменные (оптимизируются)
extern string A0 = "Параметры ММ";
extern double Lots = 0.1;         // Стартовый лот
extern  double MaxRisk = 0;       // риск на капитал в %
                                  // рассчитываем объем позиции взависимости от размера стопа, при заданном риске
                                  // например при депо 10 000 риск 1% при стопе 100 пп это будет примерно лот 0.1,
                                  // при стопе 200 пп уже лот должен быть 0.05, для того чтобы риск 1% остался на том же уровне
extern int MaxLoss = 90;          // Максимально допустимая просадка в процентах от баланса

extern double StopLoss = 0;       // Стоплосс в пипсах - для пятизнака для йены, золота, серебра...
int TakeProfitPips = 0;           // Тейкпрофит в пипсах 

extern int Period_ATR = 30;       // значение АТР для расчета динамического канала
extern double Mul_TP = 4.0;       // целевая прибыль в единицах волатильности (АТР)
extern double Mul_Sl = 0.8;       // защитная остановка с последующим переворотом при ее сработке уже 
                                  // увеличенным лотом в единицах волатильности (АТР)

extern int Max_Iteration = 36;    // Максимальное количество итераций (ордеров) в мартине 
extern int k = 2;                 // с какой итерации тралим
extern int VAR_MM = 0;            // используемый вариант усреднения в соотв-ии: множитель с числами ФИБО = 0 / множитель по арифметической прогрессии = 1
                                  // 2 - классический мартин - удвоение предыдущего объема с 3-его усреднения  

extern string Trailing = "---------- Параметры трала";
extern int UseTrailing = 1;       // Использовать = 1/не использовать = 0 трал  
extern int  type = 0;             // вид трала - возможные значения: 0 - простой, 1 - по фракталам, 2 - по теням N свечей.   
extern bool trlinloss = false;    // Тралим только профит для всех видов тралов

extern string A1 = "Параметры простого трала,пo фракталам,теням N баров,каналу,МА,SAR";
extern int  TralingStop = 1000;   // дистанция простого трала в положительной зоне (пункты)
extern int  indent = 100;         // отступ (пунктов) при трале по фракталам, теням N свечей, ценовому каналу, МА,SAR
extern int  bars_n = 10;          // количество баров, для трала по их теням (от 1 и больше) или расчета границ канала 
     

extern string A2 = "Таймфрейм, время работы и параметры технических индикаторов";
//extern int t_trend_period =6;   // 1-М1, 2-М5, 3-М15, 4-М30, 5-Н1...-для старшего фильтра, внутри которого работаем
extern int s_trend_period = 3;    //  PERIOD_M1 1       1 минута
                                  //  PERIOD_M5 5       5 минут
                                  //  PERIOD_M15        15      15 минут
                                  //  PERIOD_M30        30      30 минут
                                  //  PERIOD_H1 60      1 час
                                  //  PERIOD_H4 240     4 часа
                                  //  PERIOD_D1 1440    1 день
                                  //  PERIOD_W1 10080   1 неделя
                                  //  PERIOD_MN1        43200   1 месяц
                                  //  0 (ноль)  0       Период текущего графика 
                                     
extern int Filter.Hour=0;       //  Д-Фильтр: торговля по часам, вне этих часовых рамок новые сделки не открываем, но текущие итеpации завершаем
extern int     Start=9;
extern int      End=20;

// Параметры используемых индикаторов
extern int    Fast            = 5;
extern int    Slow            = 39;
extern int    Signal          = 20;
extern int MagicNumber = 7;       // магик                                         
//extern int Period_MA = 20;      // Период МА                          
//extern int Period_ADX = 40;           
//extern int ADXOpenLevel = 12;   
//---- входные параметры индикатора iVAR
//extern int n = 5;
//extern int nBars = 100000;
                                    
//extern  int Iteration = 0;      // счетчик для подсчета итераций, колен лавины
//extern  int Sum_Loss = 0;
                                   
#include <TrailingByFractals_LAVINA.mqh>     // ТРАЛ ПО ФРАКТАЛАМ
#include <TrailingByShadows.mqh>             // ТРАЛ ПО ТЕНЯМ N БАРОВ
//
// Глобальные переменные
//
static datetime prevtime = 0;     // по ценам открытия
bool IsExpertFailed = false;
bool IsExpertStopped = false;

int NumberOfTry = 25;
int SlipPips = 3;

int signal_period;
int trend_period;


bool UseSound = true;
color ColorBuy = Blue;
color ColorSell = Red;
string ok.wav;

double  Level_new,  PointValue,
        lots;                       // вспомогательная переменная для расчета нового размера лота при очередной итерации
int Iteration, Counter_Loss, Ticket_at_history; // счетчик для подсчета последовательного убытка позиций колен лавины
//bool Flag_Counter_Loss = false;
double Current_Loss, Sum_Loss;     // текущий и суммарный убыток

int ticket;                        // Номер ордера
double orderLots;                  // Lots   
double orderProfit;                // Profit
double Price;                      // Цена открытия рыночного ордера
double SL;                         // Значение StopLoss ордера
double TP;                         // Значение TakeProfit ордера


double F1 =  1.0;                  // значение цены фрактала вверх (на 2-ом баре)
double F11 = 1.0;                  // вспомогательная переменная
double F2 = -200.0;                // значение цены фрактала вниз (на 2-ом баре)
double F22 =-200.0;                // вспомогательная переменная  
 
double V_StopLossPips=0;
double V_TakeProfitPips=0;
//double StopLossPips;
int Ticker, Counter;
double channel;
double  StopLossPips;
double Lots_New;                   // Количество лотов для новых ордеров

int time = 0;                      // время - для определения факта работы только с последним закрытым ордером      
 
Wie kann ich den Höchst- oder Mindestpreis zwischen zwei Zeiträumen ermitteln? Gibt es dafür eine spezielle Funktion?
 
RoboT1:
Wie kann ich den Höchst- oder Mindestpreis zwischen zwei Zeiträumen ermitteln? Gibt es dafür eine spezielle Funktion?
Ermitteln Sie den Minimal-/Maximalwert des Zyklus auf dem einen Intervall, vergleichen Sie den resultierenden Minimal-/Maximalwert auf dem anderen.
Grund der Beschwerde: