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

 
sting-igor:
I DoC hanno un limite al numero di scambi?

Alcuni hanno non solo un limite al numero di offerte, ma anche un limite al numero di richieste.

Sono proprio degli inventori! :-))

 
Buon pomeriggio!
L'ultima volta ho fatto una domanda sull'apertura degli ordini, ora ho una domanda sulla loro chiusura).
Qui sotto c'è un pezzo di codice con funzioni che aprono gli ordini e li chiudono.
Quando il mio Expert Advisor funziona, ottengo una "particolarità" come questa: per esempio, vengono aperti 10 ordini diversi e 2 di essi vengono chiusi nel processo,

Gli altri rimangono aperti fino alla fine del test, anche se la chiusura condizionale di un ordine dovrebbe avvenire quando un altro viene aperto.

........................
magick=MathRand(); 
     
     if(NewBar())
 {     

  //---- Условие SELL
if(MAarrUP1[j]>0.35 && MAarrUP2[j]>1.8)
     {
 closeDnOrd();OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,0,magick,0,Blue);
     } 
  
  //---- Условие BUY
    if(MAarrDN1[j]<-0.35 && MAarrDN2[j]<-1.8)
    {
closeUpOrd();OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,0,magick,0,Red);
     }
}
............
//--------------------------------------------------------- Функции

//----- Функция закрытия селл

void closeUpOrd()
  {
  for(int i=0;i<=OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=magick || OrderSymbol()!=Symbol()) continue;

  if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
      } 
    }

//---- Функция закрытия бая

void closeDnOrd()
  {
  for(int i=0;i<=OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=magick || OrderSymbol()!=Symbol()) continue;

 if(OrderType()==OP_BUY)
{
 OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
}
      } 
  }

Un'altra domanda sugli errori 4051 e 134 quando si usa OrderClose(), cosa significano? Ho copiato le informazioni dal registro.

02:54:37 2010.10.17 23:16  Ti&Pi_Speeder_Exp AUDUSD,M1: invalid ticket for OrderModify function
02:54:37 2010.10.17 23:16  Ti&Pi_Speeder_Exp AUDUSD,M1: OrderModify error 4051


02:54:37 2010.10.17 23:22  Ti&Pi_Speeder_Exp AUDUSD,M1: OrderSend error 134

 
Vinin:

L'ultima opzione sembra aver funzionato più o meno bene. Anche se è possibile semplificare i calcoli
Dimmi perché hai la funzione iMAOnArray in un ciclo separato?
 

Per favore, consigliatemi! Come posso chiudere due ordini pendenti con la stessa magia, ma con lotto diverso.


int start()

{
double MyLastBullOpenPrice=0;
for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
{
OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==12345 && OrderType()==OP_BUY)
{
MyLastBullOpenPrice=OrderOpenPrice();
double Cena=OrderOpenPrice()+5*Point;
double Totalcena= Bid;

if (Totalcena>Cena)
{
if (OrdersTotal()>0)
{ for (int i=OrdersTotal()-1; i>=0; i--)
{ se (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{ if(OrderMagicNumber()==12345)

{ if(OrderDelete(OrderTicket())==true)
{
Print("Error = ",GetLastError()); return(0);
}
} } } }
}
}

return(MyLastBullOpenPrice);
}

 
Fox_RM:
Buon pomeriggio!
L'ultima volta ho fatto una domanda sull'apertura degli ordini, ora ho una domanda sulla loro chiusura).
Qui sotto c'è un pezzo di codice con funzioni che aprono gli ordini e li chiudono.
Quando il mio Expert Advisor funziona, ottengo una "particolarità" come questa: per esempio, vengono aperti 10 ordini diversi e 2 di essi vengono chiusi nel processo,

Gli altri rimangono aperti fino alla fine del test, anche se la chiusura condizionale di un ordine dovrebbe avvenire quando un altro viene aperto.

Un'altra domanda sugli errori 4051 e 134 quando si usa OrderClose(), cosa significano? Ho copiato le informazioni dal registro.

134 - niente soldi, 4051 - cattivi parametri passati alla funzione.

Per quanto riguarda il punto - controlla che la variabile magick sia assegnata solo una volta, preferibilmente nella funzione init(), altrimenti, ogni ordine avrà il proprio magick e il risultato sarà qualcosa come quello che descrivi.

 

Per favore, aiutatemi ad aggiungere (o scrivere) una funzione di sostituzione dei caratteri in una stringa attraverso gli array.

Avere due array di caratteri:

string symbols1[] = {"a", "b", "c", "d"};
string symbols2[] = {"1", "2", "3", "4"};


Ho provato a scrivere una funzione che sostituisse il testo badc con 2143, sulla base degli array, e si è rivelata come questa:

string ReplaceSymbolsInStr(string text){
string textMod[] ={""};
string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};
int textLen = StringLen(text);
for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)
{
if (symbols1[i2]==OneSymbol) int PosSymbolIn1array=i2;
}
return(-1);

string OneSymbolMod = symbols2[PosSymbolIn1array];
int NewArraySize = ArraySize(textMod)+1;
ArrayResize(textMod,NewArraySize);
textMod[i1]=OneSymbolMod;
string textNew;
textNew=StringConcatenate(textMod[1],textMod[2]...);//собрать массив в строку вообще не могу :(
return (textNew);
}
}

So che è sbagliato e non posso assolutamente assemblare l'array in una stringa. Per favore, aiutatemi.

 
Zhunko:

Alcuni hanno non solo un limite al numero di offerte, ma anche un limite al numero di richieste.

Sono proprio degli inventori! :-))

c'è qualche blocco contro la loro ingerenza nei vostri affari?
 
Lians:

Per favore, aiutatemi ad aggiungere (o scrivere) una funzione di sostituzione dei caratteri in una stringa attraverso gli array.

Avere due array di caratteri:

string symbols1[] = {"a", "b", "c", "d"};
string symbols2[] = {"1", "2", "3", "4"}


Ho provato a scrivere una funzione che sostituisse il testo badc con 2143, sulla base degli array, finendo così:

string ReplaceSymbolsInStr(string text){
string textMod[] ={""};
string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};
int textLen = StringLen(text);
for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)
{
if (symbols1[i2]==OneSymbol) int PosSymbolIn1array=i2;
}
return(-1);

string OneSymbolMod = symbols2[PosSymbolIn1array];
int NewArraySize = ArraySize(textMod)+1;
ArrayResize(textMod,NewArraySize);
textMod[i1]=OneSymbolMod;
string textNew;
textNew=StringConcatenate(textMod[1],textMod[2]...);//собрать массив в строку вообще не могу :(
return (textNew);
}
}

So che è sbagliato e non posso assolutamente assemblare l'array in una stringa. Per favore, aiutatemi.

Si suppone che abbiate trovato l'indice del carattere nell'array di sostituzione, quindi perché creare un altro array?

Provate ad aggiungerlo ad una variabile di testo semplice nel primo ciclo:

stringa ReplaceSymbolsInStr(stringa testo)

{


stringa symbols1[] = {"a", "b", "c", "d"};

stringa symbols2[] = {"1", "2", "3", "4"};

stringa textNew="";

int textLen = StringLen(testo);

for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)

{
if (symbols1[i2]==OneSymbol) {textNew = textNew + symbols2[ i2 ]; i2=ArraySize(symbols1) ; }

}

}

return (textNew);

}

 


Oppure è ancora più facile così:

stringa ReplaceSymbolsInStr(stringa testo)

{


stringa symbols1[4] = {"a", "b", "c", "d"}; // dimensione dell'array per il numero di simboli in esso contenuti

stringa textNew="";

per (int i1=0; i1< StringLen(testo) ; i1++)

{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)

{
if (symbols1[i2]==OneSymbol )

{

textNew = textNew + (i2+1); // il numero del simbolo stesso è aggiunto al testo restituito

i2=ArraySize(symbols1) ; // completato il ciclo di ricerca

}

}

}

return (textNew);

}

 

Buona giornata!

Potresti per favore consigliare (o dare un link di esempio), come inviare i dati in formato csv automaticamente all'e-mail?

Grazie.