Pergunta do assessor multimoedas - página 3

 

Obrigado, komposter. Começou a fazer isso!

Mas aí vem outra pergunta! Meu Conselheiro Especialista tem blocos de abertura de posição e barras de fuga separadamente.

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);
COMO, eu coloco um pedaço de código (por exemplo, para a libra) na rede de arrasto -

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

Mas eu já usei esta parte quando abri posição em GBP. Posso usar novamente a mesma rolha de arrasto? Ou será que eu preciso reentrar a mesma fatia para a libra, com nomes de valores ligeiramente diferentes?

 
rid:
ENTÃO, eu coloquei um pedaço de código (por exemplo, para a libra) no trilho -
double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

Mas eu já usei esta fatia antes quando abri uma posição na libra. Posso agora usar a mesma peça na rede de arrasto novamente? Ou tenho que reentrar a mesma peça com nomes ligeiramente diferentes para estes valores na rede de arrasto para a libra?

Você pode inserir "este bit" logo no início da função start() e usar valores variáveis em todos os blocos.
 

Muito obrigado por sua resposta! komposter !

E uma última questão importante. (tenho medo de parecer demasiado intrusivo, mas...) -

Para o terceiro par I (por várias razões), ligue para a biblioteca de trilhas. A partir da pasta librares, por exemplo.

Como estar neste caso? É necessário especificar a mesma coisa dentro da biblioteca para este par

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

e mudar o símbolo e o magik de acordo:

... .... .....
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:

Para o terceiro par I (por várias razões), ligue para a biblioteca de trilhas. A partir da pasta libraris, por exemplo.
Como estar neste caso? Preciso colocar de forma semelhante dentro da biblioteca

Depende da biblioteca. Se souber trabalhar com ordens de caráter não nativo, isso não será um problema. Se não for assim, será ruim ;)
 

Esta é a biblioteca de saída em três níveis da Kim. Agora eu entrei no código. Em vez de um símbolo em todos os lugares que eu coloco o nome do par e em vez de um magik eu coloco o magik do meu par.

//+------------------------------------------------------------------+
//|                                                  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));
}
//+------------------------------------------------------------------+

Você pode ver que está um pouco desfocado com todos os diferentes

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

e isso em quase todas as operações!

Mas eu só mudei o símbolo (especifiquei o par) e o mágico logo no início! Iniciei o Expert Advisor on-line em 1 minuto. Esperei por lucro e parei a movimentação de preços neste par. Tudo parece estar funcionando bem. Estou de acordo com o algoritmo desta biblioteca.

Mas ainda não lucrei com dois outros pares (com minhas próprias redes de arrasto).

Assistirei a ela amanhã on-line.

 
rid:

Esta é a biblioteca de saída em três níveis da Kim. Agora eu entrei no código. Em vez de um símbolo em todos os lugares que eu coloco o nome do par e em vez de um magik eu coloco o magik do meu par.

...

Você pode ver que está um pouco desfocado com todos os diferentes

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
A biblioteca é escrita de forma competente - não há nenhuma ligação com a ferramenta gráfica.
Portanto, pode ser utilizado sem modificações.
 

Mais uma vez obrigado, komposter, por suas respostas!

Agora esperei online pelos lucros dos três pares do meu Conselheiro Especialista. Parece que cada par funciona de acordo com seu modo de arrasto! Incluindo o par com a chamada da biblioteca!

 
komposter:
livrar:

Esta é a biblioteca de saída em três níveis da Kim. Agora eu entrei no código. Em vez de um símbolo em todos os lugares que eu coloco o nome do par e em vez de um magik eu coloco o magik do meu par.

...

Você pode ver que está um pouco desfocado com todos os diferentes

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
A biblioteca é escrita de forma competente - não há ligação com a ferramenta gráfica.
Portanto, pode ser utilizado sem modificações.

Vou lançar minha própria versão... código de corte:


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, conte-nos um pouco mais sobre o que você postou aqui e como utilizá-lo.

O que significa a expressão "código de corte"?

Por que não há um comentário na terceira linha. //c você pode usar...?

 
rid:

VassaV, conte-nos um pouco mais sobre o que você postou aqui e como utilizá-lo.

O que significa a expressão "código de corte"?

Por que não há um comentário na terceira linha. //c você pode usar...?


Cortar para cima significa cortar para que somente a base fique. Como utilizá-la depende de você, aqui está apenas um exemplo.

Correspondentemente:

//... um monte de código de cálculo - aqui seu próprio código de processamento de sinal/indicador.

// ...código - aqui temos nosso próprio código para o processamento de perdas

condição 1 - aqui temos nosso próprio código de condições de compra/venda

// você pode usar...? - é um comentário, é apenas apresentado desta forma.

Isso significa que você pode usar matrizes para armazenar os parâmetros de cada moeda ou você pode armazenar os parâmetros no código

(seção // Compile/reload/crash config)

Razão: