[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 149

 
ewoke:

Nachmittags.

Ich brauche eine EURUSD m5/m15 Geschichte von vor 2009, kann jemand ihre teilen? (d.h. diejenige, auf der Sie Ihre Experten debuggen).

Dafür wäre ich sehr dankbar.

Drücken Sie bei geöffnetem Terminal F2 und gehen Sie dann auf Fx Majors -> EURUSD -> 1 Minute (M1) -> Download.

 
paladin80:
Die öffnende geschweifte Klammer { sollte vor price[...]=Ask; gesetzt werden (siehe unten). Lesen Sie noch einmal über den "if"-Operator. Wenn keine Klammer unmittelbar nach if steht, wird nur eine Aktion behandelt (Sie haben price[...]=Ask;), wenn mehrere Aktionen erforderlich sind, müssen sie in {...} unmittelbar nach if stehen.

Danke, aber ich habe die Klammern direkt nach der if-Anweisung gesetzt, wie Sie vorgeschlagen haben,
Siehe Screenshot - er zeigt, dass der EA eine Kaufposition eröffnet hat.
und der Preis ging nach unten und überquerte die Niveaus von 1,2100 und 1,2200 und Positionen durch den Betreiber

wenn zu öffnen Kaufpositionen bei 1,2100 und 1,2200 - nicht geöffnet.


 
alex12:
Danke, aber ich habe Klammern direkt nach der if-Anweisung gesetzt, wie Sie vorgeschlagen haben,
Sehen Sie sich den Screenshot an - er zeigt, dass der Expert Advisor eine Kaufposition eröffnet hat.
und der Preis ging nach unten und überquerte die Niveaus von 1,2100 und 1,2200 und die Positionen durch den Betreiber Zustand

wenn zu öffnen Kaufpositionen bei 1,2100 und 1,2200 - nicht geöffnet.


Ist es nicht notwendig, den Return-Operator nach orderend zu setzen, um die Verarbeitung des Ticks zu beenden?
 
alex12:
Danke, aber ich habe Klammern direkt nach der if-Anweisung, wie Sie vorgeschlagen,
, aber es hat sich nichts geändert. siehe den Screenshot - es zeigt, dass der EA eine Kaufposition
geöffnet und der Preis ging nach unten und überquerte Ebenen 1.2100 und 1.2200 und Positionen nach der Anweisung

Wenn zu kaufen Positionen bei 1,2100 und 1,2200 zu öffnen - sie nicht geöffnet haben.

Eröffnen Sie die erste Position manuell oder möchten Sie, dass die schwebenden Orders platziert werden, nachdem der Preis ein bestimmtes Niveau überschritten hat und dann auf der Grundlage seiner Präsenz? Versuchen Sie es auf diese Weise:
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(SELECT_BY_POS,MODE_TRADES)
      {  if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()==OP_BUYLIMIT) return(0);
}  }  }

if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY)
         {  for (int j=0; j=10-1; j++}
            {  OrderSend (Symbol(),OP_BUYLIMIT,Lot,price[j],10,0,Ask+g*Point,"My order #",11+j);
               Sleep(10*1000);
      }  }  }
}  }
Natürlich brauchen wir noch eine Fehlerbehandlung für den Fall, dass ein ausstehender Auftrag von DC abgelehnt wird.
 
OlegTs:
Sollten wir nicht einen Return-Operator nach ordersend setzen, um die Tick-Verarbeitung zu beenden?

Danke, ich habe den Return-Operator nach ordersend eingefügt, aber es hat sich nichts geändert.


extern double Lot=1;
int g=20; //тейкпрофит
double price[10];   // Заданный уровень 
//-----------------------
int init()
  {
double price[10];   // объявляем массив из 5 элементов           
price[0] = 1.2100; // обращаемся к первому элементу массива и 
                   // присваиваем ему цену. Обратите внимание 
                   // на то, что индекс первого элемента 
                   // начинается с 0. Это важная особенность,
                   // к которой нужно привыкнуть.   
price[1] = 1.2200;  // обращаемся ко второму элементу 
price[2] = 1.2300;  // и так далее 
price[3] = 1.2400; 
price[4] = 1.2500;
price[5] = 1.2600; 
price[6] = 1.2700;  
price[7] = 1.2800; 
price[8] = 1.2900;
price[9] = 1.3000;  
   return(0);
  }
//---------------
int start()
   {
// начало открытия ордеров 
   if (OrdersTotal()>0)return(0);

   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)//проверка наличия откр.поз
   {
   price[0]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2100,10,0,Ask+g*Point,"My order #",11);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[1]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2200,10,0,Ask+g*Point,"My order #",12);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[2]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2300,10,0,Ask+g*Point,"My order #",13);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[3]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2400,10,0,Ask+g*Point,"My order #",14);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[4]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2500,10,0,Ask+g*Point,"My order #",15);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[5]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2600,10,0,Ask+g*Point,"My order #",16);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[6]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2700,10,0,Ask+g*Point,"My order #",17);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[7]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2800,10,0,Ask+g*Point,"My order #",18);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[8]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2900,10,0,Ask+g*Point,"My order #",19);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[9]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.3000,10,0,Ask+g*Point,"My order #",20);return;
   }
      return(0);
  }
//+------------------------------------------------------------------+
 
paladin80:
Eröffnen Sie die allererste Position manuell oder möchten Sie, dass die Pending Orders eröffnet werden, wenn der Kurs ein bestimmtes Niveau erreicht hat und dann auf dieser Grundlage? Versuchen Sie Folgendes:. Natürlich brauchen wir eine bessere Fehlerbehandlung für den Fall, dass ein ausstehender Auftrag von DC abgelehnt wird.

Wenn der Kurs ein bestimmtes Niveau erreicht und dann eine Position zu den in den Aufträgen festgelegten Niveaus eröffnet.

Es stellt sich heraus, dass wir eine Position auf einer Ebene haben - bis sie zur gleichen Zeit geschlossen wird.

 
alex12:

...

Eine Pose nach der anderen auf der gleichen Ebene - bis sie auf den Strom treffen.

Eine riskante Strategie, mit der ich nicht herumspielen würde.
 
paladin80:
Eröffnen Sie die erste Position manuell oder möchten Sie, dass die Pending Orders platziert werden, nachdem der Kurs ein bestimmtes Niveau überschritten hat? Versuchen Sie dies: Es gibt keine Fehlerbehandlung für den Fall, dass Ihr Maklerunternehmen einen ausstehenden Auftrag ablehnt.

Danke natürlich für den Tipp-Code, aber da ich kein sehr guter Programmierer bin, konnte ich den Fehler nicht finden:'}' - nicht geschlossene Klammern

Ich habe mir Ihren Code in Notepad++ in vergrößerter Ansicht angesehen und konnte den Fehler nicht beheben.

Ich verstehe. Mich interessiert der Code selbst, nicht der TS.

Es erzeugt den Fehler '}'. - unausgewogene Klammern

Ich weiß nicht, wie man das repariert.

extern double Lot=1;
int g=20;          //тейкпрофит
double price[5];   // Заданный уровень 
//-----------------------
int init()
  { 
double price[]={1.2100,1.2200,1.2300,1.2400,1.2500}; // объявляем массив из 5 элементов  
   return(0);
  }
//---------------
int start()
   {
// начало открытия ордеров 
   if (OrdersTotal()>0)return(0);  
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)//проверка наличия откр.поз
   {
   price[0]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2100,10,0,Ask+g*Point,"My order #",11);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[1]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2200,10,0,Ask+g*Point,"My order #",12);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[2]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2300,10,0,Ask+g*Point,"My order #",13);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[3]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2400,10,0,Ask+g*Point,"My order #",14);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[4]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2500,10,0,Ask+g*Point,"My order #",15);return;
   }
   if (OrdersTotal()>0)
   {  
   for (int i=OrdersTotal()-1;i>=0;i--)
   {  
   if (OrderSelect(SELECT_BY_POS,MODE_TRADES)
   { 
   if (OrderSymbol()!=Symbol()) continue;
         
   if (OrderType()==OP_BUYLIMIT) return(0);
   } 
   }
   }
   if (OrdersTotal()>0)
   { 
   for (i=OrdersTotal()-1;i>=0;i--)
   {  
   if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
   { 
   if (OrderSymbol()!=Symbol()) continue;
   if (OrderType()==OP_BUY)
   {
   for (int j=0;j=5-1;j++}
   { 
   OrderSend (Symbol(),OP_BUYLIMIT,Lot,price[j],10,0,Ask+g*Point,"My order #",11+j);
   Sleep(10*1000);
   } 
   } 
   }
   } 
   }
      return(0);
   }
//+------------------------------------------------------------------+
 

Können Sie mir sagen, warum der EA nicht öffnen eine Position beim Testen, ich verstehe nicht, warum - ich denke, ich schrieb den Code richtig.

extern double Lot=1;
//--------------------------------------------------------------------
int g=20; //тейкпрофит
double price[5];   // Заданный уровень 
//--------------------------------------------------------------------
int init()
  { 
double price[]={1.2100,1.2200,1.2300,1.2400,1.2500}; // объявляем массив из 5 элементов  
   return(0);
  }
//---------------
int start()
   {
   double WMA0=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA1=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA2=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA3=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA4=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);

   // начало открытия ордеров 
   if (OrdersTotal()>0)return(0);// не открывает новые пока не закроются открытые
   
   if (price[0]<WMA0&&price[0]>WMA0) //Buy
   {                           
   price[0]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2100,10,0,Ask+g*Point,"My order #",1);return;
   }
   else
      if (price[1]<WMA1&&price[1]>WMA1) //Buy
   {                           
   price[1]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2200,10,0,Ask+g*Point,"My order #",2);return;
   }
   else
      if (price[2]<WMA2&&price[2]>WMA2) //Buy
   {                           
   price[2]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2300,10,0,Ask+g*Point,"My order #",3);return;
   }
   else
      if (price[3]<WMA3&&price[3]>WMA3) //Buy
   {                           
   price[3]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2400,10,0,Ask+g*Point,"My order #",4);return;
   }
   else
      if (price[4]<WMA4&&price[4]>WMA4) //Buy
   {                           
   price[4]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2500,10,0,Ask+g*Point,"My order #",5);return;
   }

return(0);
} 
/////////////////////////////////////////////////////////////////////////////////////////
 
alex12:

Können Sie mir sagen, warum der EA nicht öffnen eine Position beim Testen, ich bin nicht sicher, warum - ich denke, ich schrieb den Code richtig.


Bei der Eröffnung einer Marktorder (OP_SELL oder OP_BUY) kann nur der letzte Geldkurs (für Verkauf) oder Briefkurs (für Kauf) als Eröffnungskurs verwendet werden.

etwa so.