int open_orders() { int count = 0; for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down { if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order if(OrderSymbol() != _Symbol) continue; // optional check for same symbol if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL } return(count); }
はい、1回しか取引していませんが、あなたの例は素晴らしいです、新しいイースを作成するベースとして非常に有用です。
void OnTick()
{
double up = iIchimoku(NULL,5,9,26,52,3,0),
down = iIchimoku(NULL,5,9,26,52,4,0);
static bool was_above = true;
bool is_above = (MathMax(up,down)< Bid);
if(!trade_made && !was_above && is_above && open_orders()<1)
{
if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
{
printf("OrderSend() failed. Error code: %i",GetLastError());
}
else t rade_made=true;
}
was_above = is_above;
}
int open_orders()
{
int count = 0;
for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
{
if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order
if(OrderSymbol() != _Symbol) continue; // optional check for same symbol
if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number
if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL
}
return(count);
}
Marco: 新しいアップデートを試しましたが、取引が成立しません。前回投稿された方法と同じように、2番目のintを削除したものをチケットに入れました。しかし、最初の取引はstrategy testerでは 行われません。
というのも、取引をするはずなのです。
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
//| One Order.mq4 |
//| Copyright 2017, Marco vd Heijden, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Marco vd Heijden, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
bool order=0;int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(order==0)
{
double up=iIchimoku(NULL,5,9,26,52,3,0);
double down=iIchimoku(NULL,5,9,26,52,4,0);
{
if(MathMax(up,down)<Bid)
{
ticket=OrderSend(NULL,0,0.01,Ask,3,Bid-150*Point,Bid+100*Point);
{
if(ticket>-1)
{
order=1;
}
}
}
}
}
}
//+------------------------------------------------------------------+
今試してみたところ、1回だけ注文が入りました...
honest_knave さん、ありがとうございました!まさに私が必要としていたものです。
Marco さんもありがとうございました。
正直なところ、ありがとうございました。
どういたしまして。しかし、答えが見かけほど単純でないことに同意しますか?これは、ここのコメントのいくつかを説明するかもしれませんCODE ヘルプ(緊急)。
私はすでにそのコメントを削除しました、単純なEAは私にとって問題です、私は本当に何かを言うために何も知りません。
ねえ、私たちは皆、まだ学んでいるのよ。そして、あなたの心は正しい場所にありました。
問題を解決してくれてよかったよ。
同じことをするにも、いろいろな方法がある...。マルコと私は異なる方向からこの問題に取り組みましたが、どちらも同じくらい正しいです。
がんばってください。
はい、Marco vd Heijden さん、それは honest_knave さんからのものと同じように動作します。
ご協力ありがとうございました。
あなたが投稿したコードから、EAが再び注文を開くことはないと思います。チャートからEAを削除し、再び(初期化するために)接続しない限り、です。それが目的だったのでしょうか?
彼が正しい方向を選ぶことを期待しましょう。)
どこかで、まだオープンポジションを持っていることを忘れていた人の話を読みましたが、何が起こったと思いますか?
あなたが投稿したコードから、EAが再び注文を開くことはないと思います。チャートからEAを削除し、再び(初期化するために)接続しない限り。それが目的だったのでしょうか?