MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1928

 
Valeriy Yastremskiy #:
touch / crossed - moveアルゴリズムが機能しない?

難しいですね、もう適当なものを回したいです。レベルを視覚化し、過去のレベルにストップを移動させるだけで、十分なのだそうです。こんなに釣れるとは思わなかった。もし、彼がずっといなくなっていなかったら、そうしていただろうけど、今は違う。アービトラージはいらない、すでに持っている。

 

step:=:constの場合、現在のストップロスから指定されたステップを持つレベルを単純に表示します。これ以上、シンプルなことがあるだろうか。

 
Maxim Kuznetsov #:

step:=:constの場合、現在のストップロスから指定されたステップを持つレベルを単純に表示します。これ以上、シンプルなことがあるだろうか。

はい、アルゴリズム了解です。窓を開けて、何が起こっているのか書き留める?微妙に違う条件、掘り下げて書くために。

P.S. 他の状況では、私は尋ねないでしょう。

 
デモ版で注文を開くと、一般的なエラーでキューに入れられると書いてあるのですが、ご存知の方アドバイスお願いします。何が問題なのか?
 
Maxim Kuznetsov #:

ex4が古いコンパイラでビルドされている可能性が高いです。端末は更新されましたが、EAは古代の孤児です。作者に連絡する必要がある

2つ目の選択肢 - 署名が一致しない(または技術的な理由で検証していない)。DNSの更新を待つだけで、接続が確立されます。

仮定のオプション - 作者は永久追放される。プロフィールを見る

結論から言うと、まず著者に質問することです。

ありがとうございました。

 
Vitaly Muzichenko #:

難しいですね、もう適当なものを回したいです。レベルを視覚化し、過去のレベルにストップを移動させるだけで、十分なのだそうです。こんなに釣れるとは思わなかった。もし、彼がずっといなくなっていなかったら、そうしていただろうけど、今は違う。アービトラージはいらない、すでに持っている。

Oninitはレベルを計算し、描画します。違う仕事でも、近くにいるために。あなたのパートはアブソリュートレベル用です。

ザイ、もちろんあまり問題はないんですけどね。注文、ポジション、トロールがどのように追跡されるかを理解する必要がある。描くのは簡単だが、レベルに達すると、レベルの色を変えるか、水平線を削除しなければならない。
ファイル:
 
Valeriy Yastremskiy #:

OnInitでレベル計算と描画を行う。異なるタスクのために、しかし並んでいる。あなたのパートはアブソリュートレベル用です。

ザイ、確かにあまり悪いところはないですね。注文、ポジション、トロールがどのように追跡されるかを理解する必要がある、それなら描くのは簡単だ。しかし、あるレベルに達すると、レベルの色を変えるか、水平線を削除しなければならない。

クロスファンクションにトリガーフラグを追加する必要があるのですが、時間がありません。

input double   PriceOrder=0.0;         // Цена ордера, 
input int TralStep=300;                  // Шаг отслеживания SL  
input int NumberLevels=7;            // Kоличество уровней для выбранного метода ВВЕРХ

input bool FlagShowLine=true;              // Рисовать / не рисовать уровни



//---


double LevelPrice[10];                 // Количество уровней не более 10.
string HLineName[10];
bool Del=true;

string MsgAlert,Tip;

int CurLevel;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---Расчет ценовых уровней

CalculationOfLevels(PriceOrder,TralStep,NumberLevels,Tip);



if(FlagShowLine)
{
ShowLine(Tip);
}
//--- create timer
   EventSetTimer(60);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  
  Comment("");
  
   int obj_total=ObjectsTotal();
      PrintFormat("Всего %d объектов",obj_total);
      for(int i=obj_total-1; i>=0; i--)
        {
         string name=ObjectName(i);
 //        PrintFormat("Объект %d: %s",i,name);
         ObjectDelete(name);
        }
//--- destroy timer
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   CrossingLevel(CurLevel,Tip);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=0.0;
//---

//---
   return(ret);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| Создает горизонтальную линию                                     | 
//+------------------------------------------------------------------+ 
bool HLineCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="HLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 double                price=0,           // цена линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=true,        // на заднем плане 
                 const bool            selection=false,    // выделить для перемещений 
                 const bool            hidden=false,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
  { 
//--- если цена не задана, то установим ее на уровне текущей цены Bid 
   if(!price) 
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID); 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим горизонтальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) 
     { 
      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); 
//--- отобразим на переднем (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  ShowModify(string name, string tip, bool del)
  {
  if(del){
ObjectDelete(name);
  }
  if(!del){
 if(tip=="Sell"){
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrGold);
 } 
  if(tip=="Buy"){
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrCoral);
 } 
 }
 }
 
 //+------------------------------------------------------------------+
 //| Мониторинг пересечения уровней                                   |
 //+------------------------------------------------------------------+
 
bool CrossingLevel(int level, string tip)
{
if((tip=="Buy" && Bid > LevelPrice[level]) || (tip=="Sell" && Ask < LevelPrice[level])){
CurLevel=level++ ;
return(true);
}
return(false);
}



void CalculationOfLevels(double priceorder, int trstep, int numberl, string tip){

//---Расчет ценовых уровней

for(int i=0; i<=(numberl); i++){
if(tip=="Buy"){
LevelPrice[i] =  priceorder + trstep*Point;
if(tip=="Sell"){
LevelPrice[i] =  priceorder - trstep*Point;

}
}
CurLevel=1;
}
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ShowLine(string tip)
{
color ClrLine=clrRed;
if(tip=="Buy") ClrLine=clrBlue;
if(tip=="Sell") ClrLine=clrRed;
for(int i=0;i<=(NumberLevels);i++){

//Alert("ShowLine_",ShowLine,"__",LevelPrice[i],"__",ClrLine);
HLineName[i]="LevelPrice_"+(string)i+"_"+(string)LevelPrice[i];

HLineCreate(0,HLineName[i],0,LevelPrice[i],(color)ClrLine,STYLE_SOLID,1);
}
}
ファイル:
ShowLevel.mq4  16 kb
 
Valeriy Yastremskiy #:

クロスファンクションにトリガーフラグを追加する必要があるのですが、時間がないのです。

ちょっと的外れなんですけどね。

昔書いたEAがあるのですが、ポジションを建てる場所が表示されるEAです


あとは、トロールのコードに追加して、トロールが発動するようなラインを描く必要があります。

この作業は、トロールEAが1つのチャートに設定されており、オープンポジションがあるすべてのチャートにラインを引く必要があるため、複雑になっています。

ファイル:
 
Vitaly Muzichenko #:

それはちょっと的外れですね。

こんな感じで長々と書いていますが、ポジションを開く場所が表示されるEAです


あとは、トロールのコードに追加して、トロールが発動するようなラインを描けばいいのです。

この作業は、トロールEAが1つのチャートに設定されており、オープンポジションがあるすべてのチャートにラインを引く必要があるため、複雑になっています。

すべてのウィンドウはすでに開いているのか、それともポジションが出現したときにEAによって開かれるのか?チャートを探すのが課題です)
 
Valeriy Yastremskiy #:
すべてのウィンドウはすでに開いているのか、それともポジションが発生したときにEAによって開かれるのか?チャートを探すのが課題です)

ポジションがあれば、ウィンドウは開いているものと思っています。