Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1466

 
WindUP:
Спасибо, а можно хотябы один объективный примерчик. Вид сверху так сказать. А то я совсем нубасик и 2 дня как в теме :-)

вот наверное что то похожее

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput int    Inpcopiedrates = 2;    // какой бар
sinput double Inplow         = 100;  // отступить от low
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+


 

 
SanAlex:

Вот я пытаюсь тоже научиться - вроде что то получается 

Привет. Сорян, на скриншоте вижу, что тебе это удалось, но тут я не увидел, где в этом коде находится функция копирования данных предидущей свечи [1] ? 




Подскажите пожалуйста курсы по программированию MQL 5 для чайников, от простого к сложному, где и с каких лучше начать, что бы получить больше результата и потерять меньше времени ? Буду благодарен :-)

 
WindUP:

Привет. Сорян, на скриншоте вижу, что тебе это удалось, но тут я не увидел, где в этом коде находится функция копирования данных предидущей свечи [1] ? 




Подскажите пожалуйста курсы по программированию MQL 5 для чайников, от простого к сложному, где и с каких лучше начать, что бы получить больше результата и потерять меньше времени ? Буду благодарен :-)

Вот представьте себе, что к вам подходит друг и просит «научить работать в интернете». Сложно представить чему надо учить? Вот так-же сложно научить программированию. Есть задача — есть решение. А просто так… можно учить любой язык, основы у всех одинаковые. Программирование не столько написание кода, сколько постановка задачи, написание алгоритма решения и только потом написание кода. И завершающий этап, отладка и проверка полученного результата.

В коде SanAlrx я не понимаю зачем делать такие запасы скопированных данных если есть конкретная задача получить OHLC только первой свечи.

int copied=CopyRates(Symbol(),0,0,10,rates);

и зачем копировать значения текущей, только-что открытой свечи. Но… это его решение и его тараканы.

 
WindUP:

Привет. Сорян, на скриншоте вижу, что тебе это удалось, но тут я не увидел, где в этом коде находится функция копирования данных предидущей свечи [1] ? 




Подскажите пожалуйста курсы по программированию MQL 5 для чайников, от простого к сложному, где и с каких лучше начать, что бы получить больше результата и потерять меньше времени ? Буду благодарен :-)

я сам учусь - например зашёл в документацию https://www.mql5.com/ru/docs/series/copyrates , там есть пример скрипта, сохраняю его на компе и начинаю вчитываться и разбирать по деталям методом тыка.

и эту функцию - методом тыка и обнаружил.

//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;

это для BUY "SL"

Для SELL Нужно вот так 

   double sl=rates[Inpcopiedrates].high+Inphigh/100;

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

вот тут я просто  цифру прописал - что бы можно было до 10 бара. Но это не нужно Вам - там нужна 1 (единица)

   int copied=CopyRates(Symbol(),0,0,10,rates);
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
WindUP:

Привет. Сорян, на скриншоте вижу, что тебе это удалось, но тут я не увидел, где в этом коде находится функция копирования данных предидущей свечи [1] ? 




Подскажите пожалуйста курсы по программированию MQL 5 для чайников, от простого к сложному, где и с каких лучше начать, что бы получить больше результата и потерять меньше времени ? Буду благодарен :-)

вот тут есть хороший пример - только сейчас зашёл на страничку и тут скрипт лучше подскажет, как это работает. https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint 

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Способы привязки объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
SanAlex:

я сам учусь - например зашёл в документацию https://www.mql5.com/ru/docs/series/copyrates , там есть пример скрипта, сохраняю его на компе и начинаю вчитываться и разбирать по деталям методом тыка.

и эту функцию - методом тыка и обнаружил.

это для BUY "SL"

Для SELL Нужно вот так 

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

вот тут я просто  цифру прописал - что бы можно было до 10 бара. Но это не нужно Вам - там нужна 1 (единица)

Вот открывает и устанавливаются SL для BUY и SELL

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput double Inplowhigh     = 100;  // отступить low high
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   OnStartBuy();
   OnStartSell();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartBuy()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].low-Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartSell()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_BID);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].high+Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening SELL position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+

  Снимок

 

Здравствуйте.

Подскажите,а то голову сломал.

Через iCustom прописываю индикатор и столкнулся с проблемой, в индикаторе есть текстовое меню с выбором, открывается и там несколько пунктов прописано, ну я думаю понятно)

Так вот, как мне его прописать у себя в меню?

extern int HIT = 0; не катит, перестает отображаться, оставляю без параметров отображается.

может через ENUM , там какой выбрать, или может что еще?

Заранее спасибо.

Файлы:
 
Сергей:

Здравствуйте.

Подскажите,а то голову сломал.

Через iCustom прописываю индикатор и столкнулся с проблемой, в индикаторе есть текстовое меню с выбором, открывается и там несколько пунктов прописано, ну я думаю понятно)

Так вот, как мне его прописать у себя в меню?

extern int HIT = 0; не катит, перестает отображаться, оставляю без параметров отображается.

может через ENUM , там какой выбрать, или может что еще?

Заранее спасибо.

Поставьте пустую строку "" или пробел " "

 

Так я хотел его как-то прописать, что-бы менять настройки.

У меня для каждой пары свой пункт и как мне его выбирать?

А без того меню не актуально, а на скрине просто пример похожий.

 
Сергей:

Так я хотел его как-то прописать, что-бы менять настройки.

У меня для каждой пары свой пункт и как мне его выбирать?

А без того меню не актуально, а на скрине просто пример похожий.

Ну извините за невнимательность. В индикаторе есть перечисление. И в советнике, во входных параметрах в качестве типа переменной надо указывать имя этого перечисления.

Хотя, я не пробовал… и возможно придётся повторить это перечисление в советнике, или просто поставьте тип переменной ENUM_BASE_CORNER

Причина обращения: