[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 42

 
sting-igor:
¿Los DoCs tienen un límite en el número de operaciones?

Algunos tienen no sólo un límite en el número de ofertas, sino incluso un límite en el número de solicitudes.

Son unos inventores. :-))

 
¡Buenas tardes!
La última vez hice una pregunta sobre la apertura de pedidos, ahora tengo una pregunta sobre el cierre de los mismos).
A continuación se muestra un trozo de código con funciones que abren órdenes y las cierran.
Cuando mi Asesor Experto está trabajando, tengo una "peculiaridad" como esta: Por ejemplo, se abren 10 órdenes diferentes y 2 de ellas se cierran en el proceso,

El resto permanece abierto hasta el final de la prueba, aunque el cierre condicional de una orden debe producirse cuando se abra otra.

........................
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);
}
      } 
  }

Otra pregunta sobre los errores 4051 y 134 al utilizar OrderClose(), ¿qué significan? He copiado la información del 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:

La última opción parece haber funcionado más o menos bien. Aunque es posible simplificar los cálculos
¿Dime por qué tienes la función iMAOnArray en un bucle separado?
 

Por favor, aconséjeme. Cómo puedo cerrar dos órdenes pendientes con la misma magia, pero con diferente lote.


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--)
{ si (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{ if(OrderMagicNumber()==12345)

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

return(MyLastBullOpenPrice);
}

 
Fox_RM:
¡Buenas tardes!
La última vez hice una pregunta sobre la apertura de pedidos, ahora tengo una pregunta sobre el cierre de los mismos).
A continuación se muestra un trozo de código con funciones que abren órdenes y las cierran.
Cuando mi Asesor Experto está trabajando, tengo una "peculiaridad" como esta: Por ejemplo, se abren 10 órdenes diferentes y 2 de ellas se cierran en el proceso,

El resto permanece abierto hasta el final de la prueba, aunque el cierre condicional de una orden debe producirse cuando se abra otra.

Otra pregunta sobre los errores 4051 y 134 al utilizar OrderClose(), ¿qué significan? He copiado la información del registro.

134 - No hay dinero, 4051 - Parámetros mal pasados a la función.

En cuanto al punto - comprueba que la variable magick se asigna sólo una vez, preferiblemente en la función init(), de lo contrario, cada orden tendrá su propio magick y el resultado será algo como lo que describes.

 

Por favor, ayúdenme a añadir (o escribir) una función de sustitución de caracteres en una cadena mediante arrays.

Tener dos matrices de caracteres:

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


Intenté escribir una función que sustituyera el texto badc por 2143, basándome en las matrices, resultó así:

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

Sé que está mal y que no puedo ensamblar el array en una cadena. Por favor, ayuda.

 
Zhunko:

Algunos tienen no sólo un límite en el número de ofertas, sino incluso un límite en el número de solicitudes.

Son unos inventores. :-))

¿hay algún bloqueo para que no se metan en tus asuntos?
 
Lians:

Por favor, ayúdenme a añadir (o escribir) una función de sustitución de caracteres en una cadena mediante arrays.

Tener dos matrices de caracteres:

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


Intenté escribir una función que sustituyera el texto badc por 2143, basándome en las matrices, resultó así:

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

Sé que está mal y que no puedo ensamblar el array en una cadena. Por favor, ayuda.

Se supone que has encontrado el índice del personaje en la matriz de sustitución, así que ¿por qué crear otra matriz?

Intenta añadirlo a una variable de texto plano en el primer bucle:

string ReplaceSymbolsInStr(string text)

{


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

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

string textNew="";

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) {textNew = textNew + symbols2[ i2 ]; i2=ArraySize(symbols1) ; }

}

}

return (textNew);

}

 


O incluso es más fácil así:

string ReplaceSymbolsInStr(string text)

{


string symbols1[4] = {"a", "b", "c", "d"}; // tamaño del array por el número de símbolos que contiene

string textNew="";

for (int i1=0; i1< StringLen(text) ; i1++)

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

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

{
if (symbols1[i2]==OneSymbol )

{

textNew = textNew + (i2+1); // el número del propio símbolo se añade al texto devuelto

i2=ArraySize(symbols1) ; // completado el bucle de búsqueda

}

}

}

return (textNew);

}

 

¡Buenos días!

¿Podría aconsejar (o dar un enlace de ejemplo), cómo enviar los datos en formato csv automáticamente al correo electrónico?

Gracias.