一度立ち上げたレートを5分足チャートで条件付きで追いかけるようなアドバイザー。 - ページ 7

 
int start()
{
if(OrdersTotal() !=0) return;

//----
if (iOpen(NULL,5,0)-Bid>Delta*Point) //価格がDeltaポイント以上下落した
......


 
zhuki:
if(OrdersTotal ()!=0) return;

他の人の注文(他のシンボルやマジックを使う)はどうするのですか?テスターではうまくいきますが、このEA以外にアカウントに何か入っている場合、正しい方法は以下のようになります。

bool NmbrOfOpened(int Magic){
 
   int  _OrdersTotal=OrdersTotal();
 
   if (_OrdersTotal>0) {
       for (int i=0; i<_OrdersTotal; i++) {    
         OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if (OrderMagicNumber()==Magic && OrderSymbol()==Symbol()) {
            return(true);  break; 
         }
       }
   }
   else return(false); 
 return(false);
}

この関数は、指定された(渡された)マジシャンと現在のシンボルによって開かれた位置がない場合、false を返します。

 
誤解を招きそうだし、説明文も読めない。
彼がどれだけ混乱するか想像してみてください。だから、彼がより理解しやすいように書きました。
 
非常に良い、コツを掴んでいる :))
2件ともキャッチアップ、ありがとうございました。
 
Expert Advisor のみ Delta 機能がどのように機能するかまだ理解していません
私の条件ではディールはトリガーされません
Delta=30
Expert Advisor でポジションを pips で +-30オープン したいことを意味しています。でも、上下に5~10pipsで開くので、よくわからない...。
 
本当に、デルタ関数はどう動くかわからないのです :(
もしかしたら、他に簡単な解決策があるかもしれませんね。
ある関数を見つけました
Distance=30 // 現在価格から保留注文 価格までの 距離
保留注文に限らず実装できるのでしょうか?
アイデアは同じです:現在のバー、そのオープン価格を追跡し、5分間のバーの間に、その価格は、その5分間のバーのオープン市場から、例えば30ピップ増加または減少する場合、その時だけ位置を開く....。
私のストラテジーは、保留中の注文では動作しません......

 

そして、あなたは自分のコード全体をここに掲載することになります。そして、デルタがうまくいかない理由もご覧ください...。

 
//+------------------------------------------------------------------+
//|                                                Expert-000001.mq4 |
//|                                    Copyright © 2008, salesman*** |
//|                                         http://www.forexgrand.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, salesman***"
#property link      "http://www.forexgrand.ru"
#include <WinUser32.mqh>
#include <stdlib.mqh>
extern double StopLoss=30;                        // Stop Loss
extern double TakeProfit=3;                       // Take Profit
extern double Lots=0.5;                           // Объем сделки в %
extern double Slippage =3;                        // Максимальное отклонение от запрошенной цены
extern double MagicNumber=0;                      // Order ID
int  ticket;
int Delta=30;                                     // Сигнал приказа в пунктах
int TimeForSleep = 10;                            // Время для отдыха после сделки

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
if(OrdersTotal()!=0)  return; //Выполнять только одну сделку.

//----
if (iOpen(NULL,0,0)-Ask>=Delta*Point) //Цена упала больше или = Delta пунктов
//Null-тек инструмент, 0-тек.график, 0-слежка за тек баром
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил",MagicNumber,11111,Green);

}
if (iOpen(NULL,0,0)-Bid<=Delta*Point) //Цена выросла больше или = Delta пунктов
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"Продал",MagicNumber,22222,Green);
}
//----
return(0);
}




//+------------------------------------------------------------------+
//+------------------------------------------------------------------+

以下は、コードの全体像です......。
 

確かにそうですね。デルタ...動作しない

どうやら、ここでは、デルタの符号(極性)で購入時に理解する必要があると販売時に、上記のコードで "のために"、例えば、値を買って(iOpen(NULL、0、0)-すべての時間を求めることは負になります。そして、バー(iOpen(NULL,0,0)-Ask>=Delta...)のオープン価格でトレードが開始されます。

この方法でやってみたら(買ってみたら)-。

if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла на больше или = Delta пунктов
 
i.e. 最終的には、このバリアントをテストする必要があります:

int start()
{
if(OrdersTotal()!=0) return; //1つの取引のみフォローする。

//----
if (Bid - iOpen(NULL,0,0)<=Delta*Point) //The price fell by less or = Delta pips
//Null-tech instrument, 0-tech.chart, 0-tracking text bar
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point, "Buy",MagicNumber,11111,Green);

} }.
if (Ask - iOpen(NULL,0,0)>=Delta*Point) //価格がそれ以上または= Deltaポイント上昇
{
ticket=OrderSend(Symbol(,OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point, "Sold",MagicNumber,22222,Green);
} } } { OP_Sell,Lots,Bid,3,Bid+StopLoss,Delta*Point,Sold",MagicNumber,22222,Green)
//----
return(0);
}.
私の推測が正しいのか、それとも行の中でAskとBidを混同してしまったのか:
if (Bid - iOpen(NULL,0,0)<=Delta*Point) //Цена упала на меньше или = Delta пунктов

if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла на больше или = Delta пунктов