[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 403

 
mersi:
Scarica la storia e la domanda sparisce

Come si fa a scaricarlo?
 
kolyango:

Ho capito bene:

L'implementazione specifica è molto legata alle vostre condizioni.

Una bandiera è semplicemente una variabile in cui viene memorizzato lo stato. Approssimativamente, può essere alzato o abbassato. Costruite su questo e implementate la vostra logica.

 
w_ersoc:

Potete consigliarmi come scrivere una condizione corretta per l'Expert Advisor per innescare 1 volta con l'apertura di una nuova barra in un timeframe specificato? :(

Si può arrivare a diverse varianti, spesso usa questo tipo di condizione:

int start()
static datetime dtBar;
//.................
if(Time[0]==dtBar) return(0);//…проверим открытие новой свечи
dtBar=Time[0]; //(тот же Бар-возврат)(новый-продолжение...)
// 
 
splxgf:

L'implementazione specifica è molto legata alle vostre condizioni.

Un flag è semplicemente una variabile in cui viene memorizzata la condizione. Approssimativamente, può essere alzato o abbassato. Costruite su questo e implementate la vostra logica.


Beh, ho capito bene il punto?

Ho capito bene:

1. se la condizione1 è soddisfatta, allora al flag_SSSR1 viene assegnato un valore vero e si inizia immediatamente a controllare la condizione2

2. se la condizione2 è soddisfatta, allora il valore vero è assegnato al flag Flag_CCP2; se no, allora è un flag falso, e al prossimo tick

non controlliamo più la condizione1 e procediamo direttamente alla condizione2 e così via, finché la condizione2 è soddisfatta e assume un valore vero

3. poi controlliamo la condizione3 e Flag_USSR2 (e cosa esattamente in USSR2 è controllato se è vero o falso, o cosa?)

È corretto? Non c'è una sola transazione nel tester... Anche se dovrebbe esserci se è giusto. Cosa c'è di sbagliato...?

static bool Val_max, Cl_dn, Val_min; //static or global
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int
   i, j, total,
   cnt,
   OrderBuy,
   OrderSell,
   Magic,
   Ticket,                                      // Номер ордера
   Total=0,                                     // Количество ордеров в окне
   Tip=-1;                                      // Тип выбран. ордера (B=0,S=1)      
   double
   Open_0,
   ask,
   bid,
   Price,                                       // Цена выбранного ордера
   SL,                                          // SL выбранного ордера
   TP,                                          // TP выбранного ордера
   Lot;                                         // Колич. лотов в выбран.ордере
   Open_0=Open[0];                             // Цена откр. формирующегося бара
   ask=Ask;                                    // Текущая цена покупки
   bid=Bid;                                    // Текущая цена продажи
   string
   Symb;                                        // Название финанс. инструмента
   Symb=Symbol();                               // Название фин.инстр.
double Value_max=1.0000;
double Value_min=0.9980;
double Open_1= Open[1];
double Close_1= Close[1];
//----

//--------------------------------------------------------------- 4 --

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max) Val_max=true;                  // 
if (Open_1 > Close_1) Cl_dn=true;
if (Val <= Value_min && Cl_dn==true) Val_min=true;
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0; j < OrdersTotal(); j++)
    {
     OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL) return(0);
      }
    }

   OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),2,Bid+400*Point,Bid-400*Point,"",3,Red);  // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

//----
   return(0);
  }
 

Ciao!

Ho fissato l'obiettivo di limitare le posizioni aperte simultanee a 1.

Con la variabile Open/Close level = 3/2 moltiplicata per Point, posta nelle condizioni di posizione aperta/chiusa ho cercato di risolvere questo compito, ma non ci sono riuscito.

Per favore, aiutatemi a capirlo :)

 
kolyango:


È la cosa giusta da fare? Non c'è una sola transazione nel tester... Anche se dovrebbe esserci se è giusto. Cosa c'è che non va?

Ora, scrivete di nuovo le condizioni per intero in linguaggio normale e potrete correggere il codice... La cosa buona dei segnali è che dovrebbero avere una data di scadenza e di cancellazione.
 
skyjet:

Ciao!

Ho fissato l'obiettivo di limitare le posizioni aperte simultaneamente a 1.

se(OrdiniTotali()>0) ritorno;

O una variazione con il simbolo e l'eliminazione degli ordini in sospeso.

 

cioè nella mia versione

se(OrdiniTotali()>1)ritorno;

?

 
splxgf:
Ora, scrivete di nuovo le condizioni per intero in linguaggio normale e potrete correggere il codice... La cosa buona dei segnali è che dovrebbero avere un periodo di scadenza e di cancellazione.

Tutte queste condizioni possono non susseguirsi in una volta sola (può essere dopo un'ora o due o tre), quindi dobbiamo fare in modo che non appena l'indicatore raggiunge 1,0000, questa condizione non sia controllata ad ogni tick, e aspettare fino a quando una barra si chiude con una caduta, e dopo che queste 2 condizioni non sono controllate ad ogni tick, e aspettare fino a quando l'indicatore raggiunge 0,9980 o meno. Non appena tutte le condizioni sono soddisfatte, apriamo un ordine a mercato per vendere 0,1 lotti con uno stop loss di 400p e un take profit di 400p.
 
skyjet:

cioè nella mia versione

se(OrdiniTotali()>1)ritorno;

?

Meglio ancora la prima opzione, posizionare prima di tentare di aprire un ordine(OrderSend)