初学者的问题 MQL5 MT5 MetaTrader 5 - 页 90

 
WindSW:
除关闭外,所有选项均已列出。这就是为什么我问。

你已经被告知。

耶德尔金

"平仓 "只是一个交易请求的结果,其规则是一样的。

即采取 "开放 "请求并改变订单类型。

将不必要的必填项填写为零。

 

Yedelkin:
Для каждого вида торгового запроса предусмотрены обязательные поля. Они должны быть заполнены. "Открытие позиции" или "Закрытие позиции" - это всего лишь результат выполнения конкретного торгового запроса, правила заполнения которого - одни и те же. Т.е. берите свой работающий вариант запроса "на открытие" и меняйте тип ордера. Ненужные обязательные поля заполняйте нулями.

sergeev:

你已经得到了答案

谢谢你!

我还有一个问题:发送了下面的请求,并建立了一个头寸,但没有设置止损和利润。我已经尝试了不同的设置,但没有任何帮助。问题是什么,我做错了什么?

   MqlTick latest_price;       // Будет использоваться для текущих котировок
   if(!SymbolInfoTick(_Symbol,latest_price)) return;        // получить текущее значение котировки в структуру типа MqlTick
   ...
   if(uBuy && opSell==false)    
     {
      if(opBuy) return;                                                // при наличии позиции не добавлять к открытой позиции на покупку
      mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
      mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // последняя цена ask
      mrequest.sl = NormalizeDouble(latest_price.ask - StopLoss*_Point,_Digits); // Stop Loss
      mrequest.tp = NormalizeDouble(latest_price.ask + TakeProfit*_Point,_Digits); // Take Profit
      mrequest.symbol = _Symbol;                                            // символ
      mrequest.volume = WorkLot;                                                // количество лотов для торговли
      mrequest.magic = EA_Magic;                                            // Magic Number
      mrequest.type = ORDER_TYPE_BUY;                                       // ордер на покупку
      mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
      mrequest.deviation=Slippage;                                               // проскальзывание от текущей цены
      OrderSend(mrequest,mresult);                                          // отсылаем ордер
      if(mresult.retcode==10009 || mresult.retcode==10008)                  //запрос выполнен или ордер успешно помещен
        {
         Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
        }
      else
        {
         return;
        }
     }
 

我如何将最后3个ZigZag值相加?

        double summ=0;//переменная, в которую все суммируется
        int w=0;//счетчик 3 удачных сумирований
        int count_for_buf=0;//Счетчик переходов по буферу ZigZag
        while (w<=3)
         {
         summ=summ+ZigzagBuffer[rates_total-count_for_buf];
         count_for_buf++;
         if (ZigzagBuffer[rates_total-count_for_buf]!=0)//Увеличиваем счетчик, если используемое значение индикатора не равно нулю
          {
          w++;
          }
         }
这样一来,由于某些原因,它就会挂起或发生其他事情。
 
WindSW: 下面的请求被发送,并建立了一个头寸,但没有设置止损和利润。我已经尝试了不同的设置,但没有任何帮助。问题是什么,我做错了什么?

还记得 "开仓 "的交易请求 有几个选项需要填写吗?这些选项中有些涉及sl/tp,有些则不涉及。换句话说,你的经纪人有什么交易模式?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
Yedelkin:

还记得 "开仓 "的交易请求 有几个选项需要填写吗?这些选项中有些涉及sl/tp,有些则不涉及。换句话说,你的经纪人的交易模式是什么?

Alpari经纪人。在手动模式下,只有一个新的订单被放置在交易所执行。没有其他选择可以从市场进入。我理解这是一个交换执行请求。谢谢你,我已经把它整理出来了。你能告诉我为什么编译器会处理以下代码吗?

if(CopyBuffer(ema,0,0,3,emaVal)<0) return; // 将指标缓冲区的新值复制到数组中。

и

IndicatorRelease(ema)。

出现 "由于类型转换可能导致数据丢失 "的警告。我搞不清楚这里出了什么问题,从昨天晚上开始我就无法修复它。

 
WindSW: 你能告诉我为什么编译器会对以下字符串发誓吗?

if(CopyBuffer(ema,0,0,3,emaVal)<0) return; // 将新的指标缓冲区数值复制到数组中。

и

IndicatorRelease(ema)。

出现 "由于类型转换可能导致数据丢失 "的警告。我搞不清楚这里出了什么问题,从昨天晚上开始我就没有设法修复它。

那么什么类型的可变EMA?
 
Yedelkin:
ema是什么类型的变量?
 
WindSW
明白了。看看变量应该是什么类型来存储指标柄,并与之匹配。
 
Yedelkin:
明白了。看看应该用什么类型的变量来存储指标柄,并与之匹配。
而且我已经不习惯把它写成4了。再次感谢您的提示!
 
lazarev-d-m:

你如何将最后3个ZigZag值相加?

这样一来,由于某些原因,它就会挂起或发生其他事情。

我给你一个建议。

   double   summ=0;  //переменная, в которую все суммируется
   int      w=0;     //счетчик 3 удачных сумирований
   for(int i=0; i<rates_total; i++)
     {
      if(ZigzagBuffer[rates_total]!=0 && w<3)//Увеличиваем счетчик, если используемое значение индикатора не равно нулю
        {
         summ+=ZigzagBuffer[i];
         w++;
        }
      if(w>2) break;
     }