Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1341

 
DanilaMactep:

CALCULEI O PREÇO PARA DEFINIR O OFFSET DESTA FORMA (MAKAR, VOCÊ NÃO É PELO MENOS MEU TIPO A SER TOCADO;-))

COMO POSSO VERIFICAR SE O VALOR OBTIDO ESTÁ DENTRO DOS LIMITES PERMITIDOS? NÃO ENTENDO O QUE DEVO FAZER, E COMO POSSO GARANTIR QUE SE O VALOR CALCULADO FOR INFERIOR AO PERMITIDO, O PEDIDO SERÁ ABERTO A UMA DISTÂNCIA MÍNIMA POSSÍVEL DE QUALQUER FORMA?

Tente isto,

Acho que você vai descobrir.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2013                                                     |
//|  Описание : Выполняет корректирование ценовых уровней под STOPLEVEL.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование торгового инструмента                                 |
//|    op - торговая операция                                                  |
//|    pp - цена открытия/установки                                            |
//|    sl - ценовой уровень StopLoss                                           |
//|    tp - ценовой уровень TakeProfit                                         |
//+----------------------------------------------------------------------------+
void CorrectingPrice(string sy, int op, double& pp, double& sl, double& tp) {
  if (sy=="" || sy=="0") sy=Symbol();
  RefreshRates();
  int    di=MarketInfo(sy, MODE_DIGITS);
  int   msl=MarketInfo(sy, MODE_STOPLEVEL);
  int    sp=MarketInfo(sy, MODE_SPREAD);
  double mp=MarketInfo(sy, MODE_POINT);
  double pa=MarketInfo(sy, MODE_ASK);
  double pb=MarketInfo(sy, MODE_BID);
  double ds=NormalizeDouble(pp-sl, di);
  double dp=NormalizeDouble(pp-tp, di);

  if (msl==0) msl=2*sp;
  switch (op) {
    case OP_BUY:
      pp=pa;
      sl=pp-ds;
      tp=NormalizeDouble(pp-dp, di);
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELL:
      pp=pb;
      sl=NormalizeDouble(pp-ds, di);
      tp=pp-dp;
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_BUYLIMIT:
      if (pp>pa-msl*mp) {
        pp=pa-msl*mp;
        sl=pp-ds;
        tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_BUYSTOP:
      if (pp<pa+msl*mp) {
        pp=pa+msl*mp;
        if (sl>0) sl=pp-ds;
        if (tp>0) tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELLLIMIT:
      if (pp<pb+msl*mp) {
        pp=pb+msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_SELLSTOP:
      if (pp>pb-msl*mp) {
        pp=pb-msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    default:
      Message("CorrectingPrice(): Неизвестная торговая операция!");
      break;
  }
}
 
Alekseu Fedotov:

Tente isto,

Acho que você vai pegar o jeito.

Alexey, muito obrigado por este pedaço de código. Mas infelizmente não consigo ler o código das outras pessoas devido às conseqüências de um derrame. Posso pedir-lhe uma instrução sobre como usar este código e uma recomendação sobre o que deve ser anexado e como fazê-lo?

Eis o que me vem à mente. Eu estava procurando um preço mínimo para x-bars como este

  int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          double min_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МИНИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        

mas isto não é correto, porque atribuo preço mínimo aihai, não baixo. corrigido por baixo e o erro é menor, mas ainda assim ocorre(((

Portanto, se não for difícil, envie instruções sobre como usar um código com desconto...

 

Olá a todos novamenteJ tentou aplicar o conselho que você escreveu para meu último post, mas isso não ajudou. Ainda estou recebendo 130L de erro, mas provavelmente não é o fim da perda em si, mas o preço aberto. O preço aberto para uma parada de compra e uma parada de venda é obtido determinando o preço máximo/mínimo para um x número de velas, desta forma.

          int max_bars= iHighest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double max_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          max_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          );  //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ПОКУПАК*********** 
          
          //----ПОЛУЧЕНИЕ ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПРОДАЖ
          
          
                    int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double min_Price=iLow(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          ); // КОНЕЦ АЙЛОУ

O problema não é com a parada porque eu uso a mesma parada exata e atp e fixo, ordens de mercado abertas sem erros. Isso significa que o problema está no cálculo do preço para estabelecer uma ordem pendente. Eu mesmo abro ordens como esta

OrderSend(Symbol(),OP_SELLSTOP,lot,min_Price,slippages,min_Price+sl , min_Price-tp ,comment_ao_otloj_sell); // ОТКРКЫВВАЕМ ОТЛОЖЕННЫЙ СЕЛ ОРДЕР

OrderSend(Symbol(),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp ,comment_ao_otloj_buy,magik_number,TimeCurrent()+order_life_time); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР


P/S e eu esquecemos de dizer que quero usar ordens pendentes para simular algum tipo de filtro de preço para abrir uma posição, ou seja, se o preço for na direção certa, uma ordem pendente será acionada, mas se não for, ela será cancelada e eu estarei fora do mercado. O que estou fazendo de errado ao determinar o preço de abertura? E talvez haja uma solução mais fácil para o filtro de preço para o negócio?

p/s muito gentilmente, se você escrever um código que possa ser aplicado, escreva uma instrução detalhada para ele, pois estou tendo sérios problemas para ler o código. Uma instrução detalhada, quero dizer, para que serve este código e como pode ser aplicado (para anexá-lo a uma variável e fazer algo com ele ou outra coisa, e por favor escreva seus comentários ao código de uma maneira mais compreensível). Obrigado antecipadamente ;-) P / S que tem conhecimento e experiência não passa, ajuda um irmão - não brincar ;-) tem que terminar a OP Graal ;-).

 
Colegas!

Quem trabalhava com objetos. Por favor, envie-me um exemplo de um pedaço de código, onde um triângulo desenhado manualmente, elipse ou quadrado (acho que tem um nome no gráfico) executaria alguma ação - por exemplo, um alerta (em caso de preço atingindo o objeto). Imploro-lhe muito. Não sei muito sobre isso e não consigo entender a teoria no livro de referência, mas suspeito que o princípio é elementar.
 
DanilaMactep:

Olá a todos novamenteJ tentou aplicar o conselho que você escreveu para meu último post, mas isso não ajudou. Ainda estou recebendo 130L de erro, mas provavelmente não é o fim da perda em si, mas o preço aberto. O preço aberto para uma parada de compra e uma parada de venda é obtido determinando o preço máximo/mínimo para um x número de velas, desta forma.

O problema não é com a parada porque eu uso a mesma parada exata e atp e fixa, as ordens de mercado abrem sem erros. Isso significa que o problema está no cálculo do preço para estabelecer uma ordem pendente. Eu mesmo abro ordens como esta


P/S e eu esquecemos de dizer que quero usar ordens pendentes para simular algum tipo de filtro de preço para abrir uma posição, ou seja, se o preço for na direção certa, uma ordem pendente será acionada, mas se não for, ela será cancelada e eu estarei fora do mercado. Por favor, o que estou fazendo de errado ao determinar o preço de abertura? E talvez haja uma solução mais fácil para o filtro de preço para o negócio?

p/s muito gentilmente, se você escrever um código que possa ser aplicado, escreva uma instrução detalhada para ele, pois estou tendo sérios problemas para ler o código. Uma instrução detalhada, quero dizer, para que serve este código e como pode ser aplicado (para anexá-lo a uma variável e fazer algo com ele ou outra coisa, e por favor escreva seus comentários ao código de uma maneira mais compreensível). Obrigado antecipadamente ;-) P / S que tem conhecimento e experiência não passa, ajude um irmão - não brinque ;-) Eu tenho que terminar o Graal O_o ;-)

Na função iLowest, em vez de MODE_HIGH, insira MODE_LOW.

 

Você pode me dar uma dica? Eu desenhei um segmento de linha em um gráfico. Preciso conhecer os preços inicial e final do segmento. Isso pode ser feito?

Arquivos anexados:
EURUSDM1.png  22 kb
 
Forallf:

Você pode me dar uma dica? Eu desenhei um segmento de linha em um gráfico. Preciso conhecer os preços inicial e final do segmento. Isso pode ser feito?

Você pode fazer isso em
 
Forallf:

Você pode me dar uma dica? Eu desenhei um segmento de linha em um gráfico. Preciso conhecer os preços inicial e final do segmento. Isso pode ser feito?

É desejável que este segmento tenha um nome original

 
Alekseu Fedotov:

Na função iLowest, em vez de MODE_HIGH, insira MODE_LOW.

Muito obrigado por perceberem e me alertarem - corrigi este caso e durante o teste de 2 anos houve 130 26 erros. Ao mesmo tempo, 115 negócios foram abertos normalmente
 
Порт-моне тв:
Colegas!

Quem trabalhava com objetos. Por favor, envie-me um exemplo de um pedaço de código, onde um triângulo desenhado manualmente, elipse ou quadrado (acho que tem um nome no gráfico) executaria alguma ação - por exemplo, um alerta (em caso de preço atingindo o objeto). Imploro-lhe muito. Não sei muito sobre este assunto e não entendo a teoria no livro de referência, mas suspeito que o princípio é elementar.

Alguém me ajuda?

Razão: