Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 887

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
fare void start() e non ci sarà alcun errore
Grazie! L'errore è scomparso, ma la posizione ancora non si chiude.
Non c'è abbastanza codice per dire esattamente qual è il motivo
Estratto:
void CritCloseBuy()
{
if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&&(MA_1>MA_2)) || ((Yellow_0-Red_0)>(Yellow_1-Red_1)&& ((MB_0<MB_1)&&(MB_1>MB_2))))
while(true)
{
ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);
if (ord_close = false)
{
Comment("BAY position closing failed with error #",GetLastError());//Messaggio dell'errore
break;
}
else
{
Ord=0;
break;
}
}
Potrebbe essere la ragione dell'apertura:
void CritOpen()
{
if (//condizione di apertura//)
while(true)
{
ticket=OrderSend(Symbol(),OP_BUY,0..1,Ask,0,0,0,NULL,10011,0,clrNONE); //aprire ordine BAY, MAGIC 10011
if(ticket<=0)
{
Comment("Apertura della posizione BAY-10011 fallita con errore #",GetLastError());
break;
}
else
{
Comment("BAY-10011 posizione aperta con lotto 0.1,prezzo", Ask);
Ord=(Ord+1);
break;
}
}
Estratto:
prima di ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);
sarebbe bello poter selezionare l'ordine utilizzando la funzione OrderSelect(). Non vedo lo scopo di un tale ciclo intorno alla funzione di chiusura...
prima di ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);
sarebbe bello poter selezionare l'ordine utilizzando la funzione OrderSelect().
Ho l'unico. Beh, in realtà era così all'inizio. Ho iniziato a cercare la causa usando il metodo del palpeggiamento. Non capisco il senso del ciclo.
Imbroglio solo per analogia: se ho aperto con il loop, allora dovrei chiudere anche...
Igor Kim ha il nostro esempio:
void start() {
ManagePositions();
}
//+----------------------------------------------------------------------------+
//| Chiudere le posizioni al prezzo di mercato|
//| Parametri:|
//| sym - nome dello strumento ("" - simbolo corrente)|
//| op - operazione(-1 - qualsiasi posizione)|
//| mn - MagicNumber(-1 - qualsiasi magia) |
//+----------------------------------------------------------------------------+
void ClosePositions(string sym="", int op=-1, int mn=-1) {
int i, k=OrdersTotal();
if (sym=="") sym=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sym && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
}
if (OrderType()==OP_SELL) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
}
}
}
}
}
}
Ma il compilatore richiede di controllare il valore di ritorno di OrderClose
Igor Kim ha il nostro esempio:
Ma il compilatore richiede che il valore di ritorno di OrderClose sia controllato
Bene, fate come nell'esempio - prima selezionate e poi chiudete. Non importa se è l'unico ordine o un milione di ordini, perché ogni ordine deve essere selezionato prima.
Il controllo è molto semplice if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell)) Print("Closing error #", GetLastError());
Igor Kim ha il nostro come esempio:
...
Ma il compilatore richiede che il valore di ritorno di OrderClose sia controllato
Quindi fate come nell'esempio: prima selezionate e poi chiudete. Non importa se c'è un solo ordine o un milione di ordini, ognuno deve essere selezionato per primo.
Il controllo è molto semplice if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell)) Print("Closing error #", GetLastError());
Ho fatto il seguente: if (!OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red))
{
Comment("The BAYposition closure failed with error #",GetLastError());
break;
}
else
{
Ord=0;
break;
}
Continua a chiedere "il valore di ritorno dovrebbe essere controllato .
Fatto così:
ord_close=OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if (ord_close = false)
{
Comment("BAY position closing failed with error #",GetLastError()); //Messaggio di errore
break;
}
else
{
Ord=0;
break;
}
Silenzioso. Ma in entrambi i casi non chiude la posizione
ZS: Penso che ci sia un errore nella definizione delle condizioni di chiusura e di apertura
Il post qui sopra mostra un esempio di una condizione di chiusura. Cosa potrebbe esserci di sbagliato lì?
È silenzioso. Ma in entrambi i casi non chiude la posizione
ZS: Penso che ci sia un errore nella definizione delle condizioni di chiusura e apertura delle posizioni
Nel post sopra, c'è un esempio di una condizione di chiusura. Cosa potrebbe esserci di sbagliato lì?
Beh, se silenziosamente, senza errori, non si chiude, allora la condizione di chiusura non è giusta. Dobbiamo ripensare e riscrivere proprio questa condizione.
Le parentesi qui sono in qualche modo disposte male:
if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&&(MA_1>MA_2))) || ((Yellow_0-Red_0)>(Yellow_1-Red_1) && ((MB_0<MB_1)&&(MB_1>MB_2))))
Che ne dite di questo?
if (((Yellow_0-Red_0<Yellow_1-Red_1) && (MA_0<MA_1 && MA_1>MA_2)) || ((Yellow_0-Red_0>Yellow_1-Red_1) && (MB_0<MB_1 && MB_1>MB_2)))