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

 
polsvv ,è a questo che serve la magia.
 
vnn:

Ciao a tutti...

Potresti dirmi come costruire il percorso dei file della cronologia di MetaTrader 4? Come "c:\program files\metatrader 4\history\alpari-classic\"?

https://docs.mql4.com/ru/files/FileOpenHistory
 

Grazie mille, sergeev, credo di averlo trovato...

Print("Terminal path: ", TerminalPath() + "\\history\\" + AccountServer() + "\\");

Questa linea emette il percorso corretto anche se l'editor è sbagliato nei colori... Probabilmente dovreste scrivere il codice in notepad. Stavo solo scherzando.

 

Buona sera a tutti!

Nel tutorial di Sergey Kovalev ho trovato un esperto - trailing stop. L'ho copiato in MetaEditor, l'ho compilato, ma il programma non funziona. Si prega di consigliare qual è la ragione. Forse sto facendo qualcosa di sbagliato.

 

è scritto in mql?)

dammi solo il codice.

 
Ragazzi, spiegatemi come usare iCustom
Scrivo
double BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",1,0);
double BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0);
Non riesco a farlo bene ...
Ho un compito per ottenere segnali dall'indicatore Bands linea superiore e inferiore...... Esattamente Bande.....
 
//-------------------------------------------------------------------- // modifystoploss.mq4 // Progettato per essere usato come esempio nel tutorial MQL4. //-------------------------------------------------------------------- extern int Tral_Stop=10; // Dist. pursuit //--------------------------------------------------------------- 1 -- int start() // Funzione speciale start { string Symb=Symbol(); // Fin. tool //--------------------------------------------------------------- 2 -- for(int i=1; i<=OrdersTotal(); i++) // Order loop { if (OrderSelect(i-1,SELECT_BY_POS)==true) // Se c'è un prossimo { // Analisi ordine: int Tip=OrderType(); // Tipo di ordine if(OrderSymbol()!=Symb||Tip>1)continua;// Non è il nostro ordine double SL=OrderStopLoss(); // SL dell'ordine selezionato //------------------------------------------------------ 3 -- while(true) // Loop di modifica { double TS=Tral_Stop; // Valore iniziale int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Dist. minima if (TS<Min_Dist) // Se il valore dell'ordine è inferiore a quello consentito, l'ordine verrà eseguito.
               TS=Min_Dist; // Nuovo valore di TS //--------------------------------------------------- 4 -- bool Modify=false; // Non assegnato alla modifica switch(Tip) // Per tipo di ordine { caso 0 : // Ordine di acquisto if (NormalizeDouble(SL,Digits)< // Se inferiore desiderato.
                     NormalizeDouble(Bid-TS*Point,Digits)) { SL=Bid-TS*Point; // poi modificarlo string Text="Buy "; // testo per Buy Modify=true; // assegnato per modificare } break; // exit if case 1 : // Sell order if (NormalizeDouble(SL,Digits)> // se sopra richiesto.
                     NormalizeDouble(Ask+TS*Point,Digits)|| NormalizeDouble(SL,Digits)==0)//o uguale a zero { SL=Ask+TS*Point; // poi modificarlo Text="Sell "; // Modify=true; // assegnato alla modifica } } // Fine switch if (Modify==false) // se non modifica break; // exit while //--------------------------------------------------- 5 -- double TP =OrderTakeProfit(); // TP dell'ordine selezionato.
            double Price =OrderOpenPrice(); // Prezzo dell'ordine selezionato. int Ticket=OrderTicket(); // Numero dell'ordine selezionato. Alert ("Modify ",Text,Ticket,". Waiting for reply..."); bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Modifica!
            //--------------------------------------------------- 6 -- if (Ans==true) // Ha funzionato :) { Alert ("Order ",Text,Ticket," modified:)"); break; // Dal ciclo modificare.
              } //--------------------------------------------------- 7 -- int Error=GetLastError(); // Ha fallito :( switch(Error) // Supera gli errori { case 130:Alert("Wrong stops. Try again."); RefreshRates(); // Aggiorna i dati continua; // Al prossimo iterazione caso 136:Alert("Nessun prezzo. In attesa di un nuovo tick..."); while(RefreshRates()==false) // Fino al nuovo tick Sleep(1); // Ritardo nel ciclo continue; // Prossima iterazione caso 146:Alert("Il sottosistema di trading è occupato.Riprova"); Sleep(500); // Soluzione semplice RefreshRates(); // Aggiorna i dati continua; // Prossima iterazione // Errori critici caso 2 : Alert("Errore generale."); break; // Esci switch caso 5 : Alert("Versione terminale client vecchio."); break; // Esci switch caso 64 : Alert("Account bloccato."); break; // Exit switch case 133:Alert("Trading prohibited"); break; // Exit switch default: Alert("Error ",Error);//Errore } break; // Fine del ciclo di modifica } // Fine del ciclo di modifica //------------------------------------------------------ 8 -- } // Fine dell'analisi degli ordini //--------------------------------------------------------------- 9 -- return; // Exit start() } //-------------------------------------------------------------- 10 --
 
VOLDEMAR:
Ragazzi, spiegatemi come usare iCustom
Sto scrivendo
double BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",1,0);
double BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0);
Non riesco a farlo bene ...
Ho un compito per ottenere segnali dall'indicatore Bands linea superiore e inferiore...... Esattamente Bande.....
https://docs.mql4.com/ru/indicators/iBands
 
FelixFX:

Buona sera a tutti!

Nel tutorial di Sergey Kovalev ho trovato un esperto - trailing stop. L'ho copiato in MetaEditor, l'ho compilato, ma il programma non funziona. Si prega di consigliare qual è la ragione. Forse sto facendo qualcosa di sbagliato.


Usate questo:

Nelle variabili utente scriviamo:

extern string   с9="------ Трейлингстоп ------";
extern int      TrailingStop=20; //Трейлинг-Стоп рыночного ордера. Если = 0 или то тарла нет
extern int      TrailingStep=5; //Шаг трала рыночного ордера
extern bool     WaitProfit = true; // Если true, то ждать профит = значению TrailingStop и только потом начинать тралить
                                    //Иначе, трейлинговать не дожидаясь положительного профита

extern string   с10=" -------- Прочие параметры -------------";
extern int      MAGIC=123456;//У ордеров открытых вручную MAGIC=0
extern int      Proskalz=10;//Проскальзывание

In EA Start scrivere:

// ----------------------------- Тралим ордера ------------------------------------
TrailingRyn_b(TrailingStop,TrailingStep,Proskalz,MAGIC,WaitProfit,false);

Dopo l'inizio nei sottoprogrammi personalizzati scrivere:

// =================================================================================================
// ************************* Трейлинг рыночных ордеров *********************************************
// =================================================================================================


// =================  TrailingRyn() =============================================================
// функция осуществляет трейлинг рыночных ордеров 
// ----------------------------------------------
void TrailingRyn_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, int MAGIC, bool WaitProfit,  bool UseTrailingSound) {
  string SMB=Symbol(); 
  int i;
  int MinLevel=MarketInfo(SMB,MODE_STOPLEVEL);//Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах   
  int SchBuy=SchBuy(MAGIC);
  int SchSell=SchSell(MAGIC);
  if(ryn_TrStop>=MinLevel && ryn_TrStep>0 && (SchBuy>0 || SchSell>0)){    
    for (i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {WriteError(i);}
      else {
        if (OrderSymbol()==SMB && OrderMagicNumber()==MAGIC){
          TrailingPositions_b(ryn_TrStop,ryn_TrStep,Proskalz,WaitProfit,UseTrailingSound);
        }
      }
    }
  }
 if(ryn_TrStop>=MinLevel && ryn_TrStep==0)
 Alert("Трейлинг невозможен - ryn_TrStep==0");
} 
// =================================================================================================

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, bool WaitProfit, bool UseTrailingSound){
  if(OrderType()==OP_BUY){
    if(!WaitProfit || (Bid-OrderOpenPrice())>ryn_TrStop*Point){
      if (OrderStopLoss()<Bid-(ryn_TrStop+ryn_TrStep-1)*Point){
        ModifyStopLoss_b(Bid-ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
  if(OrderType()==OP_SELL){
    if(!WaitProfit || OrderOpenPrice()-Ask>ryn_TrStop*Point) {
      if(OrderStopLoss()>Ask+(ryn_TrStop+ryn_TrStep-1)*Point || OrderStopLoss()==0){
        ModifyStopLoss_b(Ask+ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss_b(double ldStopLoss, bool UseTrailingSound){
  bool fm=false;
  string NameTrallingSound  = "ok.wav";// Наименование звукового файла для трейлинга
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if(fm!=0 && fm!=-1){
    if(UseTrailingSound) { PlaySound(NameTrallingSound);}
  }   
  if(fm==0 || fm==-1) { ModifError();}
}
//+------------------------------------------------------------------+

Funzioni come ModifError() sono le mie funzioni personalizzate - mostrano solo un messaggio di errore. Scrivete invece i vostri messaggi.

 
Grazie .... Se mi avesse aiutato non starei facendo questa domanda .............
Motivazione: