[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 395

 
KostelloArtua:

Grazie mille per i consigli!!! Ho risolto il mio problema. Si è scoperto che il broker che stavo cercando, quando piazza un ordine a mercato, cioè secondo le condizioni, non mi permette di piazzare livelli di stop allo stesso tempo. Ora gli ordini vengono piazzati senza alcun livello di stop e io imposto i livelli di stop immediatamente dopo ogni ordine. Ho un problema con questo: solo una piccolissima parte degli ordini viene modificata, mentre la maggior parte degli ordini mostra i seguenti risultati nella sezione "Expert Advisors":

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: aperto #30906670 vendere 0.01 CLM1 a 99.79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: biglietto non valido per la funzione OrderModify
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5: aperto #30906787 comprare 0.01 ESM1 a 1337.50 ok

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15: ticket non valido per la funzione OrderModify

Ecco il testo del codice:

{
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point,Ask-TakeProfit*Point,0,Red);
return(0);

}

Inoltre, è il primo ordine che viene modificato dopo l'avvio dell'Expert Advisor!

Ovviamente, ho impostato la modifica dell'ordine sbagliato nel codice... Per favore, aiutatemi!

res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(),, OrderOpenPrice(),NormalizeDouble(Ask+StopLoss*Point, Digits),NormalizeDouble( Ask-TakeProfit*Point, Digits),0,Red);
 
ilunga:
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble( Ask+StopLoss*Point,Digits),NormalizeDouble( Ask-TakeProfit*Point,Digits),0,Red);
Grazie per la dritta!!!
 
Sancho77:
Cari programmatori, chiedo aiuto per modificare l'Expert Advisor: ho una posizione aperta e dopo un po' di tempo c'è un secondo segnale per aprire la posizione nella stessa direzione. Voglio riempire la posizione con il secondo segnale solo se il primo ordine è già nella posizione più. Ho implementato questo confrontando la dimensione del saldo e il capitale (se il capitale è superiore al saldo, l'ordine aperto è in più).
Potete suggerire un codice per determinare il profitto/perdita sull'ultimo ordine aperto che avete?

Se il suo numero di biglietto è salvato, allora semplicemente

OrderSelect(ticket, SELECT_BY_TICKET);

if (OrderProfit() > )

{

          // доливаем ордер

}
 
ilunga:

Se il suo numero di biglietto è salvato, semplicemente


Grazie! Potete dirmi come salvare il biglietto dell'ultimo ordine?
 
Sancho77:
Grazie! Potete consigliarmi come salvare il biglietto dell'ultimo ordine?

Bene, l'opzione più semplice è dichiarare una variabile globale int ticket

e sostituire ticket = OrderSend(...) ovunque con ticket = OrderSend(...)

memorizzerà sempre il numero dell'ultimo ordine aperto

Oppure vedere solo l'argomento "Funzioni utili di KimIV"!

 
ilunga:

Bene, l'opzione più semplice è dichiarare una variabile globale int ticket

e sostituire ticket = OrderSend(...) ovunque con ticket = OrderSend(...)

memorizzerà sempre il numero dell'ultimo ordine aperto

o vedere l'argomento "Funzioni utili di KimIV" solo

Grazie per tutto il vostro aiuto!
 
rustein:

Aiutami a trovare un errore,

Grazie


BuySL*Point // зачем умножать на Point ? Тоже самое для SelSL*Point
 
khorosh:

Grazie,

Non so... Pensavo che avrebbe funzionato, non funziona senza nessuno dei due, l'ho fatto e funziona....

//-----
  double Spread = (NormalizeDouble(Ask,Digits) - NormalizeDouble(Bid,Digits)) / Point;
  double BuySL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,0,1),Digits);
  double SelSL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,1,1),Digits);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL-Spread*Point
      && BuySL-Spread*Point > OrderStopLoss() && BuySL-Spread*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL-Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL+Spread*Point
      && SelSL+Spread*Point < OrderStopLoss() && SelSL+Spread*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL+Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
    }
  }
}

 
Roger:
PRICE_OPEN !!!! - non puoi usare questo prezzo! Funziona solo per gli indicatori. Usa Bid o Ask.

Grazie!!! Sì, è una possibilità certa.
 

Ragazzi una domanda più complicata......

Come fare in modo che un EA chiuda tutti gli ordini quando viene raggiunto un determinato profitto .... Chiudere solo gli ordini su un simbolo ...

Esempio: l'EA lavora su 3 coppie di importo per chiudere tutti gli ordini su un simbolo 100p ...

Se l'EUR ha più di 100p chiuderà solo gli ordini su EUR mentre altri possono avere 200p ...

Se prendo accountbalanse() allora l'advisor chiuderà solo quando la somma di tre coppie è più di 100p. questa opzione non mi va bene !!!!

Aiuto per favore.........