Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 31

 
Alternativamente, aconselhar como escrever esta função de exclusão nesta condição.
 
spoiltboy:
Alternativamente, diga-me como escrever esta função de exclusão nesta condição.

você deve primeiro definir o bilhete da ordem pendente a ser apagada

se o bilhete for nulo ou indefinido - então não o apague

 
spoiltboy:

Isto é para ordens diferentes. A função de remover um por uma condição, removendo o outro sem uma condição.

A questão é por que no meu caso a função de eliminação funciona com sucesso sem uma condição, mas se eu a coloco em uma condição, ela gera um erro quando a condição ocorre.

A condição deve ser corrigida, você não pode fazê-lo sem a condição, os logs ocuparão todo o disco rígido
 
Renat Akhtyamov:

você deve primeiro definir o ticketD e o ticketUP a ser apagado

Se o bilhete for nulo ou indefinido, então nenhuma exclusão

Assim definido, um ticketD, o outroticketUP .

Ou eu estou misturando algo?

 
spoiltboy:

Assim definido, um ticketD, o outroticketUP .

Ou estou confundindo algo?

Como pode ser definido se oticketUP já está apagado?

Você o apagou, atualize o ticketUP para o estado necessário, no qual a condição para apagar o ticketUP não funcionará, e esta condição deve ser adicionada ao código também

 
Renat Akhtyamov:

Como pode ser definido seo ticketUP já foi eliminado?

Você o apagou, atualize o ticketUP para o estado que você precisa, no qual a condição para apagar o ticket não funcionará, e esta condição também deve ser adicionada ao código.

Assim, os pedidos comticketD, outroticketUP são criados primeiro (de acordo com a condição de ausência), e depois disso eles já são eliminados.

if(BuyLimitCount()==0&& BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
int ticketUP=OrderSend(Symbol(),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red);
if(ticketUP===-1)Print("ERROR OP_BUY"); elsePrint("OP_BUY OK");}

if(SellLimitCount()==0&& SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
int ticketD=OrderSend(Symbol(),OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue);
if(ticketD===-1)Print("ERROR OP_SELL"); elsePrint("OP_SELL OK");}

if(x!=maxpr1){x=maxpr1;OrderDelete(ticketD);}

OrderDelete(ticketUP);

Se eu estiver confuso, o quê?

 
spoiltboy:

Assim, os pedidos comticketD, outroticketUP são criados primeiro (de acordo com a condição de ausência), e depois são eliminados.

se(BuyLimitCount()==0&& BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pontosl*Point,5);
int ticketUP=OrderSend(Symbol(),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red);
if(ticketUP==-1)Print("ERROR OP_BUY"); elsePrint("OP_BUY OK");}

se(SellLimitCount()==0&& SellCount() ==0){
slS=NormalizarDuplo(maxpr1+pontosl*Point,5);
tpS=NormalizarDuplo(maxpr1+pontosl*Point,5);
int ticketD=OrderSend(Symbol(),OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue);
se(ticketD===-1)Print("ERROR OP_SELL"); caso contrárioPrint("OP_SELL OK");}

if(x!=maxpr1){x=maxpr1;OrderDelete(ticketD);}

OrderDelete(ticketUP);

Se eu confundir o quê?

Novamente você tem um comando sem uma condição:

OrderDelete(ticketUP);

Por que você não mudou o código?

Dê um tempo para "pensar", pelo menos, e resolva isso + leia o que você escreveu, que conselho foi dado.

A propósito, há aqui freelancer , se não puder...

 
Renat Akhtyamov:

Portanto, novamente você tem um comando sem uma condição:

OrderDelete(ticketUP);

Por que você não mudou o código?

Dê um tempo para "pensar" pelo menos e descubra + leia o que foi escrito, que conselho lhe foi dado.

A propósito, há aqui freelance se não funcionar...

É sem condição - porque é assim que a remoção ocorre, e com uma condição - não. Por isso, escrevi para indicar que não posso. Você deve escrevê-lo desta maneira:

OrderDelete(ticketD);

OrderDelete(ticketUP);

Em seguida, cada carrapato elimina os pedidos já criados em cada carrapato (de acordo com a condição de ausência). E se o escrevemos com a condição:

if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}

Então, quando a condição ocorre, escreve um erro de eliminação.

Como eu escrevo a eliminação das ordens especificadas nesta condição?

 
spoiltboy:

É sem uma condição - porque é assim que a eliminação funciona, mas com uma condição não funciona. Escrevi desta maneira para apontar o que não posso fazer. Se você escrever desta forma:

OrderDelete(ticketD);

OrderDelete(ticketUP);

Em seguida, cada carrapato elimina os pedidos já criados em cada carrapato (de acordo com a condição de ausência). E se o escrevemos com a condição:

if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}

Então, quando a condição ocorre, escreve um erro de exclusão.

Como devemos escrever a condição sobre a eliminação das ordens especificadas?


Você não pode remover a condição para eliminar ordens!

ticketUP e ticketD devem ser escritos nas variáveis globais ao abrir um ticket

GlobalVariableSet("ticketUP",ticketUP);

GlobalVariableSet("ticketD",ticketD);

e leia a partir daí antes de apagar um bilhete pendente

ticketUP=GlobalVariableGet("ticketUP")

ticketD=GlobalVariableGet("ticketD")

A propósito, olhe lá (em global) - o que você tem, que bilhete está escrito

Penso, que depois disso tudo funcionará como deveria

 
Olá! Quem pode ajudar a resolver o problema, estou escrevendo uma víbora para uma matriz dinâmica, aqui está o código da classe:
class CArray
{  
private:
   template <typename T>
   T _array[];
   int _index;
   int _err;
   int _err_sys;
public:
   CArray(){_index = -1; _err = 0; _err_sys = 0;}
   ~CArray(){}
  // template <typename T>
   T operator[](int i){
      if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
      return (_array[i]);
   }
   T at(int i){  
      if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
      return (_array[i]);
   }
   void push_back(T value){
      _array[++_index] = value;
   }
};

parte do código do programa:

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.1"
#property strict

#include "Array.mqh"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
CArray *array;


int OnInit()
  {
  int b = 1;
   array = new CArray();
   array.push_back(b);
   int a = array.at(0);
  
//---
   return(INIT_SUCCEEDED);
  }
...

Após tentar executar o Expert Advisor em dados reais, o seguinte erro é lançado: erro interno #-1005

O que eu faço de errado? Obrigado de antemão!


Razão: