[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 149

 
ewoke:

Pomeriggio.

Ho bisogno di una storia EURUSD m5/m15 da prima del 2009, qualcuno può condividere la sua? (cioè quello su cui fate il debug dei vostri esperti).

Te ne sarei molto grato.

Premi F2 con il tuo terminale aperto, poi vai su Fx Majors -> EURUSD -> 1 Minute (M1) -> Download.

 
paladin80:
La parentesi graffa di apertura { dovrebbe essere messa prima di price[...]=Ask; (vedi sotto). Leggi di nuovo l'operatore "if". Se non c'è una parentesi subito dopo if, gestisce una sola azione (si ha price[...]=Ask;), se sono richieste più azioni, queste devono essere messe in {...} subito dopo if.

Grazie, ma ho messo le parentesi subito dopo l'istruzione if come hai suggerito,
ma non è cambiato nulla. Vedi lo screenshot - mostra che l'EA ha aperto una posizione di acquisto
e il prezzo è sceso e ha attraversato i livelli di 1,2100 e 1,2200 e le posizioni dell'operatore

se aprire posizioni di acquisto a 1,2100 e 1,2200 - non ha aperto.


 
alex12:
Grazie, ma ho messo le parentesi subito dopo l'istruzione if, come hai suggerito,
Ma non è cambiato nulla. Vedi lo screenshot - mostra che l'Expert Advisor ha aperto una posizione di acquisto
e il prezzo è sceso e ha attraversato i livelli di 1,2100 e 1,2200 e le posizioni della condizione operatore

se aprire posizioni di acquisto a 1,2100 e 1,2200 - non ha aperto.


non è necessario mettere l'operatore return dopo ordersend per finire l'elaborazione del tick?
 
alex12:
Grazie, ma ho messo le parentesi subito dopo l'istruzione if, come hai suggerito,
ma non ha cambiato nulla. vedi lo screenshot - mostra che l'EA ha aperto la posizione di acquisto
e il prezzo è andato giù e ha attraversato i livelli 1,2100 e 1,2200 e le posizioni secondo l'istruzione

Se per aprire posizioni di acquisto a 1,2100 e 1,2200 - non hanno aperto.

Aprite la prima posizione manualmente o volete che gli ordini pendenti siano piazzati dopo che il prezzo ha attraversato un certo livello e poi, in base alla sua presenza? Provate in questo modo:
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);
      }  }  }
}  }
Naturalmente, abbiamo ancora bisogno di gestire gli errori nel caso in cui un ordine in sospeso venga rifiutato dal DC.
 
OlegTs:
Non dovresti mettere l'operatore return dopo ordersend per terminare l'elaborazione dei tick?

Grazie, ho messo l'operatore di ritorno dopo ordersend e non è cambiato nulla.


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:
Aprite la primissima posizione manualmente o volete che gli ordini pendenti siano aperti quando il prezzo raggiunge un certo livello e poi, in base ad esso? Provate quanto segue:. Naturalmente, abbiamo bisogno di una maggiore gestione degli errori nel caso in cui un ordine in sospeso venga rifiutato da DC.

Se il prezzo raggiunge un certo livello e poi apre una posizione ai livelli definiti negli ordini.

Si scopre che abbiamo una posizione su un livello - finché non si chiude allo stesso tempo.

 
alex12:

...

Una posa alla volta sullo stesso livello - finché non si chiudono sulla corrente.

Una strategia rischiosa, non ci scherzerei.
 
paladin80:
Aprite la prima posizione manualmente o volete che gli ordini pendenti siano piazzati dopo che il prezzo ha attraversato un certo livello? Prova questo: Non c'è nessuna gestione degli errori nel caso in cui la tua società di intermediazione rifiuti un ordine in sospeso.

Grazie per il codice di suggerimento ovviamente, ma siccome non sono un buon programmatore non sono riuscito a trovare l'errore:'}' - parentesi non chiuse

Ho guardato il tuo codice in Notepad++ con lo zoom e non ho potuto correggere l'errore.

Capisco. Sono interessato al codice stesso, non al TS.

Genera l'errore '}'. - parentesi sbilanciate

Non so come risolvere il problema.

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);
   }
//+------------------------------------------------------------------+
 

Puoi dirmi perché l'EA non apre una posizione durante il test, non capisco perché - penso di aver scritto il codice correttamente.

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:

Puoi dirmi perché l'EA non apre una posizione durante il test, non sono sicuro del perché - penso di aver scritto il codice correttamente.


Quando si apre un ordine a mercato (OP_SELL o OP_BUY), solo gli ultimi prezzi Bid (per la vendita) o Ask (per l'acquisto) possono essere usati come prezzo di apertura.

qualcosa del genere.

Motivazione: