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
Sì, - credo di sì! Grazie, TheXpert!
Ci proverò!
Non sono un esperto. Ho questa nota su questa funzione nella mia cartella "help", oltre a tutto ciò che è "normale" (l'ho copiata anche qui - non ricordo quale ramo) -
E la funzione OrderCloseBy è usata SOLO per chiudere 2 ordini simultaneamente, a quello spread è salvato.
Dovremmo camminare attraverso il terminale programmaticamente, memorizzare tutti i numeri di ordine aperti e le loro caratteristiche, selezionare il numero di ordine principale, abbinarlo con il desiderato (da disponibile) ordine contatore e incollare quel numero.
// Cioè, da quanto ho capito, con questa funzione si possono chiudere solo due posizioni di contatori, preselezionate.
Non c'è altro da dire.
Sì, beh...
Ecco perché si chiama così.
Permettetemi di riformulare la domanda se c'è qualche differenza economica nelle seguenti due possibilità di inversione di posizione:
1) Chiudere SELL con 1 lotto di volume usando la funzione OrderClose e poi aprire BUY con 1 lotto di volume
2) Mentre SELL è aperto in 1 lotto, prima aprite BUY in 2 lotti e poi chiudete SELL con la funzione OrderCloseBy, che lascerà anche una posizione BUY aperta in 1 lotto.
Secondo l'esempio nella cartella di lavoro, uno spread rimarrà nella variante 2).
https://book.mql4.com/ru/trading/orderclose - qui potete vedere come funziona la funzione OrderCloseBy(). Ho provato a fare lo stesso su demo - ha davvero una diffusione minore. Ma ancora non funziona su Expert Advisor... Sono davvero confuso...
Sei stato in due thread con questa domanda. Sei curioso.
Non ci sono soluzioni semplici. Con il rilascio di MQL5 questo problema scomparirà completamente.
Posso suggerire un paio di procedure che uso nei miei EA.
//Rileva lo stato attuale degli ordini aperti:
void CheckOrders()
{
int i;
BuyOrder = false;
SellOrder = false;
BuyLots = 0.0;
SellLots = 0.0;
for ( i=0; i < OrdiniTotali(); i++)
{
OrderSelect(i, SELECT_BY_POS);
se ( OrderSymbol() == Symbol())
{
se ( OrderType() == OP_BUY )
{
BuyOrder = true;
LastBuyLots = OrderLots();
BuyLots += LastBuyLots; // somma delle posizioni Buy aperte
BuyTicket = OrderTicket();
}
se ( OrderType() == OP_SELL)
{
SellOrder = true;
LastSellLots = OrderLots();
SellLots += LastSellLots; // somma delle posizioni di vendita aperte
SellTicket = OrderTicket();
}
}
}
}
/Ordini di apertura (chiusura):
void TradeVariant( int variant )
{
interruttore ( variante )
{
// if (Pattern < 0 && !BuyOrder && !SellOrder && !FridayLastHour) variant = 1;
// segnale di vendere, nessun ordine è aperto e non è l'ultima ora di venerdì
// aprire un ordine di vendita
caso 1:
OpenSellOrder(Lots);
pausa;
// if (Pattern < 0 && BuyOrder && !SellOrder && !FridayLastHour) variant = 2;
// segnale di vendere, c'è un ordine di acquisto aperto, nessun ordine di vendita
// non è l'ultima ora del venerdì - stiamo girando
caso 2:
OpenSellOrder(Lots + BuyLots);
pausa;
// if (Pattern < 0 && BuyOrder && !SellOrder && FridayLastHour) variant = 3;
// segnale di vendere, c'è un ordine di acquisto aperto, nessun ordine di vendita
// è l'ultima ora del venerdì - chiudere l'ordine di acquisto
caso 3:
Chiudere gli ordini di acquisto();
pausa;
// if (Pattern > 0 && !SellOrder && !BuyOrder && !FridayLastHour) variant = 4;
// segnale di comprare, nessun ordine è aperto e non è l'ultima ora del venerdì
// aprire ordine di acquisto
caso 4:
OpenBuyOrder(Lots);
pausa;
// if (Pattern > 0 && SellOrder && !BuyOrder && !FridayLastHour) variant = 5;
// segnale di acquisto, c'è un ordine di vendita aperto, nessun ordine di acquisto
// non è l'ultima ora del venerdì - stiamo girando
caso 5:
OpenBuyOrder(Lots + SellLots);
pausa;
// if (Pattern > 0 && SellOrder && !BuyOrder && FridayLastHour) variant = 6;
// segnale di acquisto, c'è un ordine di vendita aperto, nessun ordine di acquisto
// è l'ultima ora del venerdì - chiudi l'ordine Sell
caso 6:
Chiudere gli ordini di vendita();
pausa;
caso 7:
// se (SellOrder && BuyOrder) variant = 7;
// hanno un ordine incrociato aperto
if (WaitBeforeTransaction(WaitSeconds) == 1) // pausa tra le richieste
{
if (LastBuyLots <= LastSellLots)
OrderCloseBy( BuyTicket, SellTicket);
else
OrderCloseBy( SellTicket, BuyTicket);
}
break
// in altre varianti non fare nulla
default:
pausa;
}
}
Spero che riuscirete a gestire le variabili.
>> Buona fortuna!