Si prega di consigliare come dovrebbe essere la condizione. Se viene attivato uno stop loss, allora il lotto viene moltiplicato per 2, e se l'ordine successivo attiva un take profit, il lotto tornerebbe al lotto originale, che era prima dello stop loss.
Lo capisco così, ma non so come andare avanti...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
Stai cercando di cancellare un ordine a mercato, non vengono cancellati, vengono chiusi usando la funzione OrderClose(). Affinché il ciclo si cancelli o si chiuda correttamente, dobbiamo distinguere l'ordine in base al suo tipo.
if(OrderType()<=OP_SELL) - per ordini a mercato, if(OrderType()>OP_SELL) - per ordini pendenti.
Si prega di consigliare come dovrebbe essere la condizione. Se viene attivato uno stop loss, allora il lotto viene moltiplicato per 2, e se l'ordine successivo attiva un take profit, il lotto tornerebbe al lotto originale, che era prima dello stop loss.
Lo capisco così, ma non so come andare avanti...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
}
Se l'hai fatto velocemente, l'ultimo ordine perdente apparirà, cosa fare con esso e quali parametri correggere, penso che capirai.
Si prega di consigliare come dovrebbe essere la condizione. Se viene attivato uno stop loss, allora il lotto viene moltiplicato per 2, e se l'ordine successivo attiva un take profit, il lotto tornerebbe al lotto originale, che era prima dello stop loss.
Lo capisco così, ma non so come andare avanti...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
}
La soluzione a questo problema dipende dalla logica completa dell'Expert Advisor, puoi rintracciare l'attivazione dello stoploss o del takeprofit dal suo commento.
Dovete fare una singola funzione che riempia e ordini l'arraydichiarato a livello globale. L'array dovrà essere passato alla funzione per riferimento.
E avete bisogno di funzioni aggiuntive che prendano i dati di cui avete bisogno da questo array.
Artem, ti sbagli. L'array, dichiarato a livello globale, è visibile in tutte le parti del programma, e non è necessario passarlo da qualche parte. È solo riempito in un posto nel programma, ordinato in un altro e letto nel terzo, non importa.
Se lo si confronta con l'equilibrio, è così:
Grazie.
OK, allora, come ho capito, otteniamo tre diverse funzioni personalizzate con il ritorno di quella giusta (se cerchiamo tre parametri diversi)
ArraySort
poi
ArrayBsearch per il numero giusto
e poi come affrontarlo?
Esattamente la transizione da un array a un elemento della strutturaTu non capisci.
Dovete fare una singola funzione che popolerà e ordinerà l'array dichiarato globalmente. L'array dovrà essere passato alla funzione per riferimento.
E avete bisogno di funzioni aggiuntive che prendano i dati di cui avete bisogno da questo array.
Tu non capisci.
Dovete fare una singola funzione che riempie e ordina l'array dichiarato globalmente. L'array dovrà essere passato alla funzione per riferimento.
E avete bisogno di funzioni aggiuntive che prendano i dati di cui avete bisogno da questo array.
Ok, potete dimostrare come prendere qualcosa da un array di strutture? diciamo riempito e ordinato
come trasferire per riferimento e scrivere.
Si prega di consigliare come dovrebbe essere la condizione. Se viene attivato uno stop loss, allora il lotto viene moltiplicato per 2, e se l'ordine successivo attiva un take profit, il lotto tornerebbe al lotto originale, che era prima dello stop loss.
Lo capisco così, ma non so come andare avanti...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
un'altra domanda, cosa ho scritto di sbagliato nel blocco di cancellazione degli ordini? non sempre cancella gli ordini, nel log dice
market order #1 cannot be deleted
{
for(int n=OrdersTotal()-1;n>=0;n--)
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
bool del=OrderDelete(OrderTicket());
if (del==true)
{
otl_b=0; otl_s=0; //обнуляем переменные отложек
}
}
}
}
}
Un'altra domanda, cosa ho scritto di sbagliato nel blocco per cancellare gli ordini? Non sempre cancella gli ordini, nel log dice
market order #1 cannot be deleted
{
for(int n=OrdersTotal()-1;n>=0;n--)
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
bool del=OrderDelete(OrderTicket());
if (del==true)
{
otl_b=0; otl_s=0; //обнуляем переменные отложек
}
}
}
}
}
Stai cercando di cancellare un ordine a mercato, non vengono cancellati, vengono chiusi usando la funzione OrderClose(). Affinché il ciclo si cancelli o si chiuda correttamente, dobbiamo distinguere l'ordine in base al suo tipo.
if(OrderType()<=OP_SELL) - per ordini a mercato, if(OrderType()>OP_SELL) - per ordini pendenti.
C'è una cosa chiamataCHARTEVENT_MOUSE_MOVE
Domanda: questo funziona sui dispositivi mobili dove non c'è il mouse?
Si prega di consigliare come dovrebbe essere la condizione. Se viene attivato uno stop loss, allora il lotto viene moltiplicato per 2, e se l'ordine successivo attiva un take profit, il lotto tornerebbe al lotto originale, che era prima dello stop loss.
Lo capisco così, ma non so come andare avanti...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
Si prega di consigliare come dovrebbe essere la condizione. Se viene attivato uno stop loss, allora il lotto viene moltiplicato per 2, e se l'ordine successivo attiva un take profit, il lotto tornerebbe al lotto originale, che era prima dello stop loss.
Lo capisco così, ma non so come andare avanti...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
La soluzione a questo problema dipende dalla logica completa dell'Expert Advisor, puoi rintracciare l'attivazione dello stoploss o del takeprofit dal suo commento.
if(StringFind(OrderComment(),"tp")>=0)// сработал тейкпрофит
...
Tu non capisci.
Dovete fare una singola funzione che riempia e ordini l'array dichiarato a livello globale. L'array dovrà essere passato alla funzione per riferimento.
E avete bisogno di funzioni aggiuntive che prendano i dati di cui avete bisogno da questo array.