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

 
rosomah:

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

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

 или

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

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

 

Я что то не понимаю) код перебираю уже 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));
              }
           }
        }
     }

  }
 
Leanid Aladzyeu:

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

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

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

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

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

 
Leanid Aladzyeu:

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

Вы всегда можете для вставки кода использовать штатный Internet Explorer - через него код точно вставляется. Думайте об окружающих - читать код в виде текста, который Вы вставляете - неудобно.
 

Подскажите код для MT4. Если пришел новый бар то перерисовать пересчитать график индикатор.

 

Код вроде нашел вставляю в старт

if(IsNewBar())
   {
    Print("Новый бар");
    RefreshRates();
    WindowRedraw();

   }

// функция за кодом

 bool IsNewBar()

{

   static datetime BARflag = 0;

   datetime now = Time[0];

   if(BARflag < now)

   {

      BARflag = now;         

      return(1);

   }

   

   else

   {

      return(0);

   }

}

 

 


Принт выходит а график не перерисовывает =(

 

 

 
twiling1983:

Подскажите код для MT4. Если пришел новый бар то перерисовать пересчитать график индикатор.

 

Код вроде нашел вставляю в старт

 

 


Принт выходит а график не перерисовывает =(

 

 

Наверное потому, что RefreshRates и WindowRedraw на индикаторы никак не влияют. Вам надо копать индикаторы.
 

Как определить что мы покупаем на текущем графике и за что (кривовато по-русски, сорри). Например, на графике EURUSD базовая валюта (то, что покупаем) EUR, а котируемая валюта (то, за что покупаем) USD. Их можно определить:

string first = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_BASE);
string second = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_PROFIT);

А как быть с, например, золотом? На графике GOLD оба значения будут USD. А мне нужно определить, что покупаем золото за USD. Анализ строки названия символа не подходит.

 
Alexey Viktorov:
Наверное потому, что RefreshRates и WindowRedraw на индикаторы никак не влияют. Вам надо копать индикаторы.

Ну вот если в терминале нажать кнопку обновить, то все пересчитывается.

как в коде нажать такую же кнопку? =)

 

По моему так выходит

 

  ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT); 

 

Начал изучать массивы .

Написал функцию про ордерам с массивами , 3 массива = 0 покупка, 1= продажа, 2= всего сделок покупки и продажи.

Далее написал в условие на покупку если ( первое условие && массив [0] == 0 )то открываем покупку

и на продажу если ( первое условие && массив  [1]==0) то открываем на продажу.

Но в тестере кидает ошибку и тест останавливается, в чем дело?   ( ошибка " выход из массива " )

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