初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 832

 
void OnTick()
  {
 TimeCurrent(dt); 
//--- Достаточно ли количество баров для работы
   if(Bars(_Symbol,_Period)<10) // общее количество баров на графике меньше 10?
     {
      Alert("На графике меньше 10 баров, советник не будет работать!!");
      return;
     }
//--- сначала нужно записать в массивы значения буферов индиктора Fractal
//--- заполнение данными буфера

   ArraySetAsSeries(Signal,true);
   ArraySetAsSeries(Main,true);

   
   if(CopyBuffer(Stochastic_handle,0,0,100,Main)<=0) return;
   if(CopyBuffer(Stochastic_handle,1,0,100,Signal)<=0) return;

   double Main_1=Main[1];
   Main_1=NormalizeDouble(Main_1,5);
   Print("Main_1=",DoubleToString(Main_1,5));
    
   double Main_2=Main[2];
   Main_2=NormalizeDouble(Main_2,5);
   
   double Main_3=Main[3];
   Main_3=NormalizeDouble(Main_3,5);
   
   double Signal_1=Signal[1];
   Signal_1=NormalizeDouble(Signal_1,5);
   Print("Signal_1=",DoubleToString(Signal_1,5));
   
   double Signal_2=Signal[2];
   Signal_2=NormalizeDouble(Signal_2,5);
   
   double Signal_3=Signal[3];
   Signal_3=NormalizeDouble(Signal_3,5);
   
   
// Для сохранения значения времени бара мы используем static-переменную Old_Time.
// При каждом выполнении функции OnTick мы будем сравнивать время текущего бара с сохраненным временем.
// Если они не равны, это означает, что начал строится новый бар.

   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;

// копируем время текущего бара в элемент New_Time[0]
   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) // ok, успешно скопировано
     {
      if(Old_Time!=New_Time[0]) // если старое время не равно
        {
         IsNewBar=true;   // новый бар
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);
         Old_Time=New_Time[0];   // сохраняем время бара
        }
     }
   else
     {
      Alert("Ошибка копирования времени, номер ошибки =",GetLastError());
      ResetLastError();
      return;
     }
     
     
// открытие покупок

     if(Main_1>Signal_1&&Main_2<Signal_2&&Main_3<Signal_3&&Main_2<20)
     {
      if(IsNewBar!=false)
        {
           
              {
               open_by_market();

              }
        }
     }
  

  // закрытие покупок 
 
   if (Signal_3>80&&Signal_2>80&&Signal_1<80)
   {
   if(PositionsTotal()>0)
        {
         for(int i=0;i<PositionsTotal();i++)
           {
            ulong orders_ticket=PositionGetTicket(i);
            if(((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) ))
              
              
              {  trade.PositionClose(orders_ticket); }        
            
         }
     }           
   }
 
}
   

2つのタスク(買いシグナルを例とする)をどのように実装するかを教えてください。

所与:エントリーポイント-ストキャスティクスラインが20を下回るクロス

トレードクローズ - スローストキャスティックラインを通過して80レベルを下方にクロス。

つまり、添付の写真のように、同じレベルで複数のポジションを建てることはありません。

2.レベル80を上から下へスローストキャスティックラインと最初のクロスではなく、2番目のクロスでクローズすること。

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
ファイル:
121.png  27 kb
 
gastinets:

2つのタスク(買いシグナルを例とする)をどのように実装するかを教えてください。

所与:エントリーポイント-ストキャスティクスラインが20を下回るクロス

トレードクローズ - スローストキャスティックラインを通過して80レベルを下方にクロス。

つまり、添付の写真のように、同じレベルで複数のポジションを建てることはありません。

2) 2つ目の注文は、スローストキャスティクスラインを通りレベル80を下方にクロスした時(1つ目ではなく2つ目)に決済する。

まず明確に定式化する。

  • 開位条件
  • 近況

 
構築したExpert AdvisorのOnTick機能 で、ポジション情報にアクセスする方法を教えてください。少なくとも、開いているかどうかは別として。ポジションのポインターはどこで手に入りますか?それとも他の方法で行う必要があるのでしょうか?
 
VHS:
構築したExpert AdvisorのOnTick機能 で、ポジション情報にアクセスする方法を教えてください。せめて、開いているかどうかだけでも。ポジションのポインターはどこで手に入りますか?それとも他の方法で行う必要があるのでしょうか?

Expert Advisorは誰が設計したのですか?

コードを表示してください。
 
このトピックに関連しないコメントは、「MQL4 MT4 MetaTrader 4初心者からの質問」に移動しました。
 
Vladimir Karputov:

エキスパートの設計者は誰ですか?

コードを表示してください。
Expert Advisorは、カスタム信号クラスとカスタム取引クラスを使用してウィザードで設計されています。Expert Advisorのコード自体は標準的なものです。ExtExpert.OnTick()はOnTickで呼び出され、残りのコードは標準ライブラリを使って ビルドされます。実はこの質問は、誰も回答していない前回の質問に続くものなんです。ウィザードで設計したExpert Advisorで、カスタムシグナルクラスをポジションを開くときだけ使用し、シグナルクラスからのシグナルを無視して取引するときだけポジションを閉じるようにしたいのです。信号を無視する方法がわかったんだ。しかし、onTickでどのようにオープンポジションがあるかどうかの情報を取得し、無視を可能にするのか、私は理解していません。
 
VHS:
***そして、私はこれまでトレードによってしかクローズしたことがありません***。

はっきりしないんです。

 

VHS:
***а закрывал уже только по трейдингу ***

ウラジーミル・カルプトフ

明確ではありません。

キーボードで隣り合った "D "と "L"。私のミスです。

 
Artyom Trishkin:

キーボードで隣り合った "D "と "L"。間違っている。

はい、アルチョムさん、ありがとうございました。どうやら自動交換のようです(手が曲がっていることも)。そして、カスタムクラスとクロージングはtrayDingではなく、trayLingです。
CExpertクラスでは、ProcessingメソッドがまずDirectionに入り、signalクラスからのシグナルをチェックします。そして、(SelectPositionがある場合のみ)Trailingをチェックします。その結果、オープンポジションがある場合、トレーリングクラスからのシグナルがない場合、シグナルクラスからのシグナルを取得してクローズすることがあります。
以前の方法(Trailing Stopクラスからオープンポジションの存在に関する情報を取得し、OnTickを介してIgnoreに渡す)は、うまくいきませんでした。OnInitで末尾のオブジェクトを記憶させ、そこからOnTickに転送する方法を知りました。しかし、それはポジションが開いている間だけ機能します。しかし、閉じた後の処理は末尾が始まらず、Ignoreは無視されたままです。つまり、ポジションをクローズした後、OnTickでこの瞬間を定義し、Ignore値 "0 "を返すという最後の仕上げがあるだけなのです。しかし、OnTickで効果的にポジションの情報(有無)を取得する方法がわかりません。
 
VHS:
はい、アルテムさん、ありがとうございました。どうやらオートチェンジ(手が曲がっている)のようです。そして、カスタムクラスとクローズはtrayDingではなく、trayLingです。
CExpertクラスでは、ProcessingメソッドがまずDirectionに入り、signalクラスからのシグナルをチェックします。そして、(SelectPositionがある場合のみ)Trailingをチェックします。その結果、オープンポジションがある場合、トレーリングクラスからのシグナルがない場合、シグナルクラスからのシグナルを取得してクローズすることがあります。
以前の方法(Trailing Stopクラスからオープンポジションの存在に関する情報を取得し、OnTickを介してIgnoreに渡す)は、うまくいきませんでした。OnInitで末尾のオブジェクトを記憶させ、そこからOnTickに転送する方法を知りました。しかし、それはポジションが開いている間だけ機能します。しかし、閉じた後の処理は末尾が始まらず、Ignoreは無視されたままです。つまり、ポジションをクローズした後、OnTickでこの瞬間を定義し、Ignore値 "0 "を返すという最後の仕上げがあるだけなのです。しかし、OnTickで効果的にポジションの情報(有無)を取得する方法が分かりません。

EAでCLOSEスレッショルドを100に設定し、シグナルに0.5のウェイトを与えることで、ウェイト0.5のシグナルは決して100スレッショルドを超えないようにすることができます。


理由: