Domanda sul consulente multivaluta - pagina 3

 

Grazie, komposter. Cominciato a farlo!

Ma ecco che arriva un'altra domanda! Il mio Expert Advisor ha i blocchi di apertura delle posizioni e le trailing bar separatamente.

int start()
  {
// ЗАДАЕМ ПЕРЕМЕННЫЕ ДЛЯ ВСЕХ ПАР
 
 
 // ОТКРЫВАЕМ ПОЗИЦИИ ПО ВСЕМ ПАРАМ
 
//----------------------------------------------
// -------- ТРЕЙЛИНГ СТОПЫ -----------------------
if (UseTrailing_ == True)                                             {                  
for (int r=0; r<OrdersTotal(); r++)                                    {
    if (OrderSelect(r, SELECT_BY_POS, MODE_TRADES))                     {
//--------------------------------------------------
     if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==MagicGBPUSD)     
      {  Трейлинг по фунту }
//--------------------------------------------------
     if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==MagicEURUSD)     
      {  Трейлинг по евро }
//--------------------------------------------------------------------
                                                                       }
                                                                      }
                                                                     }
//----------------------------------------------------------------------
   } 
  return(0);
COME, ho messo un pezzo di codice (ad esempio per la sterlina) nella rete a strascico -

double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

Ma ho già usato questo pezzo quando ho aperto una posizione su GBP. Ora posso usare di nuovo lo stesso trailing stopper? Oppure, devo reinserire la stessa fetta finale per la sterlina, con nomi di valori leggermente diversi?

 
rid:
TUTTAVIA, ho messo un pezzo di codice (ad esempio per la sterlina) nel trailing -
double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

Ma ho già usato questa fetta in precedenza quando ho aperto una posizione sulla sterlina. Posso usare di nuovo lo stesso pezzo nella rete a strascico? O devo reinserire lo stesso pezzo con nomi leggermente diversi per questi valori nel trawl per la sterlina?

Potete inserire "questo bit" all'inizio della funzione start() e usare valori variabili in tutti i blocchi.
 

Grazie mille per la vostra risposta! komposter!

Un'ultima domanda importante. (Ho paura di sembrare troppo invadente, ma...) -

Per la terza coppia (a causa di vari motivi) chiamo la libreria trailing. Dalla cartella librares, per esempio.

Come essere in questo caso? È necessario specificare la stessa cosa all'interno della libreria per questa coppia

//RefreshRates();
 double bid = MarketInfo("USDCHF", MODE_BID);
 double ask = MarketInfo("USDCHF", MODE_ASK);
 double point =MarketInfo("USDCHF",MODE_POINT);

e cambiare il simbolo e la magia di conseguenza:

... .... .....
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        if (OrderType()==OP_BUY) {
          if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) {
            if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
              ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy); 
 .... ... ...
 
rid:

Per la terza coppia io (per vari motivi) chiamo la libreria di traino. Dalla cartella libraris, per esempio.
Come essere in questo caso? Ho bisogno di impostare in modo simile all'interno della libreria

Dipende dalla biblioteca. Se sa come lavorare con ordini di caratteri non nativi, non sarà un problema. Se non lo fa, sarà male ;)
 

Questa è la libreria di uscita a tre livelli di Kim. Ora sono entrato nel codice. Invece di un simbolo ovunque ho impostato il nome della coppia e invece di un magik ho impostato il magik della mia coppia.

//+------------------------------------------------------------------+
//|                                                  a-TLE_v.1.6.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  v.1.6  Три уровня переноса стопа.                               |
//| 23.11.2005 v.a1.6  Реализация в виде универсального модуля.      |
//|                                                                  |
//|   Для использования добавить строку в модуле start               |
//|   if (UseTrailing) TrailingPositions();                          |
//+------------------------------------------------------------------+
 
//------- Внешние параметры модуля - уровни переноса--------------------
... ... ... ...
 
//+------------------------------------------------------------------+
//| Сопровождение позиций                                            |
//+------------------------------------------------------------------+
void TrailingPositions()                                  {
  for (int i=0; i<OrdersTotal(); i++)                       {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))           {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        ThreeLevelSystemOfOutput();
      }
    }
  }
}
 
//+------------------------------------------------------------------+
//| Трёхуровневая система выходов                                    |
//+------------------------------------------------------------------+
void ThreeLevelSystemOfOutput()                      {
   int sp=MarketInfo(OrderSymbol(), MODE_SPREAD);
  if ( бла-бла-бла)                                  {
    SimpleTrailingPositions();
                                                      }
                                                      }
 
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void SimpleTrailingPositions() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
... ... ...
   
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
... ... ...
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLossInPoint(int pp) {
    double ldSL=0, mp=MarketInfo(OrderSymbol(), MODE_POINT);  
 ... ... ...  
//+------------------------------------------------------------------+
//| Возвращает профит позиции в пунктах                              |
//+------------------------------------------------------------------+
int ProfitPosition() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double pr=0;
 
  if (OrderType()==OP_BUY) {
    pBid=MarketInfo(OrderSymbol(), MODE_BID);
    pr=(pBid-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
    pr=(OrderOpenPrice()-pAsk)/pp;
  }
  return(MathRound(pr));
}
 
//+------------------------------------------------------------------+
//| Возвращает StopLoss позиции в пунктах                            |
//+------------------------------------------------------------------+
int StopLossInPoint() {
  double pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double sp=0;
 
  if (OrderType()==OP_BUY) {
    sp=(OrderStopLoss()-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    sp=(OrderOpenPrice()-OrderStopLoss())/pp;
  }
  if (OrderStopLoss()==0) sp=-OrderOpenPrice()/pp;
  return(MathRound(sp));
}
//+------------------------------------------------------------------+

Potete vedere che è un po' sfocata con tutti i diversi

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);

e questo in quasi tutte le operazioni!

Ma ho cambiato solo il simbolo (ho specificato la coppia) e il mago all'inizio! Ho avviato l'Expert Advisor online in un timeframe di 1 minuto. Ho aspettato il profitto e fermato il movimento dei prezzi su questa coppia. Tutto sembra funzionare bene. Sono in accordo con l'algoritmo di questa biblioteca.

Ma non ho ancora tratto profitto su altre due coppie (con le mie reti da traino).

Lo guarderò domani online.

 
rid:

Questa è la libreria di uscita a tre livelli di Kim. Ora sono entrato nel codice. Invece di un simbolo ovunque ho impostato il nome della coppia e invece di un magik ho impostato il magik della mia coppia.

...

Potete vedere che è un po' sfocata con tutti i diversi

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
La libreria è scritta in modo competente - non c'è alcun collegamento con lo strumento grafico.
Può quindi essere utilizzato senza modifiche.
 

Grazie ancora, komposter, per le tue risposte!

Ora ho aspettato online i profitti su tutte e tre le coppie del mio Expert Advisor. Sembra che ogni coppia lavori secondo la sua modalità di traino! Compresa la coppia con il richiamo della biblioteca!

 
komposter:
rid:

Questa è la libreria di uscita a tre livelli di Kim. Ora sono entrato nel codice. Invece di un simbolo ovunque ho impostato il nome della coppia e invece di un magik ho impostato il magik della mia coppia.

...

Potete vedere che è un po' sfocata con tutti i diversi

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
La libreria è scritta in modo competente - non c'è alcun collegamento con lo strumento grafico.
Può quindi essere utilizzato senza modifiche.

Ci metto la mia versione... codice di taglio:


extern int    MagicNum = 400400, Stop = 33;
extern double Lot1 = 0.3;
int LotStop [8] = {28,33,43,33,33,33,33,33}; //можно юзать просто Stop
 
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
{ 
 int i, SymPermitted = 3;
 string Symbols[8] = {"EURUSD","GBPUSD","USDJPY","EURJPY","USDCHF","Reserved","Reserved","Reserved"};
 
  // Ma defence
  if (Bars<100)
    return(0);  
  
  for (i=0; i < SymPermitted; i++)
  {
    // Compile/reload/crash config defence
    if      (Symbols[i] == "EURUSD") { Stop = 28; Lot1 = 0.6; }
    else if (Symbols[i] == "GBPUSD") { Stop = 33; Lot1 = 0.2; }
    else if (Symbols[i] == "USDJPY") { Stop = 43; Lot1 = 0.6; }
    Sleep (1000); // Просто так
    Checking (Symbols[i], i);
  }
  return (0);
}
 
void Checking (string Sym, int LotStopIndex)
{
 int Total, LotStop = LotStop[LotStopIndex], i, j, Tic = 0;
 double VPoint, VAsk, VBid;
 
   Total = OrdersTotal();
 
   // Check opened
   for (i=0; i<Total; i++)
   {
     if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true)
     {  
       if (OrderSymbol() == Sym && OrderMagicNumber() == MagicNum)
         return (0);
     }
   }
   
   VPoint = MarketInfo(Sym, MODE_POINT);
   //... кучка кода расчётов
   Total = HistoryTotal();
   
   if (Total == 0)
   { // Reset to default
     LotSize = Lot1;
     LotStop[LotStopIndex] = Stop;
   }
   
   for (i=0; i<Total; i++)
   {
     if (OrderSelect (Total-i-1, SELECT_BY_POS, MODE_HISTORY) == true)
     { 
       if (OrderSymbol() == Sym && OrderMagicNumber() == MagicNum)
       { // Was loss (Alpari иногда выбивает положительные лосы и отрицательные профиты... мистика
         if (((OrderProfit ()) < 0) || (OrderClosePrice() == OrderStopLoss()))
         { ..код
         }
           
         else
         { // Reset to default
           LotSize = Lot1;
           LotStop[LotStopIndex] = Stop;
         }
         break;
       }
     }
 
     else
     {
       Print("Ошибка <", GetLastError(), "> при выборе хистори - ордера");
       return (1);
     }
  }
 
  if(AccountFreeMarginCheck(Sym, OP_BUY, LotSize) <= 0) 
  {  return (0); }
 
  
  VAsk = MarketInfo (Sym, MODE_ASK);
  VBid = MarketInfo (Sym, MODE_BID);
  // bay|sell...
  
  if (условие 1)
    Tic = OrderSend (Sym, OP_BUY, LotSize, VAsk, 3, VAsk-LotStop[LotStopIndex]*VPoint, VAsk+LotStop*VPoint, "CMATest5m", MagicNum, 0, Lime);
    
  else if (условие 2)
    Tic = OrderSend (Sym, OP_SELL, LotSize, VBid, 3, VBid+LotStop[LotStopIndex]*VPoint, VBid-LotStop*VPoint, "CMATest5m", MagicNum, 0, Red);
  
  if (Tic <= 0)
  {
    Print("Ошибка <", GetLastError(), "> при запросе ордера");
    Sleep (60000); // Ждём минуту... рынок никуда не убежит :-)...
  }
}
 

VassaV, dicci un po' di più su quello che hai postato qui e su come usarlo.

Cosa significa l'espressione "tagliare il codice"?

Perché non c'è un commento nella terza riga. //può usare...?

 
rid:

VassaV, dicci un po' di più su quello che hai postato qui e su come usarlo.

Cosa significa l'espressione "tagliare il codice"?

Perché non c'è un commento nella terza riga. //può usare...?


Tagliare significa tagliare in modo che rimanga solo la base. Come usarlo dipende da voi, ecco solo un esempio.

Corrispondentemente:

//... un mucchio di codice di calcolo - qui il suo codice di elaborazione dei segnali/indicatori.

// ...codice - qui abbiamo il nostro codice per l'elaborazione delle perdite

condizione 1 - qui abbiamo il nostro codice di condizioni di acquisto/vendita

// puoi usare...? - è un commento, è solo visualizzato in questo modo.

Significa che potete usare degli array per memorizzare i parametri di ogni valuta o potete memorizzare i parametri nel codice

(sezione // Compile/reload/crash config)