[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 42

 
sting-igor:
Os DoCs têm um limite para o número de negócios?

Alguns têm não apenas um limite no número de acordos, mas até mesmo um limite no número de solicitações.

Eles são tão inventores! :-))

 
Boa tarde!
Da última vez que fiz uma pergunta sobre a abertura de pedidos, agora tenho uma pergunta sobre o fechamento dos mesmos).
Abaixo está um pedaço de código com funções que abrem ordens e as fecham.
Quando meu consultor especializado está trabalhando, recebo uma "peculiaridade" como esta: por exemplo, 10 pedidos diferentes são abertos e 2 deles são fechados no processo,

Os demais permanecem abertos até o final do teste, embora um fechamento condicional de uma ordem deva ocorrer quando outra for aberta.

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

Outra pergunta sobre os erros 4051 e 134 ao usar OrderClose(), o que eles significam? Eu copiei informações do 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:

A última opção parece ter funcionado mais ou menos bem. Embora seja possível simplificar os cálculos
Diga-me por que você tem a função iMAOnArray em um loop separado?
 

Por favor, avise! Como posso fechar dois pedidos pendentes com a mesma magia, mas com lotes diferentes.


int start()

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

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

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

return(MyLastBullOpenPrice);
}

 
Fox_RM:
Boa tarde!
Da última vez que fiz uma pergunta sobre a abertura de pedidos, agora tenho uma pergunta sobre o fechamento dos mesmos).
Abaixo está um pedaço de código com funções que abrem ordens e as fecham.
Quando meu consultor especializado está trabalhando, recebo uma "peculiaridade" como esta: por exemplo, 10 pedidos diferentes são abertos e 2 deles são fechados no processo,

Os demais permanecem abertos até o final do teste, embora um fechamento condicional de uma ordem deva ocorrer quando outra for aberta.

Outra pergunta sobre os erros 4051 e 134 ao usar OrderClose(), o que eles significam? Eu copiei informações do registro.

134 - sem dinheiro, 4051 - parâmetros ruins passados para a função.

Quanto ao ponto - verifique se a variável magick é atribuída apenas uma vez, de preferência em função init(), caso contrário, cada ordem terá sua própria magick e o resultado será algo como você descreve.

 

Por favor, ajude-me a adicionar (ou escrever) uma função de substituição de caracteres para uma cadeia de caracteres através de matrizes.

Ter duas matrizes de personagens:

símbolos de corda1[] = {"a", "b", "c", "d"};
símbolos de corda2[] = {"1", "2", "3", "4"};


Tentou escrever uma função que substituiria o texto badc por 2143, com base nas arrays, acabou assim:

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

Eu sei que é errado e não consigo montar o conjunto em um fio. Por favor, ajude.

 
Zhunko:

Alguns têm não apenas um limite no número de acordos, mas até mesmo um limite no número de solicitações.

Eles são tão inventores! :-))

há algum bloqueio contra a intromissão deles em seus assuntos?
 
Lians:

Por favor, ajude-me a adicionar (ou escrever) uma função de substituição de caracteres em uma cadeia através de matrizes.

Ter duas matrizes de personagens:

símbolos de corda1[] = {"a", "b", "c", "d"};
símbolos de corda2[] = {"1", "2", "3", "4"}


Tentou escrever uma função que substituiria o texto badc por 2143, com base nas arrays, acabou assim:

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

Eu sei que é errado e não consigo montar o conjunto em um fio. Por favor, ajude.

Você deveria ter encontrado o índice do personagem na matriz de substituição, então por que criar outra matriz?

Tente adicioná-la a uma variável de texto simples no primeiro laço:

ReplaceSymbolsInStr(texto da corda)

{


símbolos de corda1[] = {"a", "b", "c", "d"};

símbolos de corda2[] = {"1", "2", "3", "4"};

string textNew="";

int textLen = StringLen(texto);

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

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

{
if (symbols1[i2]==UmSímbolo) {textNew = textNew + symbols2[ i2 ]; i2=ArraySize(symbols1) ; }

}

}

retornar (textNew);

}

 


Ou é ainda mais fácil assim:

ReplaceSymbolsInStr(texto da corda)

{


símbolos de corda1[4] = {"a", "b", "c", "d"}; // tamanho da matriz pelo número de símbolos nela contidos

string textNew="";

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

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

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

{
if (símbolos1[i2]==UmSímbolo )

{

textNew = textNew + (i2+1); // o número do símbolo em si é adicionado ao texto retornado

i2=ArraySize(symbols1) ; // completou o ciclo de busca

}

}

}

retornar (textNew);

}

 

Bom dia!

Você poderia aconselhar (ou dar um link de exemplo), como enviar dados em formato csv automaticamente para o e-mail?

Obrigado.