Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 102

 
Dozol:


Roger, non riesco a capire!

Getta una linea orizzontale sul grafico, fissa il suo prezzo, cancella la linea - non è più necessaria. Immediatamente impostiamo un ordine a quel prezzo.

Qual è l'errore? E perché un Sell Stop non si apre?

Perché continuare a seguire il prezzo se mi serve solo il valore del prezzo della linea orizzontale?

Spiegare!!! Aiuto! Più dettagli, per favore!

Sellstop si è sbagliato, si aprirà.

Ora riguardo alle linee. Quando faccio trading dal vivo, guardo il grafico e piazzo una linea orizzontale, le condizioni sono appropriate, la linea viene cancellata e l'ordine viene aperto. In che modo questo è meglio di un semplice script di tasti di scelta rapida? Nel tester, per disegnare la linea, dovete attivare la visualizzazione e osservare il grafico. In generale, non capisco nemmeno perché dovremmo aggiungerlo al tester.

 
borilunad:
Scusa! Poi sali sul vasino e vai a dormire! Buona giornata! ;)
Ok. Lo scoprirò da solo, non è un enigma così irrisolvibile. Ma finora mi vengono in mente solo le stampelle. Il metodo della stampella non è un buon metodo...
 
Brava gente, potete dirmi cosa c'è che non va. In un'operazione di vendita, che si apre sul primo tick della barra 0, lo stop loss dovrebbe essere impostato a 30 pip (5 cifre) sopra il massimo della prima candela. L'ho scritto in questo modo, ma lo stop loss non è affatto posizionato.
     Price = NormalizeDouble(Bid, Digits); // округляем до нужного нам числа цифр после запятой
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
     {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL= Price + StopLoss*Point;
       SL = NormalizeDouble(SL, Digits); // округляем до нужного нам числа цифр после запятой
      }
 
artmedia70:

E sulle dita? Come possono il tempo e il prezzo dirvi di chiudere la presa? Posso certamente pensarlo da solo, ma sono le 7.43 del mattino e non sono ancora andato a letto.


Se sono le 7.43 e non sono andato a letto... Quindi, presumo che si tratti di Graal!
 
alexey1979621:
Brava gente, ditemi cosa c'è che non va. In un'operazione di vendita, che si apre sul primo tick della barra 0, lo stop loss dovrebbe essere impostato a 30 pip (5 cifre) sopra il massimo della prima candela. Scritto così, ma lo stop loss non è posizionato affatto.

StopLoss = iHigh(Symbol(),0,1)+30*Point;

Questo è il livello di stop loss che vuoi, per esempio, 1.5000+30*0.00001 = 1.5003.


SL= Price + StopLoss*Point; 
Altrimenti perché aggiungere StopLoss*Point al prezzo(1,5003*0,00001=0,000015). Lo SL diventa quasi uguale al prezzo, ecco perché lo StopLoss non è impostato.
 
Lo stop loss non è ancora impostato, ma il take profit funziona. Codice stop loss e take profit allegato
Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
artmedia70:
1. Cerca l'ultima posizione chiusa (MODE_HISTORY).
2. Se ha chiuso al (o vicino al) takeaway --> Ricorda il suo orario di apertura -->
3. Guarda tutte le posizioni aperte (MODE_TRADES) e confronta il loro tempo di apertura con quello ricordato (dal punto 2) --> Se il tempo ricordato di apertura della posizione chiusa dalla posizione attuale (dal punto 2) è il più lungo dal tempo di apertura delle altre posizioni aperte --> Significa che l'ultima posizione aperta è stata chiusa dalla posizione attuale -->
4. Ritaglia/elimina tutto il resto.


Sembra essere scritto. Ma il risultato non è lo stesso.

Ecco cosa è venuto fuori per me:

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
datetime GetLastOrderState()
{
   datetime lastOrderCloseTime = -1,               // Время закрытия последнего открытого ордера
            lastOOTMarket = -1,          // Время открытия последнего открытого ордера рыночного
            lastOOTHist = -1;            // Время открытия последнего открытого ордера из истории
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
      if (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0);
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
   
   Comment("Время открытия последнего открытого ордера = ", lastOOTHist);
  
   for (int h=OrdersTotal()-1; i>=0; i--)
   {   
      if (!OrderSelect(h, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      {
         if (lastOOTMarket < OrderOpenTime())
             lastOOTMarket = OrderOpenTime();
  
         if (lastOOTMarket < lastOOTHist)      // Если время открытия последнего открытого ордера (рыночного) ниже последнего открытого ордера из истории..
             lastOrderCloseTime = OrderCloseTime(); // Значит это искомый ордер
      }
   }

   Comment("Время закрытия последнего открытого ордера = ", lastOrderCloseTime);
   return (lastOrderCloseTime);
}
 
alexey1979621:
Brava gente, potete dirmi cosa c'è che non va. In un'operazione di vendita, che si apre sul primo tick della barra 0, lo stop loss dovrebbe essere impostato a 30 pip (5 cifre) sopra il massimo della prima candela. L'ho scritto in questo modo, ma lo stop loss non è impostato affatto.

Quello che avete qui non è niente di niente. Cominciamo con il fatto che lo short chiude sempre sull'ASC, non sul BID.
 
alexey1979621:
Lo stop loss non è ancora impostato, ma il take profit funziona. Codice stop loss e take profit allegato

Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1))               // Здесь еще STOPLEVEL нужно проверять, иначе частые ошибки будут
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;  // Здесь вместо переменной StopLoss попробуйте поставить SL
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
hoz:


Hmm. Sembra che sia stato scritto. Ma l'uscita è sbagliata...

Questo è quello che ho ottenuto:

Quando si cerca l'ultimo ordine chiuso, il più recente dovrebbe essere trovato per primo, ma il controllo per chiuderlo al take dovrebbe essere tolto dal ciclo, altrimenti controlla ogni ordine chiuso per la chiusura al take e, se è così, ricorda il tempo del primo chiuso al take nel ciclo, non il più recente.
Motivazione: