[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 284

 
 
waitra >>:

int NumberOfPos_HISTORY

попробовала, учитывет только количество открытых текущих позиций, историю не учитывает, как ордер закрывает - значение возвращает на ноль, может быть еще что-то поменять?

Вот сделал вроде. Взял другую функцию  И.Кима и немного изменил.

Работает, как часики : 

В функцию СТАРТ можно поставить для контроля 

Comment ("ордера на истории= ",NumberOfPos_HISTORY_2(NULL,-1,Magic));

А вот сама функция:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает кол-во ордеровиз из  истории счета  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                           |
//|    sy - наименование инструмента   (""   - любой символ, |
//|                                     NULL - текущий символ)        |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfPos_HISTORY_2 (string sy="", int op=-1, int mn=-1) {
     int      i, k=OrdersHistoryTotal(), kp=0;
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {               
                if (OrderProfit()<0 || OrderProfit()>=0) kp++;           
            }  } } } }  }  return(kp);}


 

Здравствуйте Всем!!

//+------------------------------------------------------------------+
//|                                                   SimpleMA22.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//---- input parameters
extern int       MAFP=21;
extern int       MASP=55;
extern double    Lots=0.1;
extern int       StopLoss=60;
extern int       TakeProfit=30;
extern int       MagicNumber=123456;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
   
bool CheckOrders(int Type)
{
 bool Result=True;
 for(int i=0;i<OrdersTotal();i++)
  if(OrderSelect(i,SELECT_BY_POS))
   if(OrderMagicNumber()==MagicNumber && OrderSymbol() == Symbol())
      if(OrderType()==Type)
        {
         if(Type==OP_BUY)
           if(!OrderClose(OrderTicket(),OrderLots(),Bid,0))
             Result=False;
         if(Type==OP_SELL)
           if(!OrderClose(OrderTicket(),OrderLots(),Ask,0))
             Result=False;
         } 
        else Result=False;
 return(Result); 
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
    // Узнаем уровень стопов и спрэд
    int Spread = MarketInfo(Symbol(), MODE_SPREAD);
    int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);

    // Рассчитываем значения средних на 0-ом и 1-ом барах
    double MAF_0 = iMA(NULL, 0, MAFP, 0, 1, 1, 0);
    double MAF_1 = iMA(NULL, 0, MAFP, 0, 1, 1, 1);
    double MAS_0 = iMA(NULL, 0, MASP, 0, 1, 1, 0);
    double MAS_1 = iMA(NULL, 0, MASP, 0, 1, 1, 1);
    
    // открытие позиции Buy покупка
    if(MAF_1 < MAS_1 && MAF_0 > MAS_0)
     if(CheckOrders(OP_SELL))
      {
       if(StopLoss <= StopLevel+Spread)
         double SL = 0;
        else
         SL = Ask - StopLoss*Point;
       if(TakeProfit <= StopLevel-Spread)
         double TP = 0;
        else
         TP = Ask + TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, SL, TP, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
    
    // Открытие позиции Sell продажа  
    if(MAF_1 > MAS_1 && MAF_0 < MAS_0)
     if(CheckOrders(OP_BUY))
      {
       if(StopLoss <= StopLevel+Spread)
         SL = 0;
        else
         SL = Bid + StopLoss*Point;
       if(TakeProfit <= StopLevel-Spread)
         TP = 0;
        else
         TP = Bid - TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 5, SL, TP, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }//+------------------------------------------------------------------+


Мозги парились,ПАРИЛИСЬ да и выключились.....

Наверно проще придумать как заставить копать траншею алкашей или организовать вывоз мусора бомжами чем..........

В этой ветке, где то в начале, подымалась проблема похожая на мою. Читал, читал.... всё равно не въехал, а разговор был про флаги...

Идея проста. Простейший SimpleMA, правда чуток под сэбэ доработанный, но не принципиально.

КАКие ф-ии надо добавит, ЧТОБ советник (на покупку) покупал, ордер бы срабатывал по тэйку и следующий одер выставлялся при условии продажи, т. е. пересечение МАшек на продажу?

Независимо от того, есть дальнейшее условие или нет.

 

Возможно, поможет функция https://www.mql5.com/ru/forum/107476/page21

Функция isCloseLastPosByTake().
Эта функция возвращает флаг закрытия последней позиции по тейку.

Флаг поднят - True - сработал TakeProfit.

Флаг опущен - False - позиция была закрыта по другой причине. 


Саму функцию ставить в самом конце кода. А в условия для продажи добавить : 

if( isCloseLastPosByTake( NULL, OP_BUY,MagicNumber) ==true) {//продаем



 
xmurik писал(а) >>
На паре EUR/USD.
//+------------------------------------------------------------------+
//|                                                       скрипт.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int kolvo_barov = 1000;
   double start_price = iOpen(Symbol(),0,kolvo_barov);
   int handle;
   handle=FileOpen("my_data.csv", FILE_WRITE|FILE_CSV, '\t');
   if(handle>0) {
      while(kolvo_barov>1) {
         if (iHigh(Symbol(),0,kolvo_barov)>start_price + 0.01) {
            FileWrite(handle,"+100");
            start_price = start_price + 0.01;
         }      
         if (iHigh(Symbol(),0,kolvo_barov)<start_price + 0.01) {
            FileWrite(handle,"-100");
            start_price = start_price - 0.01;
         }      kolvo_barov--;
      }
      FileClose(handle);
   }
   return(0);
}
//+------------------------------------------------------------------+
Посмотри. Только я не проверял. Могут и ошибки быть
 

Люди добрые. Непонимаю (см картинку) почему моментум не моментум :). 


Моментум

Поясните, пожалуйста, почему он выше ноля?
 
rid писал(а) >>

Вот сделал вроде. Взял другую функцию И.Кима и немного изменил.

Работает, как часики :

В функцию СТАРТ можно поставить для контроля


А вот сама функция:

Да, все работает! rid, премного Вам Благодарна! Спасибо! Удачи Вам!

 
warlock писал(а) >>

Помогите!!! експерт должен открывать сделки при открытиии новой свечи, но помимо открытия в начале свечи, открывает еще "левые" хаотически...

Плюс после присвоения High и Low, перестал покупать... а только продает...

А внимательно не судьба посмотреть что в OrderSend() стоит. Один вылетает по ошибке, другой срабатывает

if (AllowBUY) 
   tick=OrderSend(Symbol(),OP_SELLSTOP,Lot,price1,3,(price1-SL*Point)*loss,(price1-TP*Point)*profit,"scriptSELLstop",CLR_NONE,expiration);
if (AllowSELL) 
   tick=OrderSend(Symbol(),OP_SELLSTOP,Lot,price2,3,(price2+SL*Point)*loss,(price2-TP*Point)*profit,"scriptSELLstop",CLR_NONE,expiration);
 
warlock >>:

Помогите!!! експерт должен открывать сделки при открытиии новой свечи, но помимо открытия в начале свечи, открывает еще "левые" хаотически...

Плюс после присвоения High и Low, перестал покупать... а только продает...

Спасибо... сидел час... не мог понять в чем дело... иногда требуется чтоб, кто то открыл глаза на совершенные ошибки...

 
Здравствуйте люди, ни кто не может помочь в написании советника по индикатору AC ?
Причина обращения: