[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 1121

 

おつかれさまでした/おやすみなさい

私は動作しませんこの原始的な方法を使用して、取引を逆にしようとしている(エキスパート-アドバイザは、ティックで計算されます)。

if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // 買い注文があったかどうか && ローソク足が下値で閉じたかどうか判断する

{

CheckForClose(); // 注文をクローズします。

OpenSell(); //売り 注文を出す

を返します。

}

どこを間違えているのか、アドバイスをお願いします。また、このギャップを埋めるようなリンクをいただけるとありがたいです。

 

dzhini:

私はこの原始的な方法でリバース・トレードをしようとしていますが、これはうまくいきません(Expert Advisorはティックで計算します)。

if(CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) // 買い注文があったかどうか && ローソクがボトムレベルより下で閉じたかどうかをチェックします。


この関数では、おそらくすべての注文をカウントしています。
 

Time1とTime2の間に何分あるかは、どのように判断すればよいですか?

datetime Time_1     = D'2011.01.12 13:30';
datetime Time_2     = D'2011.01.05 10:30'; 

минут = Time_1- Time_2
 
sergeev:
これはおそらく、すべての注文をカウントする関数です。これは、Buy であるべきです。

これは標準機能です。

int CalculateCurrentOrders(文字列シンボル)
{
int buys=0,sells=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)ブレーク。
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}

if(buys>0) return(buys);
else return(-sells);

}

0を超えると買い 注文、0を下回ると売り注文 )))

 
Eliza:

Time1とTime2の間に何分あるかは、どのように判断すればよいですか?

の場合、その差は秒数で返される。

を60で割ると、分数になります。

 
取引を取り消す。Expert Advisor の構造を変更 - 機能を削除しました。

extern double TP = 70; //takeprofit
extern double SL = 0; //stoploss
extern double Lot = 0.1;

double HighLevel;
double LowLevel;
int resBuy=0;
int resSell=0;


//+----------------------------------------------------------------+
//|エキスパート初期化関数|
//+--------------------------------------------------------+
int init()
{
HighLevel=High[1];
LowLevel=Low[1];
return;
} ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・。

//+------------------------------------------------------------------------+
//| expert function |
//+------------------------------------------------------------------------+

void start()
{

if(Bars<100 && IsTradeAllowed()==false) return;


if(resBuy==0 && resSell==0 && CheckBreak()==-1)
{
resSell=OrderSend(Symbol(,OP_SELL,Lot,Bid,2,0,Bid -TP,",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}

if(resBuy==0 && resSell==0 && CheckBreak()==-1)& CheckBreak()==1)
{
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}

if(resBuy!=0 && resSell==0 && Close[1]<LowLevel) //------------------------------------- この部分に興味があります:1つのバーでのクローズとオープニング
{
bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue);
// while(!IsTradeAllowed())Sleep(100);
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}

、(resSell!=0 && resBuy==0 && Close[1]>HighLevel) //------------------------------------- この部分に興味があります:1つのバーでのクローズとオープニング
{
bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red);
// while(!IsTradeAllowed())Sleep(100);
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}



//------------------------------------------------- チェック Low&...High break (Func)

double CheckBreak()
{
double candle=Open[1]-Close[1];

if(candle>0 && Low[1]<LowLevel) return(-1);
if(candle<0 && High[1]>HighLevel) return(1);
} }.
 
sergeev:

difference は秒数を返す。

を60で割ると、分数になります。

1971.03.04 12:00という日付が表示されるだけなのですが、これは変換する必要があるのでしょうか?

extern datetime Time_1     = D'2011.01.12 13:30'; 
extern datetime Time_2     = D'2011.01.05 10:30'; 

bool   Commentari      = true;

int start()
  {

if (Commentari){
 Comment(
         "\n Дата  =  " + TimeToStr((Time_1-Time_2)/60)," минут",
      
         "\n==============================");}
   return(0);
  }
 
Eliza:

日付が出るだけなので、変換が必要なのでは?

まず、なぜ60倍なのですか?

2つ目-00:15のように分数を時間として表示したい場合。
は、60で割ったりかけたりする必要はありません。

 
sergeev:

まず、なぜ60倍なのですか?

2つ目 - 画面に分数を00:15のような時間として表示したい場合。
は、60で割ったりかけたりする必要はないのです。

はい、除算のために修正しましたが、年が1970.01.01 02:51と出てしまいます。

画面には必要ないので、その時間間隔の、日付のない分数を求めたいのですが...。

除算しなくても、日付が出力されるのですが、関数の元になる日付を減算すればいいのでしょうか?

  • datetimeは 日付と時刻で、1970年1月1日0時からの経過秒数を含む符号なし整数である。
  • extern datetime Time_1     = D'2011.01.12 13:30'; 
    extern datetime Time_2     = D'2011.01.05 10:30'; 
    
    datetime me_2     = D'1970.01.01 00:00'; 
    
    bool   Commentari      = true;
    
    int start()
      {
    
    if (Commentari){
     Comment(
             "\n Дата  =  " + TimeToStr(me_2-(Time_1-Time_2))," минут",
          
             "\n==============================");}
       return(0);
      }

  • 1970.01.01 02:51を引くと、無効な時間が表示される。
  • それとも、μl言語では取得できないのでしょうか?
 

単に分単位が欲しいだけなら、TimeToStrを 使う理由は全くありません。

Timeは通常のint型数値です。

または、TIME _MINUTE フラグ
のときのみ
TimeToStr を使用します。