フリーEAの作成 - ページ 10

 
Konstantin Bystrov:
こんにちは。mt4で、アクティブな取引セッション(10-18から設定可能)が日本のローソクの形で表示されるように、インジケータを書く ことができる人。

大丈夫

 

こんにちは。

ここに、通貨の強さを示す情報指標を元にEAを書 ける職人さんはいないのでしょうか。アルゴリズムは以下の通りです。強い通貨と弱い通貨の出現を待っている。スクリーンショットの例では、EURとUSDです。 その差が大きい場合(EAのパラメータで設定されます)、ポジションをオープンします。スクリーンショットの例では、月曜日に行う、売りにエントリーする必要があります。EAでは、シグナル(異なる通貨の強弱の差)を取るべき時間枠のパラメータを設定する必要があります。通貨の強弱の差がシグナルになります。ストップロスは必要ありません。テイクプロフィットが必要です。価格が不利になったら、平均化しよう。Expert Advisorで、平均化ステップ、注文数、マジックナンバー、初期ロットサイズ、ロット増加係数を指定します。最近、この方法で取引していますが、非常に満足して います。私の認識では、それは聖杯の ようなものです。

ファイル:
 
Konstantin Bystrov:
mt4で、アクティブな取引セッション(10-18の間で設定可能)が日本のローソクの形で表示されるように、インジケータを書く ことはできますか?
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""

#property indicator_chart_window

extern int    NumberOfDays = 50;
extern string AsiaBegin    = "10:00";
extern string AsiaEnd      = "18:00";
extern color  AsiaColor    = Goldenrod;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init()
  {
   DeleteObjects();
   for(int i=0; i<NumberOfDays; i++)
      CreateObjects("AS"+i, AsiaColor);
   Comment("");
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit()
  {
   DeleteObjects();
   Comment("");
  }
//+------------------------------------------------------------------+
bool CreateObjects(
   const string          name="Rectangle",  // имя прямоугольника
   const color           clr=clrRed,        // цвет прямоугольника
   const long            chart_ID=0,        // ID графика
   const int             sub_window=0,      // номер подокна
   datetime              time1=0,           // время первой точки
   double                price1=0,          // цена первой точки
   datetime              time2=0,           // время второй точки
   double                price2=0,          // цена второй точки
   const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий прямоугольника
   const int             width=2,           // толщина линий прямоугольника
   const bool            fill=false,        // заливка прямоугольника цветом
   const bool            back=false,        // на заднем плане
   const bool            selection=false,    // выделить для перемещений
   const bool            hidden=true,       // скрыт в списке объектов
   const long            z_order=0)         // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим прямоугольник по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2))
     {
      Print(__FUNCTION__,
            ": не удалось создать прямоугольник! Код ошибки = ",GetLastError());
      return(false);
     }
//--- установим цвет прямоугольника
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линий прямоугольника
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линий прямоугольника
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- включим (true) или отключим (false) режим заливки прямоугольника
   ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим выделения прямоугольника для перемещений
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
void DeleteObjects()
  {
   for(int i=0; i<NumberOfDays; i++)
      ObjectDelete("AS"+i);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start()
  {
   datetime dt=CurTime();

   for(int i=0; i<NumberOfDays; i++)
     {
      DrawObjects(dt, "AS"+i, AsiaBegin, AsiaEnd);
      dt=decDateTradeDay(dt);
      while(TimeDayOfWeek(dt)>5)
         dt=decDateTradeDay(dt);
     }
  }
//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te)
  {
   datetime t1, t2;
   double   p1, p2;
   int      b1, b2;

   t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
   t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);

   if(!TimeDayOfWeek(t1))
      return;

   b1=iBarShift(NULL, 0, t1);
   b2=iBarShift(NULL, 0, t2);
   p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
   p2=Low [Lowest(NULL, 0, MODE_LOW, b1-b2, b2)];
   ObjectSet(no, OBJPROP_TIME1, t1);
   ObjectSet(no, OBJPROP_PRICE1, p1);
   ObjectSet(no, OBJPROP_TIME2, t2);
   ObjectSet(no, OBJPROP_PRICE2, p2);
  }
//+------------------------------------------------------------------+
datetime decDateTradeDay(datetime dt)
  {
   int ty=TimeYear(dt);
   int tm=TimeMonth(dt);
   int td=TimeDay(dt);
   int th=TimeHour(dt);
   int ti=TimeMinute(dt);

   td--;
   if(td==0)
     {
      tm--;
      if(tm==0)
        {
         ty--;
         tm=12;
        }
      if(tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12)
         td=31;
      if(tm==2)
         if(MathMod(ty, 4)==0)
            td=29;
         else
            td=28;
      if(tm==4 || tm==6 || tm==9 || tm==11)
         td=30;
     }
   return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
  }
//+------------------------------------------------------------------+


 

こんにちは プログラミングの達人たちへ このロボットを完成させるために、あなたの助けを必要としています。

私自身はプログラマーではなく、このロボットはインターネットで見つけた様々なパーツを自分で組み立てているのですが、残り2つの欲しい機能が付けられないのです。よろしくお願いします。あなたにとって、それは私ほど難しいことではないと思います。もしよろしければ、2つの保留注文のうち1つがトリガーされた後に保留注文を クローズする関数を作っていただけないでしょうか。そして2番目の関数は、自動的に注文のロットを増やす必要があります(あなたが100ドルに達したときにバランス0.01ロットのすべての50ドルのための "仮定 "は、ロボットが自動的に0.02でロットを増加させます)。よろしくお願いします。

extern int    TakeProfit     = 100.0;
extern bool   AllPositions   = True; // Управлять всеми позициями
extern bool   ProfitTrailing = True;  // Тралить только профит
extern int    TrailingStop   = 50;    // Фиксированный размер трала
extern int    TrailingStep   = 0;     // Шаг трала
extern bool   UseSound       = False;  // Использовать звуковой сигнал
extern string NameFileSound  = "expert.wav";  // Наименование звукового файла


void start() 
{
double TakeProfitLevelB;
double TakeProfitLevelS;
double BuyStart = Ask + 400*_Point;
double SellStart = Bid - 400*_Point;

TakeProfitLevelB = BuyStart + TakeProfit*Point;
TakeProfitLevelS = SellStart - TakeProfit*Point;

if (Open[1]==Close[1]&& OrdersTotal()==0)
{
int BuyTicket = OrderSend(Symbol(),OP_BUYSTOP,0.10,BuyStart,3,0,TakeProfitLevelB,NULL,0,0,Green);
int SellTicket = OrderSend(Symbol(),OP_SELLSTOP,0.10,SellStart,3,0,TakeProfitLevelS,NULL,0,0,Blue);
}
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (AllPositions || OrderSymbol()==Symbol()) {
        TrailingPositions();
      }
    }
  }
}

void TrailingPositions() 
{
  double pBid, pAsk, pp;

  pp = MarketInfo(OrderSymbol(), MODE_POINT);
  if (OrderType()==OP_BUY) {
    pBid = MarketInfo(OrderSymbol(), MODE_BID);
    if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) {
      if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
        ModifyStopLoss(pBid-TrailingStop*pp);
        return;
      }
    }
  }
  if (OrderType()==OP_SELL) {
    pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
    if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
      if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
        ModifyStopLoss(pAsk+TrailingStop*pp);
        return;
      }
    }
  }
}

void ModifyStopLoss(double ldStopLoss) 
{
  bool fm;

  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if (fm && UseSound) PlaySound(NameFileSound);
}
 
Фиксированно-пропорциональный метод выбора размера позиции (Р. Джонс)
Фиксированно-пропорциональный метод выбора размера позиции (Р. Джонс)
  • 2011.07.24
  • www.mql5.com
Когда-то давно читал книгу Р. Джонса, посвященную различным стратегиям управления капиталом (Биржевая игра. Сделай миллионы, играя числами...
 
 Iurii Tokman:


指標をありがとうございます。私はIurii Tokmanの サービスをみんなに勧めています。
 
親愛なるgss様、私のリクエストにご興味をお持ちいただき、ありがとうございます。これが、MQL4の第一人者を取り上げることになった理由です。私が投稿したコードは、様々なExpert Advisorの助けを借りて、より正確に言えば、Trailing Stop機能のみを使用して構築したものです。残りは自分で作った(保留中の注文について)。あなたや他の達人に私のコードを見てもらい、このロボットにさらに2つの機能を追加してもらいたいのですが、よろしいですか?
1) 保留注文のいずれかがトリガーされたときに、その注文を削除すること。
2) 自動ロットアップ(50ドルごとに0.01、つまり100ドルでは0.02になります)
よろしくお願いします。

 

こんにちは、私のインジケーターのアイデアをご覧ください。

https://www.mql5.com/ru/forum/35071/page144#comment_22289427

Напишу советник бесплатно
Напишу советник бесплатно
  • 2021.05.08
  • www.mql5.com
если у вас есть хороая стратегия, и вы готовы ей поделиться,могу написать советника. приглашаю обсудить публично...
 
簡単なEAを書 ける人?
買いと売りの両方の注文を出すと、どちらかが閉じると同時に、同じロットの買いと売りの同じ注文が開くなど。
 
例えば、決済やベイに差がある場合、常に13pipsの差の注文を保留しておく必要が あります。つまり

取引が利益になっている場合、すなわち注文が前進している場合 --- すなわち、逆方向の動きの場合、ロックは正となります

2.ロックの一部を開く場合は、その差額の注文を出す。

以上です。 もう一度 言いますが、Expert Advisor はチャート上に何のボタンも 追加せずに勝手に終了 するようなことはしないでください。