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

 
Sì.
 
Roger:
Sì.
:) Ora è apparso l'errore 130. La cosa più strana è che con gli stop sbagliati (130) imposta ancora il takei corretto (calcolato da ATR), ma i miei stop non erano impostati dall'inizio...
C'è un modo per capirlo?
 
b0r1s:

Ho bisogno di aiuto!!! Come scegliere l'ultimo ordine perdente dalla cronologia?


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг убыточности последней позиции.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      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)) {
    if (OrderProfit()<0) return(True);
  }
  return(False);
}

if (isLossLastPos(NULL, -1, Magic искомого ордера)) {нашли - обрабатываем...}
 
ToLik_SRGV:

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

Passare nel metodo come parametri un medjack ritardato e un trall auspicabile.

Non riesco a capire perché la tua funzione dà errore 1 (divertente: errore 1 = nessun errore, ma risultato sconosciuto) e non fa il trawl. A volte potrebbe catturare qualche ritardo, ma per lo più >>>ERROR1 nel log e non tossire...

Ecco come faccio io:

//==============================================================================================
   // Модификация ордеров
//============================================================================================== 
   int criterion = TakeProfitATR (1);                // Рассчитываем "достаточную" волатильность
   if (criterion>=15) trailingOrder(511, 20);        // и если она в "норме" - тралим ордера...
//==============================================================================================

// Функция для рассчёта Take Profit по ATR

//+------------------------------------------------------------------+
//|                  Take from ATR                                   |
//+------------------------------------------------------------------+
double TakeProfitATR (int tf)
  {
   double   atr   =iATR(NULL,tf,14,0);
   double   mltp  =15000;
   if (tf==1) mltp=15000;
   if (tf==5) mltp=45000;
   double   tp    =MathRound(atr*mltp);
   return  (tp);
  }
 
artmedia70:

Non riesco a capire perché la tua funzione dà errore 1 (divertente: errore 1 = nessun errore, ma risultato sconosciuto) e non fa il trawl. A volte potrebbe catturare qualche errore in sospeso, ma la maggior parte delle volte >>>ERROR1 è nel log e non tossisce...

Io lo chiamo così:


L'errore 1 può apparire a causa di questo (da OrderModify() doc):

Se vengono passati valori invariati come parametri della funzione, allora verrà generato l'errore 1 (ERR_NO_RESULT).

Quindi va bene, non c'è davvero nessun errore, potete ignorarlo.
 
artmedia70:

Non riesco a capire perché la tua funzione dà errore 1 (divertente: errore 1 = nessun errore, ma risultato sconosciuto) e non traina. A volte potrebbe catturare qualche errore in sospeso, ma la maggior parte delle volte >>>ERROR1 è nel log e non tossisce...

Ecco come faccio io:


Ho aggiunto Limit'order (nell'ultimo codice mi sono dimenticato di loro :)) + l'elaborazione dell'errore #1 (prima della modifica il nuovo prezzo viene confrontato con quello attuale, se sono uguali, allora non fare nulla):

//+------------------------------------------------------------------+
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 &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  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 &&
                 (Bid-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLLIMIT){
            if(OrderOpenPrice() - Bid > Point*trailing){
               if((Bid+Point*trailing) - Bid >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Bid+Point*trailing) - Bid > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_BUYLIMIT){
            if(Ask - OrderOpenPrice() > Point*trailing){
               if(Ask - (Ask-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Ask - (Ask-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
 

A proposito, ho trovato un errore nel tutorial sulle distanze StopLevel e FreezeLevel per i pendenti:

Limitazione della distanza minima di StopLevel.

L'operazione di compravendita non viene eseguita se uno di questi requisiti viene violato.

Tipo di ordine Prezzo di apertura dell'ordine (OpenPrice) StopLoss (SL) TakeProfit (TP)
Compra
Nessuna modifica consentitaBid-SL StopLevelTP-Bid ≥ StopLevel
Vendere
Nessuna modifica consentitaSL-Ask StopLevelAsk-TP StopLevel
BuyLimit
Ask-OpenPrice StopLevelOpenPrice-SL StopLevelTP-OpenPrice ≥ StopLevel
SellLimit
Bid-OpenPrice ≥ StopLevelSL-OpenPrice ≥StopLevelOpenPrice-TP StopLevel
BuyStop
OpenPrice-Ask ≥ StopLevelOpenPrice-SL StopLevelTP-OpenPrice StopLevel
SellStop
Bid-OpenPrice StopLevelSL-OpenPrice StopLevelOpenPrice-TP StopLevel

SellLimit è impostato sopra il prezzo corrente, quindi questo è corretto:

OpenPrice - Bid ≥ StopLevel

 
Come faccio ad aprire due orbite opposte a 50 pip di distanza?
 

c'è un modo per ordinare gli strumenti nelle schede nella parte inferiore dello schermo? perché 8 strumenti in 4 timeframes sono sparsi in un mess....

 
Rossi:

c'è un modo per ordinare gli strumenti nelle schede nella parte inferiore dello schermo? perché 8 strumenti in 4 timeframes sono sparsi in un mess....


prendere la scheda con il nome del grafico e trascinarla al posto giusto