来自一个 "傻瓜 "的问题 - 页 273

 
bagdarino:

例如每月20个学分的费用,什么是学分和它的费用。

1个积分=1美元
 

一对需要被编码成一个数字。在MT4上,我通过首先初始化阵列来摆脱这种情况。

string CurrName [35]={"","","","","","","","","","","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

然后通过在数组中运行,将这对数字写入。

for(int i=0; i<=6; i++)
  {string letter = StringSubstr(Symb,i,1);
   for(int j=10; j<=35;j++)
    {if(letter == CurrName[j])
     {text1=StringConcatenate(text1, j);
      break;
      }}}

我很想知道,它在MT5上不工作,因为当我试图初始化一个数组 时已经得到了一个错误信息。

'Z' - 太多的初始化器

不幸的是,在这一点上,我的知识有一个缺口。

请提出解决这个问题的可能办法。也许MT4也有更快的方法,我很想知道。


Документация по MQL5: Операции с массивами / ArrayInitialize
Документация по MQL5: Операции с массивами / ArrayInitialize
  • www.mql5.com
Операции с массивами / ArrayInitialize - Документация по MQL5
 
Heroix:

一对需要被编码成一个数字。在MT4上,我通过首先初始化阵列来摆脱这种情况。

然后我通过在数组中运行,将这对数字写进数字。

.........

它在MT5上不工作,因为我在试图初始化阵列 时已经得到了一个错误信息。

'Z' - 太多的初始化器

你有一个大小为[35]的数组,字母 "Z "不适合放入其中,编译器会通知你。

不幸的是,在这一点上,我的知识 有一个缺口。

请提出解决这个问题的可能办法。也许MT4也 更快的方法,很想知道

关于快速方法。 编程就像诗歌。 除了字母,你不需要知道任何东西。 剩下的就是创造力。 你有一个问题--你发明一个解决方案。

你还侮辱我,暗示一个好的程序员和一个坏的程序员的区别仅仅在于熟读的参考书的厚度.... :) 我现在甚至不觉得有什么帮助......

Fi!

 
MetaDriver:

Vapchepa 10+26=36.而你有一个大小为[35]的数组,字母 "Z "不适合通过,这是编译器告诉你的。

编程就像诗歌一样,除了字母,你不需要知道任何东西。 剩下的就是创造力。 你有一个问题--你发明一个解决方案。

而你暗示一个好的程序员与一个坏的程序员的区别仅仅在于记忆深刻的参考书的厚度,这是对我的侮辱 .... :) 我甚至不觉得有什么帮助...

Fi!

很奇怪,但不知何故,该代码在MT4上是有效的。在那里的循环中,是的,j<=36是在原来的,这是这里 "画 "的35。

谢谢你,问题确实出在数组值的声明上。我每隔100年就这样声明一次数组,比喻说...不要对其进行过于苛刻的判断。

你在最后几行中,只有猜测,没有别的。几乎直接写道:由于各种原因,我不知道该怎么做。

 
Heroix:

很奇怪,但不知何故,该代码在MT4上是有效的。在那里的循环中,是的,j<=36是在原来的,这是这里 "画 "的35。

谢谢你,问题确实出在数组值的声明上。我每隔100年就这样声明一次数组,比喻说...不要对其进行过于苛刻的判断。

好的。

你在最后几行中,只有猜测,没有别的。几乎直接写道:由于各种原因,我不知道该怎么做。

好吧,好吧,我们就说我有这个...满月,是的,这几天都在流行。

;)

 
papaklass:

谁知道主持人的立场是否已经改变了。

1.引入异常处理(try {} catch() {}) 。被 "强烈反对"。

没有

2.引入foreach操作符(){}。

?嗯,这有点像是在胡说八道。我不知道该要求什么。这个操作符是专门针对容器的,在MQL中根本不存在这个概念。

只有数组,它可以通过一个普通的叉子完美地实现。

 
papaklass:

谁知道主持人的立场是否已经改变了。

1.引入异常处理(try {} catch() {}) 。被 "强烈反对"。

2.引入foreach操作符() {} 。

PS:不清楚为什么操作员会脱颖而出?

它被突出显示是因为有一个保留字,它被引用了。
 

我工作太辛苦了...

的脚本。

#property script_show_inputs
//--- input parameters
input string   Symb0="EURUSD";
input double   Vol0=0.2;
input string   Symb1="GBPUSD";
input double   Vol1=0.3;
input string   Symb2="CADCHF";
input double   Vol2=0.4;

input bool     buy = true;

MqlTradeRequest TradeRequest[3];
MqlTradeResult  TradeResult[3];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  if(buy)
  {
  _OrderSend(TradeRequest[0],TradeResult[0],Symb0,ORDER_TYPE_BUY,Vol0,0,0.0,0.0,"EURUSD",0);
  _OrderSend(TradeRequest[1],TradeResult[1],Symb1,ORDER_TYPE_BUY,Vol1,0,0.0,0.0,"GBPUSD",0);
  _OrderSend(TradeRequest[2],TradeResult[2],Symb2,ORDER_TYPE_BUY,Vol2,0,0.0,0.0,"CADCHF",0);
  Comment(PositionsTotal());
  }
  //Sleep(5000);
  else
  {
  
  _OrderSend(TradeRequest[0],TradeResult[0],Symb0,ORDER_TYPE_SELL,Vol0,0,0.0,0.0,"EURUSD",0);
  _OrderSend(TradeRequest[1],TradeResult[1],Symb1,ORDER_TYPE_SELL,Vol1,0,0.0,0.0,"GBPUSD",0);
  _OrderSend(TradeRequest[2],TradeResult[2],Symb2,ORDER_TYPE_SELL,Vol2,0,0.0,0.0,"CADCHF",0);
  }
  
  Sleep(1000);
  _CloseAllPositions();
  }
//+------------------------------------------------------------------+

void _OrderSend(MqlTradeRequest &tradeRequest,
                MqlTradeResult  &tradeResult,
                string          symbol,
                ENUM_ORDER_TYPE type,
                double          volume,
                ulong           deviation,
                double          sl,
                double          tp,
                string          comment,
                int             magic)
{
  MqlTick price; SymbolInfoTick(symbol, price);
  
  tradeRequest.action   = TRADE_ACTION_DEAL;
  tradeRequest.symbol   = symbol;
  tradeRequest.type     = type;
  tradeRequest.volume   = volume;
  
  if(type==ORDER_TYPE_BUY)
    tradeRequest.price    = price.ask;
  if(type==ORDER_TYPE_SELL)
    tradeRequest.price    = price.bid;

  tradeRequest.deviation= deviation;
  tradeRequest.sl       = sl;
  tradeRequest.tp       = tp;
  tradeRequest.comment  = comment;
  tradeRequest.magic    = magic;
  
  OrderSendAsync(tradeRequest,tradeResult);
}


void _CloseAllPositions()
{
  Print("пробую закрытся");
  MqlTradeRequest tradeRequest;
  MqlTradeResult  tradeResult;
  MqlTick price;
  
  if(PositionsTotal()>0)
  {
    
    string symb="";
    
    for(int i=0;i<PositionsTotal();i++)
    {
      symb=PositionGetSymbol(i);
      PositionSelect(symb);
      SymbolInfoTick(symb, price);
      
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
      {
        tradeRequest.type =ORDER_TYPE_SELL;
        tradeRequest.price=price.bid;
      }
      else
      {
        tradeRequest.type =ORDER_TYPE_BUY;
        tradeRequest.price=price.ask;
      }
        tradeRequest.action   =TRADE_ACTION_DEAL;
        tradeRequest.symbol   = symb;
        tradeRequest.volume   = PositionGetDouble(POSITION_VOLUME);
        tradeRequest.deviation= 0;
        tradeRequest.sl       = 0.0;
        tradeRequest.tp       = 0.0;
        tradeRequest.comment  = "";
        tradeRequest.magic    = 0;
        
        OrderSend(tradeRequest,tradeResult);
    }
  }
}

我遇到了错误。

2013.08.23 10:28:54 交易 '1421016': 在0.87721卖出1.60CADCHF失败[无效请求]
2013.08.23 10:28:54 交易 '1421016': 在1.55836卖出1.20 GBPUSD失败 [无效请求]
2013.08.23 10:28:54 交易 '1421016': 在1.33455卖出0.80 EURUSD失败 [请求无效]


问题是什么?

 

我把一切都打开了...但它不会关闭CADCHF。(服务器是MetaQuotes Demo)

改变了for循环的方向,现在一切都很好,一切都打开,一切都关闭。

 
i_logic:

我把一切都打开了...但它不会关闭CADCHF。(服务器 - MetaQuotes演示)

改变了for循环的方向,现在一切都很好,一切都打开,一切都关闭。

改为:

for(int i=PositionsTotal()-1;i>=0;i--)

因此,关闭也不起作用。