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

 

Ja, in der Tat. Ich habe nachgeschaut, aber nichts gesehen.

Vielen Dank.

Heute gehe ich es langsamer an. Ich muss mich für das Wochenende ausruhen.

 
rid >> :

Das ist ungefähr richtig.



Ich danke Ihnen!!! Ich werde.... benutzen.

 


DDFedor



Rid



Ich danke Ihnen.

 

Immerhin hat der Code nicht funktionieren, hat die ganze Aktion auf 2 Kerzen. und musste lernen, dass die Position bereits mehr haben nicht öffnen ... weil es überhaupt geöffnet, dass ich alle die Kaution verwendet(( Rid Blick, vielleicht, was Sie sonst noch hinzufügen müssen ... wäre sehr dankbar

 

Hilfe. Ich möchte einen EA, der nachts handelt. Ich schreibe Code

int start()
{
string Symb;
Symb=Symbol();
string Vremya;
Vremya=TimeToStr(TimeLocal(),TIME_MINUTES);
if(Vremya > 23:00 || Vremya < 06:00 )
{
// тут торговые функции
}
}

Es erzeugt einen Fehler

'||' - Bedingung kann keine Zeichenkette sein

Und wenn die Bedingung verkürzt wird auf

if(Wremja > 23:00

wird es funktionieren,

Und wenn es an
geht

if(Wremja < 06:00 )

wird es nicht funktionieren.


Ich verstehe nicht, was los ist. Können Sie mir sagen, wie ich die Uhrzeit einstellen kann?


 
morok >> :

Trotzdem hat der Code nicht funktioniert, ich habe alle Trades auf 2 Candlesticks gemacht.

Ja, in der Tat....

Ich habe vergessen, die Magie in der ORDERSEND fi einzustellen.

Es funktioniert jetzt einwandfrei. Geprüft. Es kann nicht mehr als zwei unterschiedlich gerichtete Geschäfte oder nicht mehr als ein unidirektionales Geschäft geben.

Wenn nicht mehr als ein Geschäft eines beliebigen Typs erforderlich ist, muss in f-ki NumberOfPositions(c) der Typ des Geschäfts durch -1 (minus eins) ersetzt werden

extern int   Magic = 777;
extern int       Ema1=14;
extern int       Ema2=48;
double Ema_1;
double Ema_2;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   //int Orders = OrdersTotal(); 
   Ema_1 =iMA(NULL, 0, Ema1, 0,MODE_SMMA, PRICE_MEDIAN, 0);
   Ema_2 =iMA(NULL, 0, Ema2, 0,MODE_SMMA, PRICE_MEDIAN, 0);   
   int ticket;
//------------------------------------------------
 if ( NumberOfPositions(NULL,OP_BUY, Magic)< 1 && Ema_1> Ema_2) 
    {
      ticket=OrderSend(Symbol(),OP_BUY,0.5,Ask,10,Ask-850*Point,Ask+550*Point,"kupil", Magic,0,Green);
    } 
//------------------------------------------------------
   if ( NumberOfPositions(NULL,OP_SELL, Magic)< 1 && Ema_1< Ema_2) 
    {
      ticket=OrderSend(Symbol(),OP_SELL,0.5,Bid,10,Ask+850*Point,Bid-550*Point,"kupil", Magic,0,Violet);
    } 
//------------------------------------------------------
   return(0);
  }

//жжжжжжжжж Пользовательские функции жжжжжжж

int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++)                                    {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()== sy || sy=="")                   {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op)                   {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}
  return( kp);
}




 
alderru >> :

Bitte sagen Sie mir, was die iTime-Funktion anzeigt.

Was ist das für ein Kauderwelsch mit 10 Ziffern? Sekunden?

Wie kann man sie in Jahr-Monat-Tag-Stunde-Minute umrechnen?

>> So geht's: einfach Bar Shift setzen und Standardzeit und Datum erhalten (wenn time=1 oder true, erhält man nur die Zeit).

Sehr praktische Funktion, ich empfehle sie.

string Times(int Sdvig, bool time=0)
{//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  string YAER   = TimeYear( Time[ Sdvig]);
  string DAY    = TimeDay( Time[ Sdvig]);
  string HOUR   = TimeHour( Time[ Sdvig]);
  string MINUTE = TimeMinute( Time[ Sdvig]);
  int month = TimeMonth( Time[ Sdvig]);
  string MONTH;
  switch( month)
    {case 1: MONTH = "янв ";break;
     case 2: MONTH = "фев ";break;
     case 3: MONTH = "март";break;
     case 4: MONTH = "апр ";break;
     case 5: MONTH = "май ";break;
     case 6: MONTH = "июнь";break;
     case 7: MONTH = "июль";break;
     case 8: MONTH = "авг ";break;
     case 9: MONTH = "сен ";break;
     case 10: MONTH = "окт ";break;
     case 11: MONTH = "нояб";break;
     case 12: MONTH = "дек ";break;              
     default: MONTH = "----";break;
    }
 if(TimeHour( Time[ Sdvig])<10) HOUR= "0"+ HOUR;     
 if( MINUTE=="0") MINUTE="00";
 if( time)return( HOUR+":"+ MINUTE);                   
 else return( YAER+"   "+ MONTH+" "+ DAY+"   "+ HOUR+":"+ MINUTE);
}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

Ich habe versucht, die zweite Stufe einzustellen, aber es hat nicht funktioniert.

Ich habe es versucht, aber ein Auftrag wurde sofort nach dem Test geöffnet und geschlossen.

extern int   Magic = 777;
extern int       Ema1=14;
extern int       Ema2=48;
extern int       Ema3=100;
double Ema_1;
double Ema_2;
double Ema_3;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   //int Orders = OrdersTotal(); 
   Ema_1 =iMA(NULL, 0, Ema1, 0,MODE_SMMA, PRICE_MEDIAN, 0);
   Ema_2 =iMA(NULL, 0, Ema2, 0,MODE_SMMA, PRICE_MEDIAN, 0);
   Ema_3 =iMA(NULL, 0, Ema3, 0,MODE_SMMA, PRICE_MEDIAN, 0);     
   int ticket;
//------------------------------------------------
 if ( NumberOfPositions(NULL,OP_BUY, Magic)< 1 && Ema_1> Ema_2 && Ema_2> Ema_3) 
    {
      ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,10,0,0,"kupil", Magic,0,Green);
    } 
//------------------------------------------------------
   if ( NumberOfPositions(NULL,OP_SELL, Magic)< 1 && Ema_1< Ema_2 && Ema_2< Ema_3) 
    {
      ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,10,0,0,"kupil", Magic,0,Violet);
    } 
//--------------------------------------------------------
 if ( NumberOfPositions(NULL,OP_BUY, Magic)>= 1 && Ema_1< Ema_2) //--проверяю есть ли ордер BUY и крою его если линии ема пересеклись
    {
      ticket=OrderClose(OrderTicket(),0.1,Bid,300,Violet);
    } 
//------------------------------------------------------
 if ( NumberOfPositions(NULL,OP_SELL, Magic)>= 1 && Ema_1> Ema_2) //--проверяю есть ли ордер SEll и крою его если линии ема пересеклись
    {
      ticket=OrderClose(OrderTicket(),0.1,Ask,300,Green);
    } 
//------------------------------------------------------
   return(0);
  }

//жжжжжжжжж Пользовательские функции жжжжжжж

int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++)                                    {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()== sy || sy=="")                   {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op)                   {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}
  return( kp);
}
 
rid писал(а) >>

Ich hab's. Um festzustellen, ob es Positionen in der Historie gab, können Sie wie folgt vorgehen:

Aber dann funktioniert Ihr Code nur im Testprogramm. Andernfalls müssen Sie die Magie jedes Mal ändern, wenn Sie den EA online einschalten.


Genau, das ist genau das, was wir brauchen!

Bitte teilen Sie mir mit, wie ich diesen Code korrekt in dieses Raster einfügen kann:

(Wenn ich ihn direkt einsetze, bleibt der Tester einfach bei der Öffnung der ersten Position stehen)

for (int i=0; i< OrdersTotal(); i++)                          {

    if (!(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY ))) continue;

//выбираем из истории счета

    if (OrderSymbol() != Symbol()) continue;    

     if ( OrderMagicNumber()== Magic)                            {

              позиции = true;

                                                             }}



//Открытие позиции:



bool Open_Buy() {

   bool res=false; 

if( условие_1)      {

            if ( советник еще не открывал позиций с Магическим номером)    {

                    res=true;     }}

else    {

    if( условие_1)       { 

   if ( условие_2 опирается на данные прошлого ордера)       { 

   res=true;     }}}

return( res);

}
 
morok >> :

Ich habe versucht, die zweite Stufe einzustellen, aber es hat nicht funktioniert.

Es scheint recht logisch zu sein, aber im Test werden die Aufträge gleichzeitig geöffnet und abgedeckt.

Ich habe mich in meiner Zeit hier mit der Schließung von Positionen beschäftigt -

https://www.mql5.com/ru/forum/105913

//==================Закрытие позиций ============================
 
//----------------------------------------------------------------------
  for (int v=0; v<OrdersTotal(); v++)                             {       
      if (OrderSelect( v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()==Symbol()&& OrderMagicNumber()== Magic)      { 
//-----------------------------------------------------                  
if(OrderType()== OP_BUY) { // если открыта бай-позиция                                   
  if( вот здесь вставляй свои условия закрытия)  {
    OrderClose(OrderTicket(),OrderLots(),Bid,3,Вlack); // закрываем позицию
                                 }       
                               }  
 //--------------------------------------------------------
if(OrderType()== OP_SELL) { // если открыта селл-позиция 
 if( вот здесь вставляй свои условия закрытия)    {
   OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow); // закрываем позицию
                     }       
                   }  
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total
//------------конец блока закрытия позиций-----------------

Dieser Block muss innerhalb der START-Funktion eingefügt werden, vielleicht ganz am Anfang, direkt nach der Berechnung von Ema_1,Ema_2,Ema_3.
Und anscheinend ist es notwendig, den Advisor nach den OFFENEN PREISEN arbeiten zu lassen, da sonst die MA-Kreuzung ständig die offenen Positionen bei fast jedem Tick schließt.

Und so, wie Sie es gemacht haben, würde es online nicht richtig funktionieren, weil der EA alle Positionen schließt, auch die, die von einem anderen EA oder manuell geöffnet wurden.

Aber ich habe bereits geschrieben, wie man es noch einfacher machen kann. Anstelle von NumberOfPositions(NULL,OP_BUY,Magic) und anstelle von NumberOfPositions(NULL,OP_SELL,Magic) beim Eröffnen von Positionen, setzen Sie einfach

AnzahlPositionen(NULL,-1,Magic)

und es wird immer nur eine Position auf dem Markt sein. Ohne Schließblöcke.

Grund der Beschwerde: