新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 91

 
Vitaly Muzichenko:
你必须按价格排序,因为你不能按尺寸搜索,网格可能是不同的,你会找到最大的或最小的,但不是第一个也不是最后一个。

我指的是玛丽娜发布的功能。

最后的顺序是 由时间决定的。

 
Alekseu Fedotov:

我指的是玛丽娜发布的功能。

最后的顺序是 由时间决定的。

它们都是在同一时间下的,所以14个订单可能有1秒的差异,而且你不能按时间排序,只能按价格排序。
 
Marina Korotkih:

因为我是这样召唤的

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
明白了。
 

亲爱的程序员!帮助我解决这个问题。专家顾问在M15上进入交易,但也从H1上获取条件。当H1的条件在M15上得到满足时,可能会有几个进入点。事实上,问题是我只想使用第一个入口点,直到H1的条件被逆转。

k=0;
for (i=OrdersTotal()-1;i>=0;i-)
{
RefreshRates();
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // 购买

 
customer03:

亲爱的程序员!帮助我解决这个问题。专家顾问在M15上进入交易,但也从H1上获取条件。当H1的条件在M15上得到满足时,可能会有几个进入点。实际上,问题是我想限制第一个进入点,直到H1上的条件没有改变成相反的。

k=0;
for (i=OrdersTotal()-1;i>=0;i--)
{
RefreshRates()。
如果(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // 购买

但如果没有代码呢?特别是,代码并不清晰。

你到底想要什么?不是抽象的,而是你想得到的确切的东西。

 
customer03:

亲爱的程序员!帮助我解决这个问题。专家顾问在M15上进入交易,但也从H1上获取条件。当H1的条件在M15上得到满足时,可能会有几个进入点。实际上,问题是我想把自己限制在第一个入口点,而在H1上,条件并没有改变,而是相反。

k=0;
for (i=OrdersTotal()-1;i>=0;i--)
{
RefreshRates()。
如果(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // 购买

一个近似的算法。

bool flag = false;
bool flagH1 = true;
bool flagM15 = true;

if(!flag && flagH1 && flagM15)
{
  flag = true;
}

if(!flagH1 && flag)
flag = false;
 
Artyom Trishkin:

而没有密码呢?更有理由不理解这些代码。

你到底想要什么?不是抽象的,而是你想得到的确切的东西。

Artyom你好!我们的目标是,只要H1有信号,就把M15的入场次数限制在一次(第一个信号)。
#property strict
extern double    Lot= 0.1;

extern int    stoploss=20;
extern int takeprofit=50;
// если stoploss и / или takeprofit = 0, то отключены.
//if stoploss and/or takeprofit = 0, are disconnected.



extern int  Magic = 99999999;
// уникальный номер, кот. советник метит свои ордера и впоследствии работает только с ними. При постановке на разные графики или т/ф, межики должны быть разными
extern int Slipp = 1;        
// величина максимально возможного проскальзывания.
//  slippage
extern int sec = 2000;
// количество миллисекунд сна советника между повторами отправки торгового поручения в случае неудачи
// number of milliseconds sleep of the EA between repetitions of sending a trade assignment in case of failure


//============================= Stochastic
input int InpKPeriod=13; // K Period
input int InpDPeriod=3; // D Period
input int InpSlowing=3; // Slowing

//============================= Stochastic
input int InpKPeriod1=13; // K Period
input int InpDPeriod1=3; // D Period
input int InpSlowing1=3; // Slowing





int A, a, b, i, ii, o;


    double SL, TP, op, stH0, stH1, stM0, stM1;
    bool c;
    datetime OldTime, Time0, opp;

int init()
  {    
  
   OldTime = iTime(NULL,Period(),0);
  
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  

                      
//====================================================================

stH0 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,0);
stH1 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,1);

stM0 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,0);
stM1 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,1);
  
//====================================================================  

          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }

      
if(  stM1 <= 20 && stM0 > 20  && stH0 > 70  && b==0   && opp != Time[0]) // покупка
      {
       opp = Time[0];

    RefreshRates();
    op = Ask;
   A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
    o = GetLastError();
         while (A < 0 && o != 4109 && o != 132 && o != 133)
         {
          Print("Error =", o);
         Sleep(sec);
         RefreshRates();
         op = Ask;
         A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
         o = GetLastError();
        }      
        
SL = op-stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op+takeprofit*Point;
if (takeprofit == 0 ) TP = 0;        
        
    if (SL != 0 || TP != 0)
      {
    RefreshRates();
    if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
    c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
    o = GetLastError();
      while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
                  o = GetLastError();
                  }  }          
     }

//---------------------------------------------------------------------------------------------------------+                          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }


if( stM1 >= 80 && stM0 < 80  &&  stH0 < 30   && b==0   && opp != Time[0]) // продажа
     {
     opp = Time[0];

      RefreshRates();
      op = Bid;
         A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
         o = GetLastError();
            while (A < 0 && o != 4109 && o != 132 && o != 133)
            {
             Print("Error =", o);
            Sleep(sec);
            RefreshRates();
            op = Bid;
            A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
            o = GetLastError();
            }    

SL = op+stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op-takeprofit*Point;
if (takeprofit == 0 ) TP = 0;
        
        if (SL != 0 || TP != 0)
      {
        RefreshRates();
         if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
         c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
         o = GetLastError();
         while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);                  
                  o = GetLastError();
                  } }
      }
      
    

   return(0);
   }      

  
//+------------------------------------------------------------------+
 
customer03:
Artyom你好!我们的目标是,只要H1有信号,就把M15的入场次数限制在一次(第一个信号)。

所以要检查M15空头蜡烛上的开仓 数量。如果你已经有了一个头寸,而且是在M15空头蜡烛上开的,那么就不要再开了。
 

你好,亲爱的论坛成员。有没有办法从EA中设置Metatrader4内置的追踪止损值?我对这一点感兴趣,而不是在专家顾问中添加执行独立于内置跟踪止损的代码。

提前感谢您的回答。

 
Dr_G:

你好,亲爱的论坛成员。有没有办法从EA内部设置Metatrader4内置的追踪止损的值?我对这一点感兴趣,而不是在EA中添加一个独立于内置跟踪止损的执行代码。

提前感谢您的回答。

没有。
原因: