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

 
Naturalmente, avete ragione. L'implicazione era che avete già un codice per prendere le letture solo una volta per barra.
 
sllawa3:
Penso che tu abbia ragione... Anche io ho i miei dubbi...

Potete usare questo metodo per monitorare l'equity al fine di chiudere tutte le posizioni e cancellare gli ordini non appena viene raggiunta la percentuale specificata di profitto dell'equity:

//--------------------------------------------------------------
// Описание глобальных переменных советника
// ----------------- Трал эквити -------------
extern double  PercentEquityForClose=15;
double         Equ_OLD,
               Equ_NEW,
               EquPerc,
               Equ_Start;

// ---- Дальнейшее описание глобальных переменных советника

//==========================================================

int init()                             // Функция init
{
   Equ_OLD=AccountEquity();
   Equ_Start=Equ_OLD; 
   EquPerc=Equ_Start/100*PercentEquityForClose;
   
// ---- Дальнейший код функции ----

   return;                             // Выход из init() 
}

//==========================================================
// ---- В функции слежения за событиями ----
// ---- вызываемой из функции start ----

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (Equ_NEW>=Equ_OLD+EquPerc)                // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

L'ho scritto sul momento, quindi ci possono essere degli errori.
Per tracciare i cambiamenti nelle azioni su ogni barra, basta controllare l'apertura di una nuova barra e, in caso affermativo, si dovrebbe eseguire questo frammento di codice:

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (Equ_NEW>=Equ_OLD+EquPerc)                // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

Credo che vada più o meno così...

 
Roger:
Naturalmente, avete ragione. L'implicazione era che hai già un codice per prendere le letture solo una volta per barra.
No, non lo faccio, ma ho scritto qualcosa sopra per controllare l'equità ad ogni tick. Basta fare un controllo sull'apertura di un nuovo bar e se è così, poi controllare l'equità... Non credo che sia difficile da fare...
 
interessato all'inversione dell'equità da crescente a calante, a condizione che l'equità sia sopra l'equilibrio... per chiudere qualsiasi cosa aperta...
 
sllawa3:
Mi interessa l'inversione di Equity da crescente a decrescente, purché Equity sia sopra l'equilibrio... per chiudere tutto ciò che è aperto...

Ecco la funzione per definire una nuova barra:

//+------------------------------------------------------------------+
//|  возвращает признак появления нового бара для указанного периода |
//+------------------------------------------------------------------+
bool isNewBar(int timeFrame)
   {
   bool res=false;
   
   // массив содержит время открытия текущего (нулевого) бара
   // по 7 (семь) таймфреймам
   static datetime _sTime[7];  
   int i=6;
 
   switch (timeFrame) 
      {
      case 1  : i=0; break;
      case 5  : i=2; break;
      case 15 : i=3; break;
      case 30 : i=4; break;
      case 60 : i=5; break;
      case 240: break;
      case 1440:break;
      default:  timeFrame = 1440;
      }
//----
   if (_sTime[i]==0 || _sTime[i]!=iTime(Symbol(),timeFrame,0))
      {
      _sTime[i] = iTime(Symbol(),timeFrame,0);
      res=true;
      }
      
//----
   return(res);   
   }
   

... interessato all'inversione dell'equità da salita a discesa finché l'equità è sopra l'equilibrio... per chiudere tutto ciò che è aperto...

Poi abbiamo bisogno di controllare l'equità ad ogni tick. Dopo tutto, se si lavora sui tick, per esempio, un'ora prima del prossimo controllo delle azioni, le azioni possono perdere il loro valore...

Quindi, non dobbiamo confrontare l'aumento del patrimonio netto dell'1%, ma il suo aumento o diminuzione rispetto allo stato al tick precedente, registrato nella variabile Equ-OLD con il suo valore attuale in Equ_NEW

 
sllawa3:
interessato all'inversione dell'equità da salita a discesa, a condizione che l'equità sia sopra l'equilibrio... per chiudere tutto ciò che è aperto...

Da qualche parte così:

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (NormalizeDouble(Equ_NEW-Equ_OLD,8)<0)    // Если эквити уменьшилось по отношению к своему прошлому значению,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера.
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

// (NormalizeDouble(Equ_NEW-Equ_OLD,8)<0) - возможно здесь нужно сравнивать не с нулём, а с каким-то числом, 
                                         // а то может в последующем и не дать увеличиться балансу, 
                                         // постоянно закрывая вновь открываемые позиции (они ведь требуют залога)

Tuttavia, queste sono solo informazioni a cui pensare, non codice pronto...

 
drknn:

Certo. Solo che non si chiama stop, ma ordine pendente. Aprire un terminale. Premere F1 in esso. Nella finestra che appare aprire Contents - Trade - Order Types.

)))) grazie, ma dopo fondi confuso / disabituato esecuzione da offerte e chiede invece di mestieri, quando qualcosa di confuso - non timido di chiedere domanda stupida per rimuovere i dubbi. )))
 

Aiuto . il rivenditore ha cinque cifre decimali . la funzione iOpen (NULL,0,n) dà solo quattro cifre decimali (le letture sono prese tramite stampa) . come risolvere il problema .

 
pips500:

Aiuto. il rivenditore ha cinque cifre decimali. la funzione iOpen(NULL,0,n) dà solo quattro cifre decimali (le letture sono prese tramite stampa). come faccio a risolvere il problema. grazie in anticipo.

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 - Формат точности, число цифр после десятичной точки (0-8).

 
sllawa3:
Mi interessa l'inversione dell'equity da ascendente a discendente, a condizione che l'equity sia sopra l'equilibrio... per chiudere tutto ciò che è aperto...

Ed ecco un esempio di come funziona... Ho deliberatamente fatto un'apertura di posizione su ogni nuova barra... Così, qui abbiamo "OC Killer"... :)


Rapporto tester allegato, dove non c'è nessun limitatore e l'apertura di posizioni ad ogni tick - enorme percentuale ... E non c'è nessun drawdown :) È un peccato che nessuno ti lasci lavorare così...

Ecco una foto del rapporto:


Ho fatto un sacco di soldi con queste "incursioni", con quasi nessun drawdown. Non sono nemmeno riuscito ad arrivare alle acquisizioni (puoi vederle sopra):


Motivazione: