Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 234

 
leonerd:

ок понятно, спасибо. Решил на эксперте потренироваться. Но тут 5203 вылезла. В МТ5 этот же код работает прекрасно..

кажется, разобрался. Таймаут был 5000 (работало на МТ5, но не МТ4). Поставил 500 - заработало и на МТ4.

 

Подскажите пожалуйста,  как организовать перенос функции из индикатора в советник, чтобы рассчитывать прямо в нем?


void OnTick()

{

SovExitBuffer[0]= getValue()// }

)?


int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

//---
   int limit;
//---
   if(rates_total<=1)
      return(0);
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit=limit+1;

 for(int i=limit-1; i>=0; i--)
 {

  
  upDband1=iMA(NULL,0,25,0,MODE_SMA,PRICE_CLOSE,i)+iStdDev(NULL,0,25,0,MODE_EMA,PRICE_CLOSE,i)*2;
  maDbands1=iMA(NULL,0,25,0,MODE_SMA,PRICE_CLOSE,i);
  deltaDbands1=upDband1-maDbands1;

  ExitBuffer[i]=deltaDbands1; //Это значение нужно получить в советнике в Ontick()
  
  }

   return(rates_total);
  }


 

Подскажите написал такой код светит 2 ошибки ! 1-unexpected end program 2- Unbalanced parentheses Что не так всмысле не сбалонсированые скобки?

extern double        Lot   =1;
//-------------------------------------
//----------------------------------
void start()
{
  Lot=OrderLots();
  void RefreshRates();
  CurAskPriceOne = MarketInfo("EURUSD", MODE_ASK);
  CurAskPriceTwo = MarketInfo("USDCHF", MODE_ASK);
 //----------
 //--Открытие ордера1
    Ticket=OrderSend("EURUSD",OP_BUY,Lot,CurAskPriceOne,2,0,0);
    if (Ticket > 0)
      {
       if(OrderSelect(Ticket,SELECT_BY_POS,MODE_TRADES)) Print (" One order opene : " , OrderOpenPrice());
      {
      else Print ("Eror opening BUY EURUSD order : ",GetLastError();
//-------------
//--Ордер 2
          Ticket=OrderSend("USDCHF",OP_BUY,Lot,CurAskPriceTwo,2,0,0);
    if (Ticket > 0)
      {
       if(OrderSelect(Ticket,SELECT_BY_POS,MODE_TRADES)) Print (" One order opene : " , OrderOpenPrice());
      {
      else Print ("Eror opening BUY USDCHF order : ",GetLastError());
      
//---------------------------Закрытие старт
  return;
}
 
Tenimagalon:

Подскажите написал такой код светит 2 ошибки ! 1-unexpected end program 2- Unbalanced parentheses Что не так всмысле не сбалонсированые скобки?

Ошибки со скобками исправил - искать нужно парные, а лучше - сначала скобки ставить, а потом уже внутри код писать:

extern double        Lot   =1;
//-------------------------------------
//----------------------------------
void start()
{
   Lot=OrderLots();
   RefreshRates();
   CurAskPriceOne = MarketInfo("EURUSD", MODE_ASK);
   CurAskPriceTwo = MarketInfo("USDCHF", MODE_ASK);
   //----------
   //--Открытие ордера1
   Ticket=OrderSend("EURUSD",OP_BUY,Lot,CurAskPriceOne,2,0,0);
   if(Ticket > 0)
     {
      if(OrderSelect(Ticket,SELECT_BY_POS,MODE_TRADES)) 
         Print(" One order opene : " , OrderOpenPrice());
      else
         Print("Eror opening BUY EURUSD order : ",GetLastError());
     }
   //-------------
   //--Ордер 2
   Ticket=OrderSend("USDCHF",OP_BUY,Lot,CurAskPriceTwo,2,0,0);
   if (Ticket > 0)
     {
      if(OrderSelect(Ticket,SELECT_BY_POS,MODE_TRADES)) 
         Print(" One order opene : " , OrderOpenPrice());
     }
   else
      Print("Eror opening BUY USDCHF order : ",GetLastError());
   //---------------------------Закрытие старт
   return;
}

... но логики в вашем коде нету...

 

Добавлю,

это:

Lot=OrderLots();

работать не будет,  работу функции  OrderLots(), читайте справку.

переменные:   

CurAskPriceOne и CurAskPriceTwo

ни где не объявляются,

надо так, примерно.

   double CurAskPriceOne = MarketInfo("EURUSD", MODE_ASK);
   double CurAskPriceTwo = MarketInfo("USDCHF", MODE_ASK);

как то так

 
Ну на счет лот согласен.А 
  double CurAskPriceTwo = MarketInfo("USDCHF", MODE_ASK);

не объявлял и работала. :)

 
Несколько раз наблюдал исчезновение минутных котировок задним числом. Например, вчера вечером (12.02) пропало несколько сотен записей за 10-11 число. Иногда это лечится простым нажатием "обновить" на графике М1, вчера так не получилось и пришлось вручную импортировать котировки из другого терминала. У брокера на сервере при этом все в порядке, т.к. тот же счет, открытый в другой копии терминала, дает нормальный график без дыры. В чем может быть дело?
Объем импорта - экономические данные США
Объем импорта - экономические данные США
  • www.mql5.com
Импорт (Imports) отражает объем товаров и услуг из-за рубежа, которые сразу же входят в сети потребления, склады и зоны внешней торговли. При составлении индикатора обычно используется стоимость
 
Мужики помогите разобраться.Как открывать ордера разобрался.Как закрывать как их по типу брать.Ни хрена не могу понять как заставить бота открыть Один мать его ордер и все :) А не на каждом тики открывать.Пожалуйста объясните? валенку.Возьмем простейший код.Что нужно сюда вписать в начало или конец чтобы эта сволочь открыла ордер один раз.
extern double lot =1;
int start()
{
  int Ticket;
   Ticket=OrderSend("USDCHF",OP_BUY,Lot,Ask,2,0,0);
 return(1);
}
 
Tenimagalon:
Мужики помогите разобраться.Как открывать ордера разобрался.Как закрывать как их по типу брать.Ни хрена не могу понять как заставить бота открыть Один мать его ордер и все :) А не на каждом тики открывать.Пожалуйста объясните? валенку.Возьмем простейший код.Что нужно сюда вписать в начало или конец чтобы эта сволочь открыла ордер один раз.
OrdersTotal() < 1
 
Iurii Tokman:
Это перед открытием прописать? 
if (OrdersTotal < 1)
  (
  )
Причина обращения: