Скачать MetaTrader 5

Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 413

Alexey Kozitsyn
8853
Alexey Kozitsyn  
twiling1983:

Здравствуйте есть ли возможность в индикаторах или советниках во внешней переменной выбирать инструменты из списка инструментов?

А то приходится руками вписывать. 

 input string instr_1 = "ED-9.15";

 input string instr_2 = "Si-9.15";

 input string instr_3 = "BR-8.15"; 

 

С Уважением Алексей. 

Здравствуйте. Напрямую - не уверен, но можно, например, так:

enum ENUM_USED_SYMBOL
        {
         EURUSD = 0,
         GBPUSD,
         USDCHF,
         USDJPY
        };

const string symbols[ 4 ] = { "EURUSD", "GBPUSD", "USDCHF", "USDJPY" };
input ENUM_USED_SYMBOL = EURUSD;
string usedSymbol = "";		// Используемый символ
switch( inpSymbol )		// Всю эту конструкцию лучше обернуть в функцию, т.к. повторяться будет несколько раз
        {
         case EURUSD: usedSymbol = symbols[ 0 ]; break;
         case GBPUSD: usedSymbol = symbols[ 1 ]; break;
         case USDCHF: usedSymbol = symbols[ 2 ]; break;
         case USDJPY: usedSymbol = symbols[ 3 ]; break;
         default: Print( "Неизвестный символ!" );
        }
twiling1983
174
twiling1983  
Tapochun:

Здравствуйте. Напрямую - не уверен, но можно, например, так:

Спасибо но тогда проще раз в 3 месяца мне перекомпилировать файл и указать новые фьючерсы =)
Alexey Kozitsyn
8853
Alexey Kozitsyn  
twiling1983:
Спасибо но тогда проще раз в 3 месяца мне перекомпилировать файл и указать новые фьючерсы =)
Да, смахивает на костыли, но... как вариант...
twiling1983
174
twiling1983  

Здравствуйте. Как сделать так, что бы принудительно в окне индикатора значения показывались до 10 000 после запятой, а то показывает только до десятых. хотя нормализации не какой в коде нету.

http://i.shotnes.com/u/441/0813/1vyds1z0.15y.png 

 

 

 С Уважением Алексей.

 

UPD сам нашел ответ.

IndicatorSetInteger(INDICATOR_DIGITS,5); 

Vladimir Karputov
Модератор
100472
Vladimir Karputov  
twiling1983:

Здравствуйте. Как сделать так, что бы принудительно в окне индикатора значения показывались до 10 000 после запятой, а то показывает только до десятых. хотя нормализации не какой в коде нету.

http://i.shotnes.com/u/441/0813/1vyds1z0.15y.png 

 С Уважением Алексей.

Пожалуйста при вставке картинок используйте штатные средства форума: Форум: как вставить картинку
Vladimir M.
581
Vladimir M.  

Подскажите пожалуйста, при использовании Стандартной библиотеки, при получении Ask и Bid, нужно ли делать mysymbol.RefreshRates();

т.е. обновлять или для данных из Библиотеки обновление не требуется?

mysymbol.RefreshRates();
 double ask =mysymbol.Ask();
 double bid =mysymbol.Bid();

 или
 double ask =mysymbol.Ask();
 double bid =mysymbol.Bid();
Leanid Aladzyeu
5059
Leanid Aladzyeu  
rosomah:

Подскажите пожалуйста, при использовании Стандартной библиотеки, при получении Ask и Bid, нужно ли делать mysymbol.RefreshRates();

т.е. обновлять или для данных из Библиотеки обновление не требуется?

 или

если Вам нужны цены настоящего времени. не чего не нужно делать 

 if((Bid-Xprice)/Point>=Step) 

Leanid Aladzyeu
5059
Leanid Aladzyeu  

Я что то не понимаю) код перебираю уже 3 час . это функция для сетки. которая вызывается при открытии нового ордера в сетке , назвначение пересчитать ТР и поменять его у всех ордеров сетке

Но он меняет только ТР у самого старого ордера  сетке.

Что я перемудрил?)))

void ModifyOrders()
  {
   double avg= 0;
   int count = 0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OP_SELL)
              {
               avg+=OrderOpenPrice();
               count++;
              }
           }
        }
     }
   int Tcount=count-1;        // Print("204");
   avg=(Tcount*Step*0.4);
//     avg=NormalizeDouble(avg/count,Digits);
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               double Bprice=FindLastBuyPrice();//Print("215");
               TP=NormalizeDouble(Bprice+avg*Point,Digits); //Print("216");
               bool res=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0,Blue);// Print("217");
               if(!res)
                  Print(" Error modification. Error code = ",DoubleToString(GetLastError(),0));
              }

            if(OrderType()==OP_SELL)
              {
               double Sprice=FindLastSellPrice();
               TP=NormalizeDouble(Sprice-avg*Point,Digits);
               bool res=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0,Red);
               if(!res)
                  Print(" Error modification. Error code = ",DoubleToString(GetLastError(),0));
              }
           }
        }
     }

  }
Vladimir Karputov
Модератор
100472
Vladimir Karputov  
Leanid Aladzyeu:

Я что то не понимаю) код перебираю уже 3 час . это функция для сетки. которая вызывается при открытии нового ордера в сетке , назвначение пересчитать ТР и поменять его у всех ордеров сетке

Но он меняет только ТР у самого старого ордера  сетке.

Что я перемудрил?)))

Вы когда уже браузер поменяете? Прям, как дитя малое.
Leanid Aladzyeu
5059
Leanid Aladzyeu  
Karputov Vladimir:
Вы когда уже браузер поменяете? Прям, как дитя малое.

Это проблема сайта , что не адаптировали сайт под мой браузер. Сервис деск как обычно , 0 помощи. меня мой браузер устраивает.