[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 323

 
在选择范围内,在对符号和magik(如果有的话)进行过滤后,即我们检查订单的关闭时间,如果它不等于零(订单已关闭),我们禁止再次关闭它。
 
FAQ:
在选择范围内,在对符号和魔力(如果有的话)进行过滤后,即检查订单的关闭时间,如果它不等于零(订单已关闭),那么我们禁止再次关闭它。


谢谢你!那我就试试上面那个吧!

在这里,试图插入,在演示中运行,但出来的东西更多的错误和不同。我先问一下,从炉子上,关于多卡的这个代码。

  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
    {
     datetime ctm=OrderOpenTime();
     int      ticket=OrderTicket();
     if(ctm>0) Print("Время открытия ордера № ",ticket," ",ctm);
     ctm=OrderCloseTime();
     if(ctm>0) Print("Время закрытия ордера № ",ticket," ",ctm);
    }
  else
    Print("OrderSelect() вернул ошибку ",GetLastError());

这里有什么是多余的,在Selecta交易、符号检查、Magik之间插入...и ...订单类型。也许可以在一开始就引入datetime cmt和int ticket?而且打印机还写下了其他错误。

并添加一个关闭条件。

if(ctm == 0) {CloseOrder(OrderTicket(),OrderLots(),Bid,slip,Yellow);return(0);} else continue;

请提供帮助!

 

嗨,你能给我一个提示吗?

我想不立即用stp和sl开单,而是在开单后通过修改设置stp和sl。

我这么做了。

ticket=OrderSend(Symbol(),cmd,lot,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen)
{
OrderSelect(ticket,SELECT_BY_TICKET)。
}
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Blue)。
return(0);

}


我不知道我到底在做什么。

对吗?

 
RMX13:

嗨,你能给我一个提示吗?

我想不立即用stp和sl开单,而是在开单后通过修改设置stp和sl。

我这么做了。

ticket=OrderSend(Symbol(),cmd,lot,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen)
{
OrderSelect(ticket,SELECT_BY_TICKET)。
}
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Blue)。
return(0);

}


我不知道我到底在做什么。

对吗?



而我不明白,还有更多!我不明白。使用SRC来勾勒代码,见上文?
 
int orderOpen(int cmd, double open, int stopLossPips, int takeProfitPips, int magicNumber){       
      double sl=0, tp=0;
      if(stopLossPips>0){
         stopLossPips = MathMax(stopLossPips,MarketInfo(Symbol(),MODE_STOPLEVEL)+3*_pipsMultiplyer);
      }
      if(takeProfitPips>0){
         takeProfitPips = MathMax(takeProfitPips,MarketInfo(Symbol(),MODE_STOPLEVEL)+3*_pipsMultiplyer);
      }
      int ticket=-1;
      if(_doTrade){        
         double lots  = OrderLotSize();
         if(lots>=MarketInfo(Symbol(), MODE_MINLOT)){          
            //wait context
            if(TradeIsBusy() < 0) {
                 return(-1); 
            }
            if(cmd==OP_BUYSTOP || cmd==OP_BUY || cmd==OP_SELLLIMIT){
               RefreshRates();
               if(cmd==OP_BUY){
                  open=Ask;
               }
               if(stopLossPips>0){
                  sl=NormalizeDouble(open-stopLossPips*Point,Digits);
               }
               if(takeProfitPips>0){
                  tp=NormalizeDouble(open+takeProfitPips*Point,Digits);
               }
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,sl,tp,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen);              
            }else{
               RefreshRates();
               if(cmd==OP_SELL){
                  open=Bid;
               }
               if(stopLossPips>0){
                  sl=NormalizeDouble(open+stopLossPips*Point,Digits);
               }
               if(takeProfitPips>0){
                  tp=NormalizeDouble(open-takeProfitPips*Point,Digits);
               }
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,sl,tp,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,Red);
            }
首先,这块是负责开单的吗?
 
我是自己想出来的。
 
borilunad:


谢谢你!那我就试试上面的方法吧!

在这里,试图插入,在演示中运行,但出来的东西更多的错误和不同。我先问一下,从炉子上,关于Doki的这个代码。

这里有什么是多余的,在选择交易、符号检查、魔术之间插入...и ...订单类型。也许可以在一开始就引入datetime cmt和int ticket?而且打印机还写下了其他错误。

并添加一个关闭条件。

请帮助我们!


诶,俗话说:"学好学生"(c)。

for(int i=OrdersTotal()-1;i>=0;i--){
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES){
      if(OrderSymbol()!=Symbol()){continue;}// фильтр по символу(если не наш символ, то пропускаем)
      if(OrderMagicNumber()!=magik){continue;}// фильтр по магику
      if(OrderCloseTime()!=0){continue;}// фильтр по времени закрытия (если не=0 то ордер уже закрыт)
      if(OrderType()<=OP_SELL){//закрытие для рыночных ордеров
         OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),MarketInfo(OrderSymbol(),MODE_SPREAD),CLR_NONE);
      }else{// закрытие для отложенных ордеров
         OrderDelete(OrderTicket());
      }
   }
}

删除(评论)不需要的东西。

 
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,Red);
            OrderSelect(ticket,SELECT_BY_TICKET);
            OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0);

一段开启订单并设置止损和止盈的代码

终端产生以下错误: EURUSD,M30: OrderSenderror 130

EURUSD,M30:OrderModify函数的无效票据

EURUSD,M30: OrderModify错误4051

EURUSD,M30: OrderSend failed with error #4051 bid:1.23674000 ask:1.23683000 Open:1.23674000 SL:1.2423 TP:1.2283 MODE_STOPLEVEL:0.00000000 LOT:0.01000000

问题是什么?


 
FAQ:


诶,俗话说:"学习,学生"(c)。

删除不必要的(注释)。


非常感谢您!我也是一个终生学习者!而且一般来说,学习比工作更有趣。我现在要尝试调整,我不想改变代码中的顺序。在任何时候,我都会根据市场行为 的变化来改变或增加条件。祝你一切顺利,晚安!
 
RMX13:

一段开启订单并设置止损和止盈的代码

终端产生以下错误:EURUSD,M30:OrderSend错误130

EURUSD,M30:OrderModify函数的无效票据

EURUSD,M30: OrderModify错误4051

EURUSD,M30: OrderSend failed with error #4051 bid:1.23674000 ask:1.23683000 Open:1.23674000 SL:1.2423 TP:1.2283 MODE_STOPLEVEL:0.00000000 LOT:0.01000000

你能告诉我问题是什么吗?

RMX13,每个人都有同样的问题。为了避免错误130,你需要用价格、手数和条件来规范所有的计算,特别是接近价格的时候要考虑到点差、止损位和freezevel,以及滑点,滑点应该根据波动性来增加。只是asc不需要规范化,但如果你在其中添加了一些东西,就需要在整个代码中用Digits,手数用2(美分)等,当然在所有交易函数中也要进行错误处理,以免白白麻烦DC。好运!

请参阅文件:OrderSend(所有内容都必须符合设定的顺序)!这就是为什么会出现错误(:()