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

 
alsu:
Non è "dovrebbe essere di tipo doppio" ma "sarà memorizzato in una variabile globale come doppio". Senti

Buon pomeriggio. Ho provato a "sentire la differenza" e questo è quello che ne è venuto fuori... Cioè possiamo (con qualche tratto) definire REALMENTE una variabile GV come segue. Una GV-variabile è una cosiddetta "scatola" in cui si può memorizzare una variabile di qualsiasi tipo (tranne la stringa, perché una GV-variabile è solo di tipo doppio, mentre la regola del typecasting non permette la riduzione del tipo, cioè non si può rendere una stringa un doppio). E questa variabile, che inseriremo in una GV-variabile, "avrà la forma di questa casella" (cioè sarà castata dal tipo sorgente al tipo doppio)... Comunque, è così, vero?

Grazie in anticipo per la vostra risposta.
 

Buon pomeriggio. La domanda è la seguente. Nellibro MQL4 diS.K ., nellasezione "Trading Operations", c'è un esempio di un semplice script che modifica un ordine pendente il cui prezzo dichiarato è superiore a quello di altri ordini pendenti (modifyorderprice.mq4) come segue:

//--------------------------------------------------------------------
// modifyorderprice.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                                     // Спец.функция start
  {
   int Tral=10;                                 // Дист. приближения
   string Symb=Symbol();                        // Финанс. инструмент
   double Dist=1000000.0;                       // Предустановка
   double Win_Price=WindowPriceOnDropped();     // Здесь брошен скрипт
//--------------------------------------------------------------- 2 --
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         //------------------------------------------------------ 3 --
         if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.
         if (OrderType()<2) continue;           // Рыночный ордер  
         //------------------------------------------------------ 4 --
         if(NormalizeDouble(MathAbs(OrderOpenPrice()-Win_Price),Digits)
            < NormalizeDouble(Dist,Digits))     // Выбираем ближайший
           {
            Dist=MathAbs(OrderOpenPrice()-Win_Price);// Новое значение
            int    Tip   =OrderType();          // Тип выбранного орд.
            int    Ticket=OrderTicket();        // Номер выбранн. орд.
            double Price =OrderOpenPrice();     // Цена выбранн. орд.
            double SL    =OrderStopLoss();      // SL выбранного орд.
            double TP    =OrderTakeProfit();    // TP выбранного орд.
           }                                    // Конец if
        }                                       // Конец анализа ордера
     }                                          // Конец перебора орд.
//--------------------------------------------------------------- 5 --
   if (Tip==0)                                  // Если отложенных нет
     {
      Alert("По ",Symb," отложенных ордеров нет");
      return;                                   // Выход из программы
     }
//--------------------------------------------------------------- 6 --
   while(true)                                  // Цикл закрытия орд.
     {
Oppure c'è un errore in questo script nel blocco 5-6, perché (come vedo) la linea
if (Tip==0)                                  // Если отложенных нет
Dovrebbe essere della forma
if (Tip<2)                                  // Если отложенных нет
dato che tutti i tipi di ordini non in sospeso (a mercato) hanno tipo 0 o 1, cioè meno di 2.

O ho capito male qualcosa.

Domanda: Potresti chiarire: se ho frainteso qualcosa, di cosa si tratta?

Grazie in anticipo per la vostra risposta.

 
7777877:

Buon pomeriggio. Ho la seguente domanda. Nellibro MQL4di S.K., nellasezione "Trading Operations", c'è un esempio di un semplice script che modifica un ordine pendente il cui prezzo dichiarato è più vicino al punto in cui lo script è allegato rispetto ai prezzi di altri ordini pendenti(

Oppure c'è un errore in questo script nel blocco 5-6, perché (per come la vedo io) la linea

dovrebbe apparire

così perché tutti i tipi di ordini non in sospeso (a mercato) hanno tipo 0 o 1, cioè meno di 2.

Oppure ho capito male qualcosa.

Domanda: potresti chiarirmi: se ho capito male qualcosa, cosa

esattamente?

Grazie in anticipo per la risposta

caro... non scrivere in lettere così grandi qui... potresti romperti gli occhi :-)

e che... prima di fare domande... hai provato a leggere il BACKGROUND in MetaEditor? Tutto?...per cominciare...così non fai domande stupide sui tipi e cose del genere....

===

Tipo di operazione per la funzione OrderSend(). Può essere uno qualsiasi dei seguenti valori:

Costante Valore Descrizione
OP_BUY 0 Compra
OP_VENDITA 1 Vendere
OP_BUYLIMIT 2 Ordine pendente BUY LIMIT
OP_SELLLIMIT 3 Ordine SELL LIMIT in sospeso
OP_BUYSTOP 4 Ordine BUY STOP in sospeso
OP_SELLSTOP 5 Ordine SELL STOP in sospeso
 

ma per quanto riguarda il tipo - non c'è niente di sbagliato... esattamente ==0 dovrebbe essere...

perché nel 3° blocco

      if (OrderType()<2) continue;           // Рыночный ордер  

gli ordini di mercato sono saltati...

===

e se gli ordini pendenti si trovano nella lista degli ordini, la variabile TYPE non sarà uguale a 0

---

 

Buon pomeriggio. Puoi darmi un suggerimento?

Per esempio, abbiamo un criterio per il passaggio di MA attraverso Level_R e Level_S:

int Criterion;
double MA_1=iMA(......,0);
double MA_2=iMA(......,1);
double MA_3=iMA(......,2);
if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 MA_3 <= Level_S_3) Criterion=1;
if(MA_1 > Level_R_1 && Ma_2 <= Level_R_2 MA_3 <= Level_R_3) Criterion=2;

Domanda: come facciamo a memorizzare il Criterio in modo che mantenga un valore di 1 o 2 (a seconda del passaggio) fino a quando si verifica un nuovo passaggio e non si resetta nei tick successivi.

 
Metti la definizione della variabile al di fuori di Start o di altre funzioni... Nelle variabili globali...
 
Aleksander:
Metti la definizione della variabile al di fuori di Start o di altre funzioni... Nelle variabili globali...
Ci ho provato, e lui ha bestemmiato... alludendo alla mia incompetenza.
 
poi, se il testo è piccolo, postare l'intero testo... 20-30 righe al massimo
 
int Criterion, Crit;
int start()
 {
  Crit= Fun_Criterion( Criterion); 

  switch(Crit)
   {
   /************/
   }
return(0);
 }

Fun_Criterion(int Criterion)
 {
  if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 MA_3 <= Level_S_3) Criterion=1;
  if(MA_1 < Level_R_1 && Ma_2 >= Level_R_2 MA_3 >= Level_R_3) Criterion=2;

  return(Criterion);
 }
 

perché ci sono gli intermediari? e qual è la funzione del FUN?

int Criterion;
int start() {
  Fun_Criterion(); 

  switch( Criterion)
   {
   /************/
   }
  return(0);
}
//-----------------------------
void Fun_Criterion() {
  if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 &&  MA_3 <= Level_S_3) Criterion=1;
  if(MA_1 < Level_R_1 && Ma_2 >= Level_R_2 &&  MA_3 >= Level_R_3) Criterion=2;
 }

E && non sono nel posto giusto...