[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 288
Buon pomeriggio chi può aiutare a risolvere un problema, forse sto facendo qualcosa di sbagliato,
Ho un blocco Klima che restituisce il flag di chiusura dell'ultima posizione al take profit e lo stesso per lo stop,
//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по тейку. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
Il primo controllo (totale==1) avviene quando l'ordine è ancora 1. All'interno del blocco, si trova l'ultimo Sell chiuso -> aperto, l'ultimo Buy chiuso -> aperto di nuovo. Fanno 3 ordini.
Il primo controllo (totale==1) avviene quando l'ordine è ancora 1. All'interno del blocco si trova l'ultima vendita chiusa -> aperta, l'ultimo acquisto chiuso -> aperto di nuovo. Questo si traduce già in 3 ordini.
Sì, ma come fare era solo 2 ordini, quindi non si apre un ordine sotto il numero 6,
Il modo più semplice è controllare la presenza di un ordine aperto di tipo Compra o Vendi. Prendete questo (le variabili BuyOrders, SellOrders, TotalOrders sono variabili globali nel programma; devono essere dichiarate nella funzione start() come int BuyOrders, SellOrders, TotalOrders;) :
void OrdersRecount()
{
BuyOrders=0; SellOrders=0; TotalOrders=0;
if (OrdersTotal()>0)
{
for (int j = 0; j < OrdersTotal(); j++)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagBuy)
{
if (OrderType() == OP_BUY) BuyOrders++;
if (OrderType() == OP_SELL) SellOrders++;
TotalOrders++;
}
}
}
}
}
Ti aiuterò, ma non capisco ancora la logica del tuo codice:
Sei sicuro che in tre casi hai aperto una posizione Sell e in uno una posizione Buy? Non è simmetrico...
Voglio che si apra quando non c'è nessuna posizione nel mercato e se uno dei valori è corretto allora apre 1 ordine e aspetta che la posizione si chiuda.
Voglio che si apra solo quando non c'è nessuna posizione nel mercato e se uno dei valori scelti è corretto allora apre 1 ordine e poi aspetta che la posizione si chiuda
Т.е. получается что возможна ситуация когда у вас будет 2 ордера на покупку и не одного на продаж
No al contrario, ci dovrebbero essere solo 2 posizioni, compresa la vendita senza fermate e il monitoraggio, la dichiarazione mostra come succede. tutto è corretto, ma una posizione extra sotto il numero 6 si apre
FoxUA: No viceversa, le posizioni dovrebbero essere solo 2 tra cui vendere senza stop e keepers, la dichiarazione mostra come funziona. giusto, ma una posizione extra si apre sotto il numero 6
Bene, allora tutto sarà molto più complicato. Descrivete a parole come dovrebbe funzionare l'algoritmo e cercherò di aiutarvi mentre lo faccio)
- Sono possibili 2 posizioni allo stesso tempo;
- prima aprire 2 posizioni: comprare e vendere;
- se la posizione lunga è chiusa da uno stop loss -> aprire una posizione corta con SL e TP triplicati, otteniamo due posizioni di vendita, una con SL e TP regolari e una con TP triplicato;
Buon pomeriggio chi può aiutare a risolvere un problema, forse sto facendo qualcosa di sbagliato,
Ho un blocco Klima che restituisce il flag di chiusura dell'ultima posizione al take profit e lo stesso per lo stop,
ma ecco come lo uso io.
e all'inizio tutto va come previsto e al lotto 4 si apre quello che mi serve e questo
Non riesco a capire a cosa serve.
per chiarezza
Non riesco a capire a cosa serve
Proprio così,
Il primo controllo (totale==1) avviene quando l'ordine è ancora 1. All'interno del blocco, si trova l'ultimo Sell chiuso -> aperto, l'ultimo Buy chiuso -> aperto di nuovo. Fanno 3 ordini.
Sì, proprio così,
Il primo controllo (totale==1) avviene quando l'ordine è ancora 1. All'interno del blocco si trova l'ultima vendita chiusa -> aperta, l'ultimo acquisto chiuso -> aperto di nuovo. Questo si traduce già in 3 ordini.
Sì, ma come fare era solo 2 ordini, quindi non si apre un ordine sotto il numero 6,
Il modo più semplice è controllare la presenza di un ordine aperto di tipo Compra o Vendi. Prendete questo (le variabili BuyOrders, SellOrders, TotalOrders sono variabili globali nel programma; devono essere dichiarate nella funzione start() come int BuyOrders, SellOrders, TotalOrders;) :
Ci sono molte opzioni, la più semplice è controllare se c'è un ordine di acquisto o di vendita aperto. Prendete questo:
Non capisco come usarlo, per favore aiutatemi.
Non capisco come usarlo, quindi aiutatemi se potete.
Sei sicuro che si apre comprare in tre casi e vendere in uno? Non è simmetrico...Lo farò, ma continuo a non capire la logica del tuo codice:
Sei sicuro che in tre casi hai aperto una posizione Sell e in uno una posizione Buy? Non è simmetrico...Ti aiuterò, ma non capisco ancora la logica del tuo codice:
Voglio che si apra quando non c'è nessuna posizione nel mercato e se uno dei valori è corretto allora apre 1 ordine e aspetta che la posizione si chiuda.
Voglio che si apra solo quando non c'è nessuna posizione nel mercato e se uno dei valori scelti è corretto allora apre 1 ordine e poi aspetta che la posizione si chiuda
Quindi si scopre che si possono avere 2 ordini di acquisto e nessun ordine di vendita?
Figar0:
Т.е. получается что возможна ситуация когда у вас будет 2 ордера на покупку и не одного на продаж
No viceversa, le posizioni dovrebbero essere solo 2 tra cui vendere senza stop e keepers, la dichiarazione mostra come funziona. giusto, ma una posizione extra si apre sotto il numero 6
Bene, allora tutto sarà molto più complicato. Descrivete a parole come dovrebbe funzionare l'algoritmo e cercherò di aiutarvi mentre lo faccio)
- Sono possibili 2 posizioni allo stesso tempo;
- prima aprire 2 posizioni: comprare e vendere;
- se la posizione lunga è chiusa da uno stop loss -> aprire una posizione corta con SL e TP triplicati, otteniamo due posizioni di vendita, una con SL e TP regolari e una con TP triplicato;
Il prossimo?