[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 479

 
Svinozavr >>:

Да, кажется, все проще - время сделки-то известно. Если так, то время по тайм-фрейму будет таково:


Time[iBarShift(NULL,tf,DealTime)]

где
tf - нужный тайм-фрейм,
DealTime - время (с датой) сделки


谢谢,但如果还没有交易,而DealTime是计划交易的已知时间,怎么办?

 
MoneyJinn >>:


Спасибо, а как быть если сделки еще не было и DealTime - известное время планируемой сделки?

更简单的是:tf*60*MathFloor(DealTime/60/tf) //变量的含义是一样的。

你可以检查一下脚本。

#property show_inputs
extern int tf=1440;
extern datetime DealTime;

void start() {Alert(TimeToStr(tf*60*MathFloor(DealTime/60/tf)));}
===
纠正了。忘了把秒转换为分钟。)
 
我的EA中大约有200个MA,当我测试它们时,当我按下"打开图表"时,它们都会显示出来。
,我可以删除它们来隐藏它们吗?
谢谢
 
snowman647 >>:
у меня в советнике около 200 MA, при тестировани, когда жмешь "открыть график" они все рисуються.
можно их както убрать, чтоб не видно было?
спасибо

void HideTestIndicators( bool hide )。
该函数设置标志以隐藏专家顾问所调用的指标。当测试后打开图表时,标有隐藏标志的指标将不会在测试图表中显示。在每次调用之前,指标将被标记为当前的隐藏标志。
应该注意的是,只有那些被测试的专家顾问直接调用的指标可以显示在测试图表中。

 
我正在努力掌握MQL语言,作为练习,我决定在我的EA中加入马丁格尔函数
我想在SL的时候用一个手数乘以系数来开单,在TP的时候我就用原来的手数来开单!
我不知道如何在TP和SL上设置条件!
请告诉我如何使用正确的代码!
//--------------------------------------------------------------------
extern int  stoploss    = 50,
            takeprofit  = 50;
extern double  mult=2;
extern double      Lot=1;
int         tip;
//--------------------------------------------------------------------
int init()
{
   OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                        NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
}
//--------------------------------------------------------------------
int start()
{
   for (int i=0; i<OrdersTotal(); i++){   
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
         if (OrderSymbol()==Symbol()){
            tip = OrderType();
            Lot = OrderLots();return;}}}
   if (Lot==0) return;
   if (tip==0) OrderSend(Symbol(),OP_SELL,Lot*mult,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
   if (tip==1) OrderSend(Symbol(),OP_BUY ,Lot*mult,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
   return(0);
}
//-----------------------------------------------------------------
 
Kogalym >>:
Пытаюсь освоить язык MQL в качестве практики решил добавить в советник перевертыш функцию Мартингейла!
Что бы при SL открывал ордер лотом умноженным на коэффициент, а при TP начинал с первоночального лота!
Но получилось что лот увеличивается с каждым ордером, не знаю как поставить условие на TP и SL!
Подскажите пожалуйста как должен выглядеть правильный код!

必须有一个这样的函数

double getLot()
{
   if(OrdersHistoryTotal()==0)return(0.1);
   // ищем самый последний закрытый ордер
   datetime time=0;
   int ticket=-1;
   for(i=OrdersHistoryTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==Symbol())
         {
            if(OrderCloseTime()>time)
            {
               time=OrderCloseTime();
               ticket=OrderTicket();
            }
         }
      }
   }
   if(OrderTicket()!=ticket)OrderSelect(ticket,SELECT_BY_TICKET);
   if(OrderProfit()<=0) return(NormalizeDouble(OrderLots()*Martin_Koef,2));
   if(OrderProfit()>0)return(0.1);
   //-----
}
 
Roger >>:

Да уже плешь проели с этим вопросом. Набираешь old tick здесь в поисковике и читаешь, читаешь, читаешь.

如果你这么聪明,为什么要来这里?你的意思是你不介意写一封时髦的信,但你不介意回信。好吧,好吧。

 
StatBars >>:

Должна быть функция вроде этой


我不明白时间与此有什么关系。
我认为只有最后3行负责在损失的情况下增加手数。
if(OrderTicket()!=ticket)OrderSelect(ticket,SELECT_BY_TICKET);
   if(OrderProfit()<=0) return(NormalizeDouble(OrderLots()*Martin_Koef,2));
   if(OrderProfit()>0)return(0.1);
 
Kogalym >>:


Не понимаю причем там время???
По моему за наращивание лота при убытке отвечают только 3 последние строчки

这个函数找到最后一个关闭的订单,并根据其利润计算出手数。如果你有一个封闭式的止损单,而这个止损单的利润永远不会是正数,还有一个封闭式的获利单,而这个获利单的利润永远不会是负数,那么这个功能就会正常工作。
如果你有某种拖网,则需要重写该函数。

 
StatBars >>:

При том что функция находит последний закрытый ордер, по его профиту расчитывается лот. Если у Вас закрытый ордер по стоплоссу никогда не будет положительным по профиту, а закрытый по тейкпрофиту ордер никогда не будет отрицателен по профиту, то функция корректно отработает.
Если же у Вас есть трал какой-нибудь то функцию нужно переделать.

我写了一个EA,在TP的时候开一个相同方向的订单,在SL的时候开一个相反方向的订单,但是我不能插入马丁格尔函数并返回到原来的位置。

//--------------------------------------------------------------------
extern int  stoploss    = 50,
            takeprofit  = 50;
extern double  mult=2;
extern double      Lot=1;
//--------------------------------------------------------------------
int init()
{
   OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                        NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
}
//--------------------------------------------------------------------
int start()
{   for (int i=0; i<OrdersTotal(); i++){   
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
         if (OrderSymbol()==Symbol()){
         Lot = OrderLots();return;}}}
            if (Lot==0) return;
        
  if(OrderType() == OP_SELL)
     if(OrderProfit()>0) OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
   else OrderSend(Symbol(),OP_BUY ,Lot,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
                                                                        
    if(OrderType() == OP_BUY) 
    if(OrderProfit()>0) OrderSend(Symbol(),OP_BUY ,Lot,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
    else OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
                                     
       
   return(0);
}
//-----------------------------------------------------------------

我不能插入马丁格尔的功能,我不能返回到原来的地段!"。也许你能告诉我这个功能应该放在什么地方!