初学者的问题 MQL4 MT4 MetaTrader 4 - 页 234

 
leonerd:

好的,我明白了,谢谢你。我想我要在EA上试试。但在这里我得到了5203。在MT5中,同样的代码运行良好...

我想我想明白了。我设置了超时5000(这在MT5上有效,但在MT4上无效)。我把500 - 它在MT4上也是有效的。

 

请您告知如何将指标 中的函数转移到EA 中直接计算?


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-意外的结束程序 2-不平衡的括号 不平衡的括号在意义上有什么问题?

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-意外的结束程序 2-不平衡的括号 有什么问题?

用括号固定的错误--你需要寻找成对的,或者更好--先把括号,然后在代码里面写。

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天的几百条记录消失了。有时只需在M1图表上按下 "刷新 "就能处理,昨天却不行了,我不得不从另一个终端手动导入 报价。服务器上的经纪商是好的,因为在另一个终端副本中打开的相同账户给出了一个正常的图表,没有洞。可能是什么问题?
Объем импорта - экономические данные США
Объем импорта - экономические данные США
  • 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:
这是在你打开它之前吗?
如果(OrdersTotal< 1)
(
)
原因: