0
Сегодня буду смотреть.
avatar

AM2

  • 22 января 2016, 17:43
0
Напишите новым топиком.
avatar

AM2

  • 22 января 2016, 17:39
0
Это в поиске надо смотреть. А так пишет не может увеличить массив.
avatar

AM2

  • 22 января 2016, 17:36
0
В следующем месяце напишите.
avatar

AM2

  • 22 января 2016, 17:34
0
поставь 18-20 и посмотри результат.

Посмотрел. Нормально.

avatar

AM2

  • 22 января 2016, 07:50
0
Поставлю сегодня, если дождусь конечно 18-20 :)  А илан такой же усреднитель.
avatar

AM2

  • 22 января 2016, 07:26
0
что значит параметр «тейк профит ордера»? какого ордера? и как он влияет на «прибыль в валюте»?


Тейк там не используется.

советник не закрывает полностью ордера по локу если лок на продажу.




Я когда гонял все закрывал.

Если уж не получается, пользоваться советником, пробуйте лучше илан с локом.
avatar

AM2

  • 22 января 2016, 02:12
0
Что касается советника, графически изобразить мне показалось сложновато, попробую описать алгоритм словами:


Анатолий, хотя бы калябушки в пайнте. Мне ведь четко нужно представлять всю картину.
avatar

AM2

  • 22 января 2016, 02:06
+1
хотелось бы чтобы при любом сигнале открывались ордера и в бай и в шелл

Посмотрите:




//+------------------------------------------------------------------+
//|                                                        Laban.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

extern int StopLoss=200;
extern int TakeProfit=200;
extern int Slip=20;
extern int Hour_Start=8;
extern int Hour_Stop =17;
extern int Ma1 = 9;
extern int Ma2 = 22;
extern double Lots=0.01;
extern double KLot=2;
extern double KStop=2;
extern double MaxLot=5;
extern int Magic=8;

int mode=0;
bool b=true,s=true;
double stop=0,take=0;
//+------------------------------------------------------------------+
void OnTick()
  {
//---- 
   int p=0,r=0;
//---- get Indicatorrs 
   double ma1=iMA(NULL,0,Ma1,0,MODE_EMA,PRICE_CLOSE,1);
   double ma2=iMA(NULL,0,Ma2,0,MODE_EMA,PRICE_CLOSE,1);
//----

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         if(OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        }
     }

//---- buy 
   if(ma1>ma2 && b && p<1)
     {
      if(Hour()>=Hour_Start && Hour()<Hour_Stop)
        {
         r=OrderSend(Symbol(),OP_BUY,Lot(),Ask,Slip,Ask-stop*Point,Ask+take*Point,"",Magic,0,Blue);
         r=OrderSend(Symbol(),OP_SELL,Lot(),Bid,Slip,Bid+stop*Point,Bid-take*Point,"",Magic,0,Red);
         b=false;
         s=true;
        }
     }

//---- sell 
   if(ma1<ma2 && s && p<1)
     {
      if(Hour()>=Hour_Start && Hour()<Hour_Stop)
        {
         r=OrderSend(Symbol(),OP_SELL,Lot(),Bid,Slip,Bid+stop*Point,Bid-take*Point,"",Magic,0,Red);
         r=OrderSend(Symbol(),OP_BUY,Lot(),Ask,Slip,Ask-stop*Point,Ask+take*Point,"",Magic,0,Blue);
         b=true;
         s=false;
        }
     }

   Comment("\n stop: ",stop,"\n take: ",take);
//----
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=0;
   if(OrdersHistoryTotal()==0)
     {
      lot=Lots;
      take=TakeProfit;
      stop=StopLoss;
     }
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()>0)
        {
         lot=Lots;
         take=TakeProfit;
         stop=StopLoss;
        }
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
         take=MathAbs((OrderOpenPrice()-OrderTakeProfit())/Point)*KStop;
         stop=MathAbs((OrderOpenPrice()-OrderStopLoss())/Point)*KStop;
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 22 января 2016, 01:46
0
бывает часто отложки не выставляет с ошибкой:
«OrderSend error 130»


Здесь нужно учитывать размер стопа, сделать его побольше.
avatar

AM2

  • 22 января 2016, 01:16
0
Система DIBS Method — Ваше торговое преимущество.


Там немного другие условия. Добавил.


//+------------------------------------------------------------------+
//|                                                        InBar.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots      = 0.1;      // торговый объем ордера
extern int StopLoss     = 500;      // лось, если ноль стоп на экстремумы предыдущей свечи
extern int TakeProfit   = 20;       // язь
extern int TrailingStop = 300;      // трал
extern int Expiration   = 30;       // истечение отложек в часах
extern int StartHour    = 0;        // час начала торговли
extern int StartMin     = 30;       // минута начала торговли
extern int EndHour      = 23;       // час окончания торговли
extern int EndMin       = 30;       // минута окончания торговли
extern int Slip         = 30;       // реквот
extern int BuyStop      = 1;        // 0-выкл. 1-вкл.
extern int SellStop     = 1;        // 0-выкл. 1-вкл.
extern int Magic        = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=clrNONE;
   double sl=0,tp=0;
   datetime expiration=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(StopLoss==0) sl=NormalizeDouble(High[2],Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(StopLoss==0) sl=NormalizeDouble(Low[2],Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   if(type==4 || type==5) expiration=TimeCurrent()+3600*Expiration;
   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,expiration,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del=true;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*Point)
                 {
                  if(OrderStopLoss()<Bid-TrailingStop*Point)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if((OrderOpenPrice()-Ask)>TrailingStop*Point)
                 {
                  if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
     {
      if(Open[2]>Close[2] && Open[1]<Close[1] && Open[2]>Close[1])
        {
         if(CountOrders(4)<1 && Bid<Open[2] && BuyStop==1)   PutOrder(4,Open[2]);
         if(CountOrders(5)<1 && Bid>Close[2] && SellStop==1) PutOrder(5,Close[2]);
        }
     }

   if(CountTrades()>0)
     {
      DelOrder();
     }

   if(TrailingStop>0) Trailing();
  }
//+------------------------------------------------------------------+



avatar

AM2

  • 21 января 2016, 07:05
+1
БУчит и удаляет ордера:




//+------------------------------------------------------------------+
//|                                                     Pepelats.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Simple expert advisor"

//--- Inputs
extern double Lots      = 0.1;      // лот
extern int Stops        = 0;        // 0-стоп на одной цене. 1-лось каждому ордеру
extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 50;       // язь
extern int BULevel      = 100;      // уровень БУ
extern int Count        = 5;        // число отложек
extern int Step         = 200;      // спред
extern int Buff         = 1;        // 1-61.8, 2-50, 3-38.2, 4-23.5
extern int Slip         = 30;       // реквот
extern int Expiration   = 30;       // истечение отложек в часах
extern int BarsCount    = 500;      // баров для расчета индикатора
extern int MAPeriod     = 100;      // период МА
extern int Magic        = 123;      // магик

extern string IndName="MA_Chanels_FIBO";

int OrdType=0;
double Stop=0,MarketPrice=0;
datetime TimeOpen=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr;
   double sl=0,tp=0;
   datetime expiration=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(type>1 && Stops==0) sl=NormalizeDouble(Stop,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(type>1 && Stops==0) sl=NormalizeDouble(Stop,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   if(type==2 || type==3) expiration=TimeCurrent()+3600*Expiration;
   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,expiration,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del=true;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderStopLoss()!=MarketPrice+20*Point)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),MarketPrice+20*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderStopLoss()!=MarketPrice-20*Point)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),MarketPrice-20*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int i=0;
   double up=0,dn=0;
   if(Buff==1)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,0,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,7,1);
     }

   if(Buff==2)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,1,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,6,1);
     }

   if(Buff==3)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,2,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,5,1);
     }

   if(Buff==4)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,3,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,4,1);
     }

   if(CountTrades()<1)
     {
      if(Ask<dn && CountOrders(2)<1)//бай и бай лимит
        {
         PutOrder(0,Ask);
         TimeOpen=TimeCurrent();
         Stop=Ask-StopLoss*Point;
         MarketPrice=Ask;
         OrdType=0;

         for(i=1; i<=Count;i++)
           {
            PutOrder(2,Ask-Step*Point*i);
           }
        }
      if(Bid>up && CountOrders(3)<1)//селл и селл лимит
        {
         PutOrder(1,Bid);
         TimeOpen=TimeCurrent();
         Stop=Bid+StopLoss*Point;
         MarketPrice=Bid;
         OrdType=1;

         for(i=1; i<=Count;i++)
           {
            PutOrder(3,Bid+Step*Point*i);
           }
        }
     }
/*
   if(LastOrderOpenTime()>=TimeOpen)
     {
      DelOrder();
     }
*/
   if(CountTrades()>0 && ((OrdType==0 && Bid-MarketPrice>BULevel*Point) || (OrdType==1 && MarketPrice-Ask>BULevel*Point)))
     {
      BU();
      DelOrder();
     }

   Comment("\n Stop: ",Stop,
           "\n MarketPrice: ",MarketPrice,
           "\n OrderType: ",OrdType);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 21 января 2016, 01:38
0
Оксана, когда большой объем переносим на новый топик :) 
avatar

AM2

  • 21 января 2016, 00:01
+1
Доработка (если она возможна):

Безубыток (true/false)

В этом советнике уже столько всего. В следующем месяце в новом топике опишите ТЗ, если советник будет простым, сделаю.
avatar

AM2

  • 20 января 2016, 23:52
0
Можно ли в этом советнике вынести в настройки отключение/включение отложек бай/селл.

В этом топике принимаются только пожелания автора. Для создания советника по вашей стратегии создайте новый топик.
avatar

AM2

  • 20 января 2016, 23:35
0
Андрей я точно помню, что был недавно в столе заказов топик по индикатору Ишимоку

Ишимоку не было, был хейкен аши.
avatar

AM2

  • 20 января 2016, 23:32
0
Трал работает, только значение TrailingStop нужно выставлять больше. У меня 10 стоит.




extern int TrailingStop   = 10;    // Фиксированный размер трала
extern int TrailingStep   = 2;     // Шаг трала
avatar

AM2

  • 20 января 2016, 14:22
+1
Как только я найду немного свободного времени буду смотреть.
avatar

AM2

  • 20 января 2016, 08:11
0
Похоже что нет доступа к элементам панели «Стандартная». Остается программное нажатие Ctrl+E. Еще спрошу на форуме.
Здесь пример доступа к контролам терминала: forum.mql4.com/ru/17146/page4#119311



Пример скрипта программно нажимающий комбинацию клавиш ALT+Q:

#include <WinUser32.mqh>

#define PAUSE      10
#define VK_MENU    0x12 //ALT key
#define VK_CONTROL 0x11 //CTRL key
#define KEY_CODE   'Q'

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start()
{
   keybd_event(VK_MENU,0,0,0);
   Sleep(PAUSE);
   keybd_event(KEY_CODE,0,0,0);
   Sleep(PAUSE);
   keybd_event(KEY_CODE,0,2,0);
   Sleep(PAUSE);
   keybd_event(VK_MENU,0,2,0);
}
avatar

AM2

  • 20 января 2016, 03:12