Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 91

 
Vitaly Muzichenko:
Нужно сортировать по цене, потому что искать по размеру не получится, сетка может быть разнолотной, и будете находить или самый большой, или самый маленький, но не первый и не последний

Я о функции которую выложила Марина.

Там  определение последнего ордера выполняется по времени.

 
Alekseu Fedotov:

Я о функции которую выложила Марина.

Там  определение последнего ордера выполняется по времени.

Там все выставлялись одновременно, поэтому с 14 ордеров разница может быть в 1 секунду, и по времени это отсортировать не получиться, только по цене
 
Marina Korotkih:

Потому что вызываю так

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
Понял.
 

Уважаемые программисты! Помогите решить такой вопрос. Советник входит в сделку на М15, но берёт условия ещё и с Н1. Когда условия на Н1 выполняются на  М15 может быть несколько точек входа. Собственно проблема в том что хочется ограничиться только первой точкой входа, пока на Н1 условия не поменяются на противоположные.

k=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) k++;
       }

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

 
customer03:

Уважаемые программисты! Помогите решить такой вопрос. Советник входит в сделку на М15, но берёт условия ещё и с Н1. Когда условия на Н1 выполняются на  М15 может быть несколько точек входа. Собственно проблема в том что хочется ограничиться только первой точкой входа, пока на Н1 условия не поменяются на противоположные.

k=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) k++;
       }

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

А без кода? Тем более, что не понятный код.

Что именно хотите? Не абстрактно, а именно то, что хотите получить.

 
customer03:

Уважаемые программисты! Помогите решить такой вопрос. Советник входит в сделку на М15, но берёт условия ещё и с Н1. Когда условия на Н1 выполняются на  М15 может быть несколько точек входа. Собственно проблема в том что хочется ограничиться только первой точкой входа, пока на Н1 условия не поменяются на противоположные.

k=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) 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:

А без кода? Тем более, что не понятный код.

Что именно хотите? Не абстрактно, а именно то, что хотите получить.

Артём здравствуйте! Задача состоит в том чтобы, ограничить вход на М15 до одного (первого сигнала), пока на Н1 есть сигнал.
#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:
Артём здравствуйте! Задача состоит в том чтобы, ограничить вход на М15 до одного (первого сигнала), пока на Н1 есть сигнал.

Ну так проверяйте количество открытых позиций на нулевой свече M15. Если уже есть позиция, и она открыта на нулевой свече M15, то больше не открывать.
 

Здравствуйте, уважаемые форумчане. Можно ли каким-нибудь образом задать значение встроенного в Metatrader4  инструмента "трэйлинг-стоп" из советника. Интересует именно это а не добавление в советник кода для осуществления независимого от встроенного инструмента трэйлинг-стопа.

Заранее спасибо за ответы. 

 
Dr_G:

Здравствуйте, уважаемые форумчане. Можно ли каким-нибудь образом задать значение встроенного в Metatrader4  инструмента "трэйлинг-стоп" из советника. Интересует именно это а не добавление в советник кода для осуществления независимого от встроенного инструмента трэйлинг-стопа.

Заранее спасибо за ответы. 

Нет.
Причина обращения: