Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 91

 
Vitaly Muzichenko:
Sie müssen nach dem Preis sortieren, denn Sie können nicht nach der Größe suchen, das Raster kann mehrfach sein, und Sie finden entweder das größte oder das kleinste, aber nicht das erste oder das letzte

Ich meine die Funktion, die Marina gepostet hat.

Die letzte Reihenfolge wird durch die Zeit bestimmt.

 
Alekseu Fedotov:

Ich meine die Funktion, die Marina gepostet hat.

Die letzte Reihenfolge wird durch die Zeit bestimmt.

Sie wurden alle zur gleichen Zeit aufgegeben, so dass bei 14 Aufträgen ein Unterschied von 1 Sekunde bestehen kann, und man kann sie nicht nach Zeit, sondern nur nach Preis sortieren.
 
Marina Korotkih:

Denn ich rufe es so auf

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
Ich hab's.
 

Liebe Programmierer! Helfen Sie mir, diese Frage zu lösen. Der Expert Advisor geht einen Handel auf M15 ein, berücksichtigt aber auch die Bedingungen von H1. Wenn die Bedingungen auf H1 auf M15 erfüllt sind, kann es mehrere Einstiegspunkte geben. Das Problem ist, dass ich nur den ersten Einstiegspunkt verwenden möchte, bis die Bedingungen auf H1 umgekehrt sind.

k=0;
for (i=OrdersTotal()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // Kauf

 
customer03:

Liebe Programmierer! Helfen Sie mir, diese Frage zu lösen. Der Expert Advisor geht einen Handel auf M15 ein, berücksichtigt aber auch die Bedingungen von H1. Wenn die Bedingungen auf H1 auf M15 erfüllt sind, kann es mehrere Einstiegspunkte geben. Das eigentliche Problem ist, dass ich den ersten Einstiegspunkt begrenzen möchte, bis die Bedingungen auf H1 nicht ins Gegenteil geändert werden.

k=0;
for (i=BestellungenGesamt()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // Kauf

Aber wie sieht es ohne den Code aus? Insbesondere ist der Code nicht klar.

Was genau wollen Sie? Nicht abstrakt, sondern genau das, was Sie erreichen wollen.

 
customer03:

Liebe Programmierer! Helfen Sie mir, diese Frage zu lösen. Der Expert Advisor geht einen Handel auf M15 ein, berücksichtigt aber auch die Bedingungen von H1. Wenn die Bedingungen auf H1 auf M15 erfüllt sind, kann es mehrere Einstiegspunkte geben. Das Problem ist eigentlich, dass ich mich auf den ersten Einstiegspunkt beschränken möchte, während auf H1 die Bedingungen nicht ins Gegenteil umschlagen.

k=0;
for (i=BestellungenGesamt()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // Kauf

Ein approximativer Algorithmus:

bool flag = false;
bool flagH1 = true;
bool flagM15 = true;

if(!flag && flagH1 && flagM15)
{
  flag = true;
}

if(!flagH1 && flag)
flag = false;
 
Artyom Trishkin:

Und ohne den Code? Ein Grund mehr, den Code nicht zu verstehen.

Was genau wollen Sie? Nicht abstrakt, sondern genau das, was Sie erreichen wollen.

Artyom Hallo! Das Ziel ist es, den Einstieg auf M15 auf eins (erstes Signal) zu begrenzen, solange es ein Signal auf H1 gibt.
#property strict
extern double    Lot= 0.1;

extern int    stoploss=20;
extern int takeprofit=50;
// если stoploss и / или takeprofit = 0, то отключены.
//if stoploss and/or takeprofit = 0, are disconnected.



extern int  Magic = 99999999;
// уникальный номер, кот. советник метит свои ордера и впоследствии работает только с ними. При постановке на разные графики или т/ф, межики должны быть разными
extern int Slipp = 1;        
// величина максимально возможного проскальзывания.
//  slippage
extern int sec = 2000;
// количество миллисекунд сна советника между повторами отправки торгового поручения в случае неудачи
// number of milliseconds sleep of the EA between repetitions of sending a trade assignment in case of failure


//============================= Stochastic
input int InpKPeriod=13; // K Period
input int InpDPeriod=3; // D Period
input int InpSlowing=3; // Slowing

//============================= Stochastic
input int InpKPeriod1=13; // K Period
input int InpDPeriod1=3; // D Period
input int InpSlowing1=3; // Slowing





int A, a, b, i, ii, o;


    double SL, TP, op, stH0, stH1, stM0, stM1;
    bool c;
    datetime OldTime, Time0, opp;

int init()
  {    
  
   OldTime = iTime(NULL,Period(),0);
  
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  

                      
//====================================================================

stH0 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,0);
stH1 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,1);

stM0 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,0);
stM1 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,1);
  
//====================================================================  

          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }

      
if(  stM1 <= 20 && stM0 > 20  && stH0 > 70  && b==0   && opp != Time[0]) // покупка
      {
       opp = Time[0];

    RefreshRates();
    op = Ask;
   A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
    o = GetLastError();
         while (A < 0 && o != 4109 && o != 132 && o != 133)
         {
          Print("Error =", o);
         Sleep(sec);
         RefreshRates();
         op = Ask;
         A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
         o = GetLastError();
        }      
        
SL = op-stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op+takeprofit*Point;
if (takeprofit == 0 ) TP = 0;        
        
    if (SL != 0 || TP != 0)
      {
    RefreshRates();
    if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
    c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
    o = GetLastError();
      while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
                  o = GetLastError();
                  }  }          
     }

//---------------------------------------------------------------------------------------------------------+                          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }


if( stM1 >= 80 && stM0 < 80  &&  stH0 < 30   && b==0   && opp != Time[0]) // продажа
     {
     opp = Time[0];

      RefreshRates();
      op = Bid;
         A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
         o = GetLastError();
            while (A < 0 && o != 4109 && o != 132 && o != 133)
            {
             Print("Error =", o);
            Sleep(sec);
            RefreshRates();
            op = Bid;
            A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
            o = GetLastError();
            }    

SL = op+stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op-takeprofit*Point;
if (takeprofit == 0 ) TP = 0;
        
        if (SL != 0 || TP != 0)
      {
        RefreshRates();
         if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
         c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
         o = GetLastError();
         while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);                  
                  o = GetLastError();
                  } }
      }
      
    

   return(0);
   }      

  
//+------------------------------------------------------------------+
 
customer03:
Artyom Hallo! Das Ziel ist es, den Einstieg auf M15 auf eins (erstes Signal) zu begrenzen, solange es ein Signal auf H1 gibt.

Überprüfen Sie also die Anzahl der offenen Positionen auf der M15-Nullkerze. Wenn Sie bereits eine Position haben und diese bei einer M15-Nullkerze geöffnet ist, dann eröffnen Sie keine weitere.
 

Hallo, liebe Forumsmitglieder. Gibt es eine Möglichkeit, den Wert des in Metatrader4 eingebauten Trailing-Stops aus dem EA heraus zu setzen? Ich bin daran interessiert und nicht daran, dem EA einen Code für die Ausführung eines Trailing-Stops hinzuzufügen, der unabhängig vom eingebauten Trailing-Stop ist.

Vielen Dank im Voraus für die Antworten.

 
Dr_G:

Hallo, liebe Forumsmitglieder. Gibt es eine Möglichkeit, den Wert des in Metatrader4 eingebauten Trailing-Stops aus dem EA heraus zu setzen? Ich bin daran interessiert und nicht daran, dem EA einen Code für die Ausführung eines Trailing-Stops hinzuzufügen, der unabhängig vom eingebauten Trailing-Stop ist.

Vielen Dank im Voraus für die Antworten.

Nein.