Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
In alternativa, ditemi come scrivere questa funzione di cancellazione in questa condizione.
dovete prima definire il biglietto dell'ordine pendente da cancellare
se il biglietto è nullo o indefinito - allora non cancellarlo
Questo è per ordini diversi. La funzione di rimuovere uno da una condizione, rimuovendo l'altro senza una condizione.
La domanda è perché nel mio caso la funzione di cancellazione funziona con successo senza una condizione, ma se la metto in una condizione, genera un errore quando la condizione si verifica.
dovete prima definire il ticketD e il ticketUP da cancellare
Se il biglietto è nullo o indefinito, allora nessuna cancellazione
Così definito, un ticketD, l'altroticketUP .
O sto mischiando qualcosa?
Così definito, un ticketD, l'altroticketUP .
O sto confondendo qualcosa?
Come può essere definito seticketUP è già cancellato?
L'hai cancellato, aggiorna ticketUP allo stato che ti serve, in cui la condizione per cancellare il ticketUP non funzionerà, e anche questa condizione deve essere aggiunta al codice
Come può essere definito seil ticketUP è già stato cancellato?
L'avete cancellato, aggiornate ticketUP allo stato che vi serve, in cui la condizione per cancellare il biglietto non funzionerà, e anche questa condizione deve essere aggiunta al codice.
Così, gli ordini conticketD, un altroticketUP sono creati prima (secondo la condizione di assenza), e dopo sono già cancellati.
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 sono confuso, cosa?
Così gli ordini conticketD, un altroticketUP sono creati prima (secondo la condizione di assenza), e poi sono cancellati.
if(BuyLimitCount()==0&& BuyCount()==0){slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointsl*Point,5);
int ticketUP=OrderSend(Symbol(),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red);
se(ticketUP==-1)Print("ERROR OP_BUY"); altrimentiPrint("OP_BUY OK");}
se(SellLimitCount()==0&& SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1+pointsl*Point,5);
int ticketD=OrderSend(Symbol(),OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue);
se(ticketD==-1)Print("ERROR OP_SELL"); altrimentiPrint("OP_SELL OK");}
if(x!=maxpr1){x=maxpr1;OrderDelete(ticketD);}
OrderDelete(ticketUP);
Se confondo cosa?
Ancora una volta avete un comando senza una condizione:
OrderDelete(ticketUP);
Perché non hai cambiato il codice?
Prenditi un po' di tempo per "pensare" almeno e sistemare la cosa + leggi quello che hai scritto, i consigli che ti sono stati dati.
A proposito, qui c'è il freelance se non puoi...
Quindi di nuovo avete un comando senza una condizione:
OrderDelete(ticketUP);
Perché non avete cambiato il codice?
Prenditi un po' di tempo per "pensare" almeno e capirlo + leggi cosa ti hanno scritto, quali consigli ti hanno dato.
A proposito, qui c'è il freelance se non funziona...
Senza una condizione - perché è così che avviene la rimozione, e con una condizione - no. Così ha scritto per indicare che non posso. Dovresti scriverlo in questo modo:
OrderDelete(ticketD);
OrderDelete(ticketUP);
Poi ogni tick cancella gli ordini già creati su ogni tick (secondo la condizione di assenza). E se lo scriviamo con la condizione
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Poi, quando la condizione si verifica, scrive un errore di cancellazione.
Come posso scrivere la cancellazione degli ordini specificati in questa condizione?
È senza condizione - perché è così che funziona la cancellazione, ma con una condizione no. L'ho scritto in questo modo per indicare ciò che non posso fare. Se lo scrivi in questo modo
OrderDelete(ticketD);
OrderDelete(ticketUP);
Poi ogni tick cancella gli ordini già creati su ogni tick (secondo la condizione di assenza). E se lo scriviamo con la condizione
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Poi, quando la condizione si verifica, scrive un errore di cancellazione.
Come dovremmo scrivere la condizione sulla cancellazione degli ordini specificati?
Non puoi rimuovere la condizione per cancellare gli ordini!
ticketUP e ticketD dovrebbero essere scritti nelle variabili globali quando si apre un biglietto
GlobalVariableSet("ticketUP",ticketUP);
GlobalVariableSet("ticketD",ticketD);
e leggere da lì prima di cancellare un biglietto in sospeso
ticketUP=GlobalVariableGet("ticketUP")
ticketD=GlobalVariableGet("ticketD")
A proposito, guarda lì (in globale) - quello che hai, che biglietto è scritto
Penso che dopo questo tutto funzionerà come dovrebbe
{
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 del codice del programma:
#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);
}
...
Dopo aver provato ad eseguire l'Expert Advisor su dati reali, viene lanciato il seguente errore: internal error #-1005
Cosa faccio di sbagliato? Grazie in anticipo!