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

 
Alexey Viktorov:
是的,嗯...我在哪里可以找到这样的经纪人...你能给我一个链接吗?
这就对了。买入时以买入价收盘
 
我为我的不注意而道歉。我读的是 "打开"...
 

下午好。

问题。

你能告诉我,为什么我不能把买入挂起。

request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(offset)*point;

如果 offset=1 ,则会弹出 错误。

失败的买入止损0.10 AUDNZD.m在1.03748 [无效价格], 水平 价格 我的 情况下

当同样的 "执行命令 "紧接着被放置在它之后时

request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)

一切运作正常(即,订单已下达)。

订单在1.03747 买入0.10 [#2在1.03747买入0.10 AUDNZD.m] 。

为什么不接受挂单1.03748的请求在1.03747的时候可以下单,但在1.03748的时候却不可以?(因为SYMBOL_ASK考虑到了 点差和偏移量--从当前价格下单的偏移量,以点为单位,增加1)

但在偏移量=100时:待定的BUY_STOP价格=1.03847 - 它已经工作了


谢谢你。
 
Konstantin_78:

下午好。

问题。

你能告诉我,为什么我不能把买入挂起。

request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(offset)*point;

如果 offset=1 ,则会弹出 错误。

1.03748 [无效价格]处买入0.10 AUDNZD.m失败,即小价位(在我看来)。

当我设置了一个 "执行命令 "后立即

request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)

一切运作正常(即,订单已下达)。

订单在1.03747 买入0.10 [#2在1.03747买入0.10 AUDNZD.m] 。

为什么不接受挂单1.03748的请求,即在1.03747下单,但在1.03748下单量小?

但如果偏移量=100:待定的BUY_STOP价格=1.03847,就已经成功了。


谢谢你。

你已经回答了你自己的问题。

有一个参数 "stoplevel"--从当前价格到挂单价格的最小必要距离--对于每个符号都有自己的值,并在交易条件中设置。

 
Andrey F. Zelinsky:

Вы же сами и ответили на свой вопрос.

Есть такой параметр stoplevel -- минимально необходимое расстояние от текущей цены до цены установки отложенного ордера -- для каждого инструмента своё значение и задаётся в торговых условиях 

那么也许可以这样写

价格=SymbolInfoDouble(Symbol(),SYMBOL_ASK)+SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)*point

虽然,如果你写的是"......从目前的 价格",这与价差有什么关系?这包括在SYMBOL_ASK中(因为SYMBOL_ASK=开盘价+价差)。

 
Vladimir Karputov:

我附上一个例子来帮助你...

我明白了,这个例子有帮助。谢谢你。


现在,这里有一个问题。

当我增加手数时,在某些时候没有足够的自由资金,我需要用增加的手数开盘。

也就是说,要输入最大的手数,只要FreeMargin允许就可以了。

如何写这个条件:如果没有足够的资金以计算的手数开仓,函数应该返回可能的最大手数来开仓。

double LotA()
{
   double Lot=FirstLot;

   if(DoublingCount<=0) return Lot;
   double MaxLot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   double MainLot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
if(Lot<MainLot)Lot=MainLot;
     if(Lot>MaxLot)Lot=MaxLot;
   double lt1=Lot;
   HistorySelect(0,TimeCurrent());
   if(HistoryOrdersTotal()==0)return(Lot);
   double cl=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-1),ORDER_PRICE_OPEN);
   double op=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_PRICE_OPEN);

   long typeor=HistoryOrderGetInteger(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_TYPE);
   if(typeor==ORDER_TYPE_BUY)
     {
      if(op>cl)
        {
         if(ud<DoublingCount)
           {
            lt1=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_VOLUME_INITIAL)*_C_;
            ud++;
           }
         else ud=0;
        }
      else ud=0;
     }
   if(typeor==ORDER_TYPE_SELL)
     {
      if(cl>op)
        {
         if(ud<DoublingCount)
           {
            lt1=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_VOLUME_INITIAL)*_C_;
            ud++;
           }
         else ud=0;
        }
      else ud=0;
     }
   if(lt1>MaxLot)lt1=MaxLot;
   lt1=LotCheck(lt1);
   return(lt1);
  }
//+------------------------------------------------------------------+}
 
Marina Korotkih:

我明白了,这个例子有帮助。谢谢你。


现在这个问题。

当我增加手数时,在某些时候没有足够的自由资金,我需要用更大的手数开盘。

也就是说,要输入最大的手数,只要FreeMargin允许就可以了。

如何写这个条件:如果没有足够的资金以计算的手数开仓,函数应该返回可能的最大手数来开仓。

               

double Mgn,Lot=0,BID,ASK;

    BID=SymbolInfoDouble(_Symbol,SYMBOL_BID);
    ASK=SymbolInfoDouble(_Symbol,SYMBOL_ASK);

   if(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1,ASK,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;

   if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
                        

玛丽娜,这个怎么样?

你应用两个计算选项--一个是打开卖出,一个是打开买入

 
Renat Akhtyamov:

                  if(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1,ASK,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;

                  if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
                        

玛丽娜,会是这样 吗?

不,不是的。

你不仅需要计算可能的最大手数,还要检查整个事情的最小允许手数,因为可能发生最小手数是0.01,而保证金只允许你开0.009,然后用永远不会被接受的请求折磨服务器,但他们可以对你采取行动)

 
Vitaly Muzichenko:

不,不是的。

你不仅仅需要计算可能的最大手数,还要检查整个事情的最小允许量,因为可能发生最小手数0.01,而保证金只允许你开0.009,那么折磨服务器的请求,它永远不会接受,但对你的行动又可以采取)

写完整的代码,因为它应该是这样的,我会在同一时间看到....?

我将一直向你学习,并密切关注你的情况,以确保答案完整。

我曾经担任过技术主管,别担心,一切都会好起来的!

我们是一个团队!

 
Marina Korotkih:

我明白了,这个例子有帮助。谢谢你。


现在这个问题。

当我增加手数时,在某些时候没有足够的自由资金,我需要用更大的手数开盘。

也就是说,要输入最大的手数,只要FreeMargin允许就可以了。

如何写这个条件:如果没有足够的资金以计算的手数开仓,函数应该返回可能的最大手数来开仓。


你在一个滑坡上)。