[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 510

 
hoz:
A questão é esta. Se eu quiser colocar uma Ordem Limitada Pendente que acione exatamente na abertura do Day Bar, ou seja, o bar na TF D1. Como devo implementá-lo? Eu realmente não entendo a lógica. Afinal, não preciso colocar um simples Limitador, mas um Limitador que funcione exatamente em uma determinada hora, ou seja, na abertura de um novo bar do dia.
Em primeiro lugar, decida com terminologia - "Limite que desencadeará exatamente em um determinado momento" - o que significa "Limite que desencadeará"? E quanto mais você explicar este processo mágico - mais fácil será implementá-lo na vida real. Por via das dúvidas, leia sobre ordens pendentes.
 
Dimka-novitsek:

Boa noite! Estou perplexo. Tenho duas ordens em aberto no testador, uma com lucro, a outra sem ele.

Ambas ganham com takeprofit de uma só vez!!!!

Já passei por este lugar oito vezes no testador. Eu não consigo entender!

Talvez você possa compartilhar um segredo - "Por que criar um clone de uma ordem aberta?? Você não pode abrir UM pedido com um lote maior???? ;)
 
É uma estratégia. Talvez eu tire uma foto agora. Oh, meu irmão mais velho está aqui. Não consigo chegar a tempo. É uma situação estranha, no entanto.
 
é correto comparar formatos de data/hora como este?
datetime t=OrderCloseTime();
             datetime t1=Time[1];
             datetime t0=Time[0];
             if(t1>=t&&t<t0){
               p++;
             }
 
Dimka-novitsek:
Esta é uma estratégia. Talvez eu tire uma foto agora. Oh, meu irmão mais velho está aqui. Não consigo chegar a tempo. É uma situação estranha.

Quando Diman, você será capaz de usar uma CAMPANHA PESSOAL?)

Você já ganhou algum dinheiro em um ano no mundo real? É como os montantes START alocados a você, não é?)

 
TarasBY:
Em primeiro lugar, defina a terminologia - "o limite que será acionado exatamente em um determinado momento" - o que significa "o limite será acionado"? E quanto mais detalhes você der sobre este processo mágico - mais fácil será implementá-lo na vida real.


Sim, eu falei mal. Quero dizer, basicamente. Se estiver claro aqui, o pêndulo só é colocado no preço.

Aqui está o código:

//+------------------------------------------------------------------+
//|                                                       2 Days.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string    A1 = "Объем сделки. Если i_lots = 0, то считается в процентах";
extern double    i_lots = 0.1;
extern string    A2 = "Управление рисками";
extern double    i_sl = 15,
                 i_tp = 10;
extern int  slippage,
            price_b,
            price_a;

extern string    Z1 = "=== Прочие настройки ===";
extern string    i_openOrderSound = "ok.wav";
extern int       i_magicNumber = 400021;

double firstBarClosed,
       secondBarClosed;
 
// Идентификаторы типов сигналов
#define SIGNAL_BUY              1                     // Сигнал на покупку
#define SIGNAL_SELL            -1                     // Сигнал на продажу
#define SIGNAL_NO               0                     // Нет сигнала

#include <stderror.mqh>

int init()
{
   
   return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}
//+------------------------------------------------------------------+
//+-------------------------------------------------------------------------------------+
//| Получение рыночных данных                                                           |
//+-------------------------------------------------------------------------------------+
//FindOrders()
//+-------------------------------------------------------------------------------------+
//| Получение рыночных данных                                                           |
//+-------------------------------------------------------------------------------------+
void GetMarketInfo()
{
  price_b = MarketInfo(Symbol(),MODE_BID);
  price_a = MarketInfo(Symbol(),MODE_ASK);
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade(int signal, double& priceForBuy, double& priceForSell)
{
 // FindOrders();
  priceForBuy = NormalizeDouble(priceForBuy,Digits);
  priceForSell = NormalizeDouble(priceForSell,Digits);
  
  if(!IsTesting())
     GetMarketInfo();
     
  if (signal == SIGNAL_BUY)
     if (!OrderSend(Symbol(),OP_BUYLIMIT, i_lots,priceForBuy,slippage,i_sl,i_tp,"",i_magicNumber,3))
     return(false);
     
  if (signal == SIGNAL_SELL)
     if (!OrderSend(Symbol(),OP_SELLLIMIT,i_lots,priceForSell,slippage,i_sl,i_tp,"",i_magicNumber,3))
     return(false);
     
  return(true);
}
//+-------------------------------------------------------------------------------------+
//| Получение цены входа в покупку или в продажу                                        |
//+-------------------------------------------------------------------------------------+
double GetPriceToInput()
{
  firstBarClosed = iClose(Symbol(),1440,2);
  secondBarClosed = iClose(Symbol(),1440,1);
    
  {
    double deltaForSell = (firstBarClosed - secondBarClosed)/2;
    double priceForSell = secondBarClosed - deltaForSell;
    
    return(priceForSell);
  }  

  {
    double deltaForBuy = (secondBarClosed - firstBarClosed)/2;
    double priceForBuy = secondBarClosed + deltaForBuy;  
    return(priceForBuy);
  }
}
//+-------------------------------------------------------------------------------------+
//| Генерация сигнала закрытия, покупки или продажи                                     |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
  if(firstBarClosed > secondBarClosed)
  return(SIGNAL_BUY);

  if(firstBarClosed < secondBarClosed)
  return(SIGNAL_NO);
}
//+-------------------------------------------------------------------------------------+
//| Функция Start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
  int signal = GetSignal();
    
    if (signal != SIGNAL_NO)
      if(!Trade(signal, priceForBuy, priceForSell))
      return(0);

  return(0);
}


A questão, de fato, não é muito complicada. Eu passei osparâmetros formais PriceForBuy e PriceForSell para a função Trade(int signal, double& priceForBuy, double& priceForSell). Os parâmetros são passados pelos links. Não é feito desta maneira? As funções são locais, não globais.

Ocorreu um erro durante a compilação:

'priceForBuy' - variable not defined    E:\Insall'd soft's\Forex\Admiral Markets\experts\2 Days.mq4 (117, 25)
'priceForSell' - variable not defined   E:\Insall'd soft's\Forex\Admiral Markets\experts\2 Days.mq4 (117, 38)

De onde vem o erro? Já defini estes parâmetros na funçãoGetPriceToInput().

 
Para que serve o pretzel & depois do dobro (honestamente não sei)?
 
YOUNGA:
e para que serve o pretzel & after double (honestamente não sei)?

É uma obsessão em querer passar parâmetros por referência. :-)

 
Roman.:

É uma obsessão em querer passar parâmetros por referência. :-)



De que outra forma? A mesma coisa para calcular 100 vezes?
 
hoz:


Sim, eu estava errado. Em geral. Se estiver claro aqui, a ordem pendente é definida apenas pelo preço.

Aqui está o código:

A questão é essencialmente descomplicada. Passei os parâmetros formais priceForBuy e priceForSell para a função Trade(int signal, double& priceForBuy, double& priceForSell). Os parâmetros são passados pelos links. Não é feito desta maneira? As funções são locais, não globais.

Ocorreu um erro durante a compilação:

De onde vem o erro? Já defini estes parâmetros na funçãoGetPriceToInput().

O preçoForBuy e as variáveis priceForSell não foram encontrados - diz o compilador. Você precisa descobrir como passar os valores das variáveis por referência.