Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 148

 

Olá.
A função OrderSelect retorna erro 0 (ERR_NO_ERROR - transação comercial foi bem sucedida)??
Como evitar este erro?
Estou anexando o código do programa e as entradas do diário.
Respeitosamente. Shurkin.

//+------------------------------------------------------------------+
//|                                                    PoligonTd.mq4 |
//|                                           17 сентября 2013 года. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "17 сентября 2013 года."
#property link      ""

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----Функция OrderSelect--------------------------------------------+
string Str="#20552937 buy 1.00 GBPUSD at 1.55450";//Строка
int Tct=StrToDouble(StringSubstr(Str,1,9));//Номер ордера
   if(OrderSelect(Tct,SELECT_BY_TICKET)==true)//Выбор ордера по номеру
string OdSmb=OrderSymbol();//Символ ордера
   else Print("OrderSelect() вернул ошибку - ",GetLastError());
Print("Кс:"," Str=",Str,"; Tct ",Tct,"; OdSmb ",OdSmb,"?");//Кс
//----
   return(0);
  }
//+------------------------------------------------------------------+

2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: removed
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: uninit reason 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: Ks: Str=#20552937 buy 1.00 GBPUSD at 1.55450; Tct 20552937; OdSmb ?
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: OrderSelect() retornou erro - 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: carregado com sucesso

 
Shurkin:

Olá.
A função OrderSelect retorna erro 0 (ERR_NO_ERROR - transação comercial foi bem sucedida)??
Como evitar este erro?
Estou anexando o código do programa e as entradas do diário.
Cumprimentos. Shurkin.

2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: removido
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: uninit reason 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: Kc: Str=#20552937 comprar 1,00 GBPUSD a 1,55450; Tct 20552937; OdSmb ?
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: OrderSelect() erro devolvido - 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: carregado com sucesso

Na verdade, não há erro de seleção, o pedido com tal bilhete não existe.
 
Sepulca:
Na verdade, não há erro de seleção, o pedido com tal bilhete não existe.

Bem... Se não houver ordem com este bilhete, OrderSelect() retornará falso

Portanto, parece haver um erro, já que estamos nos mudando para outro. A questão é por que não há erro?

 

Não consigo descobrir como implementar a lógica com o mínimo de esforço.

Se(...) estabelecer uma ordem de parada;

Se(a vida útil do pedido>tempo) retirar o pedido, e se(...) estabelecer um novo pedido;

A dificuldade é que pode haver várias posições queestão abertas, e como lutar contra todas elas? Qual é a maneira mais fácil?

Obrigado!

 

Estou pensando em abandonar a função especial init(). Eu acho que esta é a solução certa, não é ?

A meu ver, é assim:

1. declarar uma variável globalmente, por exemplo, como esta:

gInitTrue = false;

Em seguida, criamos nosso próprio INIT:

bool myInit()
{
  // Инициализируем..
  // неоходимые..
  // нам..
  // переменные..
  return(true);
}

Logo no início, assim:

if (gInitTrue == false)
    myInit();
Seria interessante ouvir a opinião de pessoas mais experientes sobre a adequação desta abordagem, bem como sobre a correção de minha proposta de solução para este problema.
 
Sepulca:

Mais amortecedores.

Oops, apanhei o erro. Eu também precisava acrescentar 2 cores, para 2 tampões.
 
hoz:

Estou pensando em abandonar a função especial init(). Eu acho que esta é a solução certa, não é ?

A meu ver, é assim:

1. declarar uma variável globalmente, por exemplo, como esta:

Em seguida, criamos nosso próprio INIT:

Logo no início, assim:

Seria interessante ouvir a opinião de pessoas mais experientes sobre a adequação desta abordagem, bem como sobre a correção de minha proposta de solução para este problema.

Qual é a novidade de sentir uma nova solução? :-))

Uma coisa, porra. Nunca precisou fazer isso dessa maneira.

 
artmedia70:

Bem... Se não houver ordem com este bilhete, OrderSelect() retornará falso

Portanto, parece haver um erro, já que estamos nos mudando para outro. A questão é por que existe zero?



Eu verifiquei - se o número do ingresso coincidir - tudo funciona bem,

Se não - função retorna Falso, mas OrderSelect() é silencioso como se nada acontecesse, ZERO e nada acontece.

 
Zhunko:

Qual é a novidade de sentir uma nova solução? :-))

Uma coisa, porra. Nunca precisou fazer isso dessa maneira.



Mas mais ao ponto? Tem sido discutido que o INIT pode falhar em caso de, por exemplo, desconexões ou outras situações similares. Porque não reinicializa os próprios dados depois, em caso de contingências, e só funciona uma vez! Portanto, esta não é realmente a opção certa.
 

A pergunta é monótona, mas a resposta não está em lugar nenhum, ou talvez eu tenha apenas parecido errado:

Em funções, ou talvez em outro lugar, já vi o & símbolo depois do tipo de dado e, se não estou enganado, uma vez &&

func(int& mm_mode, string symbol, int magic,bool& stop) {

Para que serve? O que ele faz? (Referência, se você puder saber mais sobre isso)))

Razão: