[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 619

 
kwadrad:

Cosa si può fare?

aggiornare i dati prima dell'apertura, normalizzare il prezzo

Vinin:

Ho scritto subito che questa chiusura non è raccomandata. Si sta usando una caratteristica non documentata. Ma qualsiasi posizione aperta ha un tempo di chiusura pari a zero, e il prezzo di chiusura sarà uguale al prezzo di chiusura corrente.

dopo tutte queste esperienze è già ovvio)

 
kwadrad:

Cosa si può fare?

Guarda attentamente i prezzi che imposti quando apri una posizione. Sicuramente ci deve essere... Ask è confuso con Bid?
 
artmedia70:
Guardate attentamente i prezzi che fissate quando aprite una posizione. Sicuramente ci deve essere... Ask è confuso con Bid?

Sì, è così. L'ho fatto.
 
kwadrad:

è. Grazie.
Non c'è di che - è la prima cosa su cui i neofiti si confondono, lo so...
 
Qualcuno ha fatto un semplice trailing stop per spostare un ordine pendente dietro il prezzo invece del livello di stop? È possibile farlo?
Ho provato e riprovato, ma tutto quello che ho ottenuto è che l'ordine pendente si muove avanti e indietro dietro il prezzo come un malato...

È possibile rielaborare la semplice funzione di trailing in modo che tratti gli ordini invece degli stop? Per esempio questo:

//+----------------------------------------------------------------------------+
//|  Сопровождение позиции простым тралом                                      |
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" - текущий символ)                   |
//|    op - операция                   (-1 - любая позиция)                    |
//|    mn - MagicNumber                (-1 - любой магик)                      |
//+----------------------------------------------------------------------------+
  void TrailingPositionsSimplTR(string sy="", int op=-1, int mn=-1) {
  double p, pp;
  int    i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            pp=MarketInfo(sy, MODE_BID);
            if (!ProfitTrailing || (pp-OrderOpenPrice())>TrailingStopBuy*p) {
              if (OrderStopLoss()<pp-(TrailingStopBuy+TrailingStepSimplTR-1)*p) {
                ModifyOrder(sy, -1, pp-TrailingStopBuy*p, 0, clModifyBuy);//
              }
            }
          }
          if (OrderType()==OP_SELL) {
            pp=MarketInfo(sy, MODE_ASK);
            if (!ProfitTrailing || OrderOpenPrice()-pp>TrailingStopSell*p) {
              if (OrderStopLoss()>pp+(TrailingStopSell+TrailingStepSimplTR-1)*p || OrderStopLoss()==0) {
                ModifyOrder(sy, -1, pp+TrailingStopSell*p, 0, clModifySell);
              }
            }
          }
        }
      }
    }
  }
}
 
ToLik_SRGV:

Print() arrotonda fino a 4 cifre per emettere correttamente sulla console il tipo double(che restituisce iOpen() 5 cifre decimali, in questo caso), si dovrebbe usare la funzione DoubleToStr()

stringa DoubleToStr( double value, int digits)
Converte un valore numerico in una stringa di testo contenente una rappresentazione in caratteri di un numero nel formato di precisione specificato.

Parametri:

value - Величина с плавающей точкой.

digits - Формат точности, число цифр после десятичной точки (громное спасибо.


Grazie mille.
 
Roger:


Controlla questo EA, l'ho implementato lì

http://www.rogersignals.com/ru/experts.php?a=Support_Resistance

OK, grazie, ci darò un'occhiata...
 
artmedia70:
Qualcuno ha fatto un semplice trailing stop per spostare un ordine pendente dietro il prezzo invece del livello di stop? È possibile farlo?
Ho provato e riprovato, ma tutto quello che ho ottenuto è che l'ordine pendente si muove avanti e indietro dietro il prezzo come un malato...

È possibile rielaborare la semplice funzione di trailing in modo che tratti gli ordini invece degli stop? Per esempio questo:

Tutto è troppo complicato :)))
Ecco il mio codice

//+------------------------------------------------------------------+
void trailingOrder(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing)-Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point && (Ask+Point*trailing)-Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLSTOP){
            if(Bid - OrderOpenPrice() > Point*trailing){
               if(Bid-(Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point && Bid-(Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point){
                  if(!OrderModify(OrderTicket(),Bid-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку!");
               }
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
Passare nel metodo come parametri la medge ritardata e la trall desiderata.
 
      for (i =0;i<OrdersTotal();i++)
      {
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true&&OrderMagicNumber()==MAGICMA&&OrderSymbol()==Symbol())
         {
            if (MathAbs(funk-OrderOpenPrice())>Point)
            {
               if (OrderType()==OP_BUYSTOP||OrderType()==OP_BUYLIMIT&&MathAbs(Ask-funk)>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               {
                  OrderModify(OrderTicket(),NormalizeDouble(funk,Digits),OrderStopLoss(),NormalizeDouble(funk+TakeProfiti*Point,Digits),0);
               }
               if (OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT&&MathAbs(Bid-funk)>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               {
                  OrderModify(OrderTicket(),NormalizeDouble(funk,Digits),OrderStopLoss(),NormalizeDouble(funk-TakeProfiti*Point,Digits),0);
               }
            }
         }
      }
qualcosa come questo, dove l'ordine è trainato dal valore funk calcolato
 
ToLik_SRGV:

È un po' troppo complicato per te :))
Ecco il mio codice

Passare nel metodo come parametri un medjw ritardato e il trall desiderato.

Grazie! Penso che sia questo!