[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 436

 
semiromid:

Прошу помощи .

Как в этот коментарий "Возникла ошибка " можно добавить переменную ?

OrderSend(Symbol(),OP_SELLSTOP,0.1,Ask-50*Point,3,Bid+150*Point,Bid-150*Point, "Возникла ошибка ", 0);


stringa Stroka;

doppio x;

.............

.............


Stroka=StringConcatenate("Si è verificato un errore ", DoubleToStr(x, 0) );

OrderSend(Symbol(),OP_SELLSTOP,0.1,Ask-50*Point,3,Bid+150*Point,Bid-150*Point, Stroka, 0);

 
bercut0077:

Buon pomeriggio esperti, nell'indicatore mi interessa il valore ottenuto dall'Expert Advisor

Costanti speciali usate per indicare lo stato di parametri e variabili. Può avere i seguenti valori:

Costante Valore Descrizione
NULL 0 Indica lo stato di stringa vuota
VUOTO -1 Indica lo stato vuoto del parametro
VUOTO_VALORE 0x7FFFFFFFF Valore predefinito, puntatore a un valore vuoto. Usato in indicatori personalizzati
CLR_NONE 0xFFFFFFFFFF Indica nessun colore
INTERO_ARRAY 0 Usato con le funzioni di matrice. Indica che tutti gli elementi di un array devono essere processati


0x7FFFFFFFF in esadecimale è uguale a 2147483647 in decimale.

Cioè, ad un certo momento, un valore vuoto appare nel buffer dell'indicatore - questo è ciò che si vede nell'Expert Advisor. È possibile impostare il "valore vuoto" del buffer dell'indicatore:

void SetIndexEmptyValue( int index, double value)

Imposta il valore vuoto per la linea dell'indicatore. I valori vuoti non sono disegnati o mostrati nella DataWindow. Il valore predefinito del valore vuoto è EMPTY_VALUE.
Parametri:
indice - Indice - numero di indice della linea. Deve essere da 0 a 7.
valore - Nuovo valore "vuoto".
 
peshihod:


Cioè il tempo di apertura non importa se è stato aperto un minuto fa o due?

Il punto 2 non è chiaro. È tutto un po' vago.

Il tempo di apertura può essere determinato da OrderOpenTime().

Cioè il momento dell'apertura non importa, è stato aperto un minuto fa o due?


Мгновенное открытие

1.Моментальное(Сиюсекундное +0.5 - 2 секунды) определение вновь открывшегося торгового(не отложеных ордеров) ордера(Ордера открытого вручную и открытого спомощью советника).Система идентефецируюет ордер из друх вариантов (Sell или Byu) .

Если система определила ордер который рание не был открыт . то идет продолжение под номером 2.

2. Выполняеться какая то задача (Например,если Sell: Alert("Открытый ордер на продажу"+y);),(Например,если byu: Alert("Открыт ордер на покупку"+w);), всего 1-н раз,именно для этого ордера .

После того как еще открылся один ордер(толи системой, толи вручную ), система вновь действует с пункта 1 по пункт 2 .

 
peshihod:

stringa Stroka;

doppio x;

.............

.............


Stroka=StringConcatenate("Si è verificato un errore ", DoubleToStr(x, 0) );

OrderSend(Symbol(),OP_SELLSTOP,0.1,Ask-50*Point,3,Bid+150*Point,Bid-150*Point, Stroka, 0);


Bella combinazione. Ehm...
 
artmedia70:

Costanti speciali usate per indicare lo stato di parametri e variabili. Può avere i seguenti valori:

Sì, è chiaro, ma non è chiaro come curare l'indicatore da questi valori vuoti, ecco perché ho pubblicato il codice, ho bisogno di aiuto reale, cioè ho bisogno che l'indicatore emetta sempre 1 o -1.
 
bercut0077:
Sì, è chiaro, ma non è chiaro come curare l'indicatore di questi valori vuoti, ecco perché ho pubblicato il codice, ho bisogno di un aiuto reale, cioè ho bisogno che l'indicatore emetta sempre 1 o -1.
Ho fornito un esempio di una funzione che imposta il valore di un valore vuoto per una linea dell'indicatore. Puoi farlo in un modo diverso. Se avete bisogno solo di due valori +1 e -1, allora quando appare un valore vuoto, controllate lo stato passato (+1 o -1) e inseritelo al posto del valore vuoto. Allora ci sarà sempre o +1 o -1 nel buffer.
Supponiamo che ci sia un valore di +1. Appare un valore vuoto. Invece, continua a inserire il valore precedente (+1) nel buffer non appena appare -1, quindi inseriscilo nel buffer.
Ora ci sarà -1 nel buffer. Appena appare un valore vuoto, si controlla il valore precedente (ora è -1), e lo si inserisce nel buffer.
In questo modo avrete sempre +1 o -1 nel buffer
 
artmedia70:

Grazie. Un altro compito è venuto fuori...
 
semiromid:

1.Моментальное(Сиюсекундное +0.5 - 2 секунды) определение вновь открывшегося торгового(не отложеных ордеров) ордера(Ордера открытого вручную и открытого спомощью советника).Система идентефецируюет ордер из друх вариантов (Sell или Byu) .

Если система определила ордер который рание не был открыт . то идет продолжение под номером 2.

2. Выполняеться какая то задача (Например,если Sell: Alert("Открытый ордер на продажу"+y);),(Например,если byu: Alert("Открыт ордер на покупку"+w);), всего 1-н раз,именно для этого ордера .

После того как еще открылся один ордер(толи системой, толи вручную ), система вновь действует с пункта 1 по пункт 2 .


Capisco che un ordine pendente e un ordine aperto sono ordini diversi. E se l'ordine pendente viene aperto, allora il compito si riduce a quello iniziale, all'ordine aperto. Se ho capito bene, sta diventando molto complicato.

Quali sono i compiti? Forse, tutto può essere fatto in modo più semplice?

 
Cari esperti aiutare a cambiare il codice, abbiamo bisogno di ottenere
Cur_Trend без пустой величины, тоесть если появляется пустота, то нужно заменить последним известным значением
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LightBlue
#property indicator_color2 Magenta

double CrossUp[];
double CrossDown[];
double Cur_Trend[];
int CurrentTrend = 0;
int starttime = 0;
extern int FasterEMA = 5;
extern int SlowerEMA = 8;

int init()
  {
   IndicatorBuffers(3); 
   SetIndexStyle(0, DRAW_ARROW, EMPTY);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, CrossUp);
   SetIndexStyle(1, DRAW_ARROW, EMPTY);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, CrossDown);
   SetIndexBuffer(2, Cur_Trend);
   starttime = TimeLocal(); 
   return(0);
  }

int deinit()
  {
   return(0);
  }

int start() { 
   int limit, i, counter, loop, ii;
   double fasterEMAnow, slowerEMAnow, fasterEMAprevious, slowerEMAprevious, fasterEMAafter, slowerEMAafter;
   double Range, AvgRange;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   loop = 0;
   for(i = 0; i <= limit; i++) {
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
      fasterEMAnow = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      fasterEMAprevious = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i+1);
      fasterEMAafter = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);
      slowerEMAnow = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_OPEN, i);
      slowerEMAprevious = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_OPEN, i+1);
      slowerEMAafter = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_OPEN, i-1); 
      if ((fasterEMAnow > slowerEMAnow) && (fasterEMAprevious < slowerEMAprevious) && (fasterEMAafter > slowerEMAafter)) {
         CrossUp[i] = Low[i] - Range*0.5;
         if ((loop == 0) && (CurrentTrend != 1))  {
            CurrentTrend = 1;
            Cur_Trend[ii]= CurrentTrend;
            }
         if (loop == 0)  {
            loop = 1;
            }
      }
      else if ((fasterEMAnow < slowerEMAnow) && (fasterEMAprevious > slowerEMAprevious) && (fasterEMAafter < slowerEMAafter)) {
              CrossDown[i] = High[i] + Range*0.5;
           if ((loop == 0) && (CurrentTrend != -1))  {
              CurrentTrend = -1;
              Cur_Trend[ii]= CurrentTrend;
           }
           if (loop == 0)  {
              loop = 1;
          }
       }
   }
   return(0);
}
 

Cari esperti!

Ho bisogno del vostro aiuto per la seguente domanda. Ho un indicatore personalizzato che disegna una linea a due colori con un colore e poi un altro. C'è un modo per insegnare all'Expert Advisor a determinare il colore della linea al momento?

File: