[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 548

 
harvest:
先生们,你们能不能给我一个将未结头寸移至盈亏平衡点的函数的例子(在tick上工作),我的专家顾问有一个拖网,这个拖网的开始只是在翻转买入的函数之后。预先感谢你


请看预告片--Yury Dzyuban的拖网库--特别是如何解决拖网是否只从利润中执行的问题,也就是说,如果变量trlinloss 的值= false,拖网是否在损失区执行。根据这个例子编辑你的拖网函数,就可以了。

附加的文件:
 

朋友们,你们能告诉我为什么经典的马丁不工作了吗?它只打开交易购买!!!。一个月以来,我一直在捣鼓它--零情感!我的心都碎了。它在策略测试器中运行良好,但在演示中却不能。另一个有趣的事情--当我设置T/S和T/P 1000时--它只在买入时打开,而当我设置200时--在买入和卖出时打开...伙计,有什么区别?

以下是代码:请帮助我。

//+------------------------------------------------------------------+ 
//| StMartin.mq4 | 
//| Sergey Kodolov | 
//| 84232676421@mail.ru | 
//+------------------------------------------------------------------+ 
#property copyright "Sergey Kodolov" 
#property link "84232676421@mail.ru" 

    extern int TP = 1000; 
    extern int TS = 1000; 
    extern double lots = 0.1; 

    double volumz; 
    int total,ticket; 
    int slip = 3; 
    int Magic = 7; 

 


//+------------------------------------------------------------------+ 
//| expert initialization function | 
//+------------------------------------------------------------------+ 
int init() 
  { 
//---- 

   ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"First order",Magic,0,Yellow); //открываем первый ордер 
 
//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 
//---- 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert start function | 
//+------------------------------------------------------------------+ 
int start() 
  { 
//---- 



OrderOpenFunction(); 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 

void OrderOpenFunction()
{
   total = OrdersTotal();
   if(total < 1) 
   { 
      OrderSelect(0,SELECT_BY_POS,MODE_HISTORY); 
      volumz = OrderLots(); 
      if(OrderProfit()<0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            double lot1 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_SELL,lot1,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            double lot2 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_BUY,lot2,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
      } 
      if(OrderProfit()>0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
      } 
   } 
}      
  
 
Alp:

然后就变得更加不清楚了。假设我以1,000,000(1,000)美元买入一个欧元(经纪人将其乘以100,结果交易价格为100,000),图表跳升100点,我卖出它们,我以10,000美元的价格加价,以及经纪人的佣金和价差,结果6000美元净收入我口袋。(那么很明显,在销售之后,它将再次下跌100点。)这是胡说八道!!!!。也许它终究会跌到谷底?否则,非常大的玩家会什么都不做就能赚到数十亿美元。


那么我不知道...

总的来说,为了实现明显的价格波动,有必要买入或卖出一个非常大的数额,非常大。对于这样的金额,杠杆不是我的1/200,而是象征性的1/2。嗯,这纯粹是我个人的想法。我可以写这样的胡说八道...

 
有一件事让我感到惊讶。我之前把代码贴在这里,有一个错误,它帮我解决了,Sepulca也帮了忙,谢谢她,直到现在代码都能用了......但我还是不明白:在第一个循环中,订单选择器选择了一个订单,没有任何错误,然后,当我在另一行选择相同的订单时,在下面,订单选择器显示错误?如果你能,请看一看,我只是好奇。
for(  i=0;i<=OrdersHistoryTotal();i++){
    OrderSelect(i ,SELECT_BY_POS,MODE_HISTORY);
     if (OrderMagicNumber( )== magic) { if(OrderSymbol()== Symbol()) {





 current = OrderOpenTime();  Alert ( " current = OrderOpenTime(); ",  current);Alert ( " max ", max );
      
      if (current > max) 
      {                    
         max = current;      
         ticket = OrderTicket();   Alert ( " ticket = OrderTicket();  ", ticket );
      }}}}


       if (ticket>-1){
      OrderSelect( ticket,SELECT_BY_TICKET,MODE_HISTORY);Alert ("SELL Select error HISTORYticket ", GetLastError( )  ) ;
Dimka-novitsek:

不可能!为什么不呢?在超额完成任务的时候,并没有任何未结订单!这就是所谓的超额完成任务。也许我不明白。

搜索周期也在历史上!这就是我把它赋值给int ticket变量的地方!

它发誓,对不起,2012.02.04 11:28:47 2011.12.06 16:35 GMT EURUSD,M30:警告: 卖出选择错误 HISTORYticket 4105

当它从MODE_HISTORY到MODE_TRADES?

而最重要的是,我在历史上借助于订单选择,选择了相同的订单,而且是先选择的,否则我就不能用它来工作了!没有逻辑!!!!!!,我很震惊。


 
你能告诉我在哪里可以找到这样的EA或脚本吗?有一组订单(9-11)放置在价格的两侧,距离它5-7个点。触发它们的时间是严格限制的。因此,很多时候订单没有被抓住,它们被删除。订单是在清晨放置的,作为一个规则,市场是严重平坦的。我希望第二组订单跟随价格接近其中一个订单组。简单地说,一个带有tp和sld的挂单 跟踪。这可能吗?
 

需要帮助!

我在我的EA(事件计数器)里有以下块。

如果(isCloseLastPosByStop()==True) //如果最后一笔订单是由Stop关闭。

{
N=N+1。
Alert(N, " moose")。
}否则N=0。

问题:我如何将数据写入文件(Excel)而不是在屏幕上显示?

 

下午好。

请告知为什么不画箭头,代码。

ObjectCreate("miniDown",OBJ_ARROW, 0, Time[1], Open[1])。
ObjectSet("miniDown", OBJPROP_ARROWCODE, 241)。
ObjectSet("miniDown", OBJPROP_COLOR, Yellow)。

 

假设欧元兑美元=1.44757,英镑兑美元=1.63366,你希望它们彼此接近。

让我解释一下。

a=GBPUSD/EURUSD=1.12855336874901大约1.12855

也就是说,如果我想买入/卖出一种货币,使交易的价值大致相等,那么

我需要买入/卖出 EURUSD*a,但没有这样的手数,所以我的问题是如何实现它,手数计算?

我没有这么多,所以我的问题是如何做到这一点?

 
T-G:
我想分享计算最大允许手数的函数,考虑到未结头寸,换句话说,使用股本。标准函数计算风险,但如果我有交易,我没有足够的钱来打开它们

我曾经为一个定制的EA写过它。

//+----------------------------------------------------------------------------+
double CorrectLots(double lt, int Part=2) {
   double ltcorr, Money, MoneyCorr;
   double dig      = MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot   = MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot   = MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot   = MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot   = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/Part,dig);    // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                                      // Зададим начальное значением ltcorr равным значению lt
   if (lt>=MaxLot) ltcorr=MaxLot;                  // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;                  // ... значений лота
   Money=lt*OneLot;                                // Вычисляем стоимость открываемой позы
   if (Money<TradeMrg) return(ltcorr);             // Если свободных средств больше, чем цена позиции -  возвращаем неизменённый лот
   else if (Money>=TradeMrg) {                     // Если цена позиции равна или больше, чем есть свободных средств, то ...
      ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);         // ... рассчитаем допустимый лот
      MoneyCorr=ltcorr*OneLot;                      
      Print("Func CorrectLots: лот ",lt," скорректирован до ",DoubleToStr(ltcorr,2),
            " Стоимость до корректировки = ",DoubleToStr(Money,dig),
            " Стоимость после корректировки = ",DoubleToStr(MoneyCorr,dig)
            ); 
      return(ltcorr);                                                   // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}
//+----------------------------------------------------------------------------+

为了纠正手数,你需要调用该函数,在参数lt中插入你想开仓 的手数,而不是参数Part - 在交易中使用的自由资金将被划分的数字。也就是说,如果只交易一半的免费资金,Part的价值应该是2,如果是三分之一,那么就是3,四分之一-4,等等。

double Lot=CorrectLots(0.1, 2);

调用该函数后,插入Lot作为OrderSend()函数的一个参数。

该功能在EA中用硬马丁限制手数,防止损失手数。但利润率也在下降...

 
回复我之前的问题,我不明白那里出了什么问题=(