// В случае изменения количества ордеров по основному символу, сигнализирует об их количестве// #include <MT4Orders.mqh>constbool Init = EventSetMillisecondTimer(1);
int AmountOrders( conststring &Symb )
{
int Res = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS) && (OrderSymbol() == Symb))
Res++;
return(Res);
}
voidOnTimer()
{
staticint PrevAmount = 0;
constint Amount = AmountOrders(_Symbol);
if (Amount != PrevAmount)
{
PrevAmount = Amount;
Alert(Amount);
}
}
i == 2のとき、OrderSelectによってポイント1と同じオーダーに遭遇することがある。このため、AmountOrdersは実際より1つ多い値を返すことがあります。
以下は、その確認です。
#property strictvoidOnStart()
{
for (int i = 0; i < 5; i++)
OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, 0);
int PrevTicket = 0;
for (int i = OrdersTotal() - 1; i > 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
{
constint Ticket = OrderTicket();
if (Ticket == PrevTicket)
Alert("Hello World!");
PrevTicket = Ticket;
if (OrderSelect(i - 1, SELECT_BY_POS))
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
}
}
結果
2017.10.0601:28:05.885 TestTets EURUSD,M1: close #240725107 buy 1.00 EURUSD at 1.17121 at price 1.170992017.10.0601:28:05.775 TestTets EURUSD,M1: Alert: Hello World!2017.10.0601:28:05.775 TestTets EURUSD,M1: close #240725108 buy 1.00 EURUSD at 1.17121 at price 1.170992017.10.0601:28:05.673 TestTets EURUSD,M1: Alert: Hello World!2017.10.0601:28:05.673 TestTets EURUSD,M1: close #240725110 buy 1.00 EURUSD at 1.17121 at price 1.170992017.10.0601:28:05.578 TestTets EURUSD,M1: Alert: Hello World!2017.10.0601:28:05.578 TestTets EURUSD,M1: close #240725111 buy 1.00 EURUSD at 1.17121 at price 1.170992017.10.0601:28:05.480 TestTets EURUSD,M1: open #240725112 buy 1.00 EURUSD at 1.17121 ok
2017.10.0601:28:05.343 TestTets EURUSD,M1: open #240725111 buy 1.00 EURUSD at 1.17121 ok
2017.10.0601:28:05.253 TestTets EURUSD,M1: open #240725110 buy 1.00 EURUSD at 1.17121 ok
2017.10.0601:28:05.138 TestTets EURUSD,M1: open #240725108 buy 1.00 EURUSD at 1.17121 ok
2017.10.0601:28:05.035 TestTets EURUSD,M1: open #240725107 buy 1.00 EURUSD at 1.17121 ok
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
// Советник будет алертовать, если OrderSelect соседних индексов выберет один и тот же ордерconstbool Init = EventSetMillisecondTimer(1);
voidOnTimer()
{
int PrevTicket = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
{
constint Ticket = OrderTicket();
if (Ticket == PrevTicket)
Alert("Hello World!");
PrevTicket = Ticket;
Sleep(1); // 1 миллисекунда - это много или мало?
}
}
スクリプトの起動
#property strictvoidOnStart()
{
// Открыли позицииfor (int i = 0; i < 25; i++)
OrderSend(_Symbol, OP_BUY, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 100, 0, 0);
int Tickets[];
constint Total = OrdersTotal();
ArrayResize(Tickets, Total);
for (int i = 0; i < Total; i++)
if (OrderSelect(i, SELECT_BY_POS))
Tickets[i] = OrderTicket();
// Закрыли позицииfor (int i = 0; i < Total; i++)
OrderClose(Tickets[i], 1, SymbolInfoDouble(_Symbol, SYMBOL_BID), 100);
}
// Возращает количество ордеров данного символаint AmountOrders( conststring &Symb )
{
int Res = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS) && (OrderSymbol() == Symb))
Res++;
return(Res);
}
そんな複雑な話だったっけ?DCはスプレッドと手数料で儲け、プログラマーはコードを書いて儲ける。
あるトレーダーは、スプレッドと手数料を節約しよう(なるべく払わない)と言っています。
相手のトレーダーは、「お金のためにコードを書くのは卑怯だ(できればお金を払わない)」と言っています。
二人とも自分の財布は自分で管理する。それぞれ違いはないようですが...。
プログラマーであるあなただけが、前者を支持し、後者は間違っていると証明して反論しているのです。もっと安いプログラマを探したいトレーダーの気持ちもわかります。また、より良い取引条件を求めるトレーダーも理解できます。何が問題なのか?お金を貯めたいと思うことの何がいけないのでしょうか。
しかし、ここでは話が別です。注文に対してより効果的に働くようなアルゴリズムを自分で考え、それによってシステムの利益を上げること、それが優れた開発者であることを意味します。私の考えでは、数pipsを無視できるのは、アイデアの大まかなテストの段階だけです。
もっと安いプログラマを探したいというトレーダーの気持ちもわかります。また、より良い取引条件を求めるトレーダーも理解できます。何が問題なのか?お金を貯めたいと思うことの何がいけないのでしょうか。
しかし、ここでは話が別です。注文に対してより効果的に働くようなアルゴリズムを自分で考え、それによってシステムの利益を上げること、それが優れた開発者であることを意味します。数pipsをおろそかにできるのは、アイデアを大まかに検証している段階だけだと思います。
ファインそして、もっと無料で書きたいという消極的な気持ちも、なぜかよくわかります。こちらも問題なし...。
一般的に、私はお金を節約しようとすることに反対はしませんが、狂気とまではいきません。取引の頭でスプレッドに貯金をつけるのは無理がある...。
一般的に節約を心がけるのは構わないが、非常識とまではいかない。スプレッドの節約を取引の中心に据えてはいけない...。
計算すれば、そんなにおかしなことではないんです。でも、説得するつもりはありません。
計算すれば、そんな馬鹿なことはない。でも、説得するつもりはありません。
コストではなく、利益を計算しなければならない。
コストを節約すれば、赤字になるのは簡単なことです。もし、TSが経費を負担するように設計されていても、利益が出るのであれば、これは良いTSであり、違うシナリオでは、損失を出すかもしれないからです。
実は、入賞者の審査はありません!(笑
7ページ目から現在のページは別のトピックに移動して(「さらなる議論はこちら」みたいなリンクでもいい)、このスレッドで作られたものを続けることはできないのでしょうか?
コストではなく、利益を計算しなければならない。
コストを節約すると、赤字になりやすい。TSが経費がかかるように設計されているが、同時に収入も得られるのであれば、別のシナリオでは赤字になるかもしれないので、良いTSであると言える。
そして、一般的に勝者は判断されない!
このコメントの意味がわからない。
超高収益ストラテジーの手数料の大きさは重要でないということでしょうか。
EURUSDとUSDJPYの注文をランダムに5つずつ出してみましょう。さて、AmountOrdersの無難なコードを見て、次のようなシナリオを想像してみましょう。
以下は、その確認です。
結果
オーダーカウントの無害なループで同じチケットが2回出るかもしれないのです
何の変哲もないオーダーカウントのサイクルで、同じチケットが2回出てしまうこともあるのです
疑問を解消するために、次のことを行ってください。
Expert Advisorのインストール
スクリプトの起動
そして、EAが異なる指標で同じ注文を選択していることを確認します。そして、これは取引ロジックを完全に失敗させることにつながります。
EAが異なる指標で同じ注文を選択した場合。そしてそれは、取引ロジックを完全に崩壊させることにつながるのです。
ということで、本題の全体像です!注文のループをどのようにアレンジするか?例えば、このような関数を正しく書くにはどうしたらよいのでしょうか。
このスレッドは、検索サイクルが一時停止したときに、いくつかの繰り返し動作が必要であることを指定することから始まりました。ここでは、1ミリ秒程度の休止で効果を確認することができます。
ここまではそんな松葉づえ。
しかし、常に正しく動作するという確証はありません。
疑問を解消するために、次のことを行ってください。
Expert Advisorのインストール
スクリプトの実行
そして、EAが異なる指標で同じ注文を選択していることを確認します。そして、これは取引ロジックを完全に失敗させることにつながります。
変更しました
アラートが出ないようにスクリプトを変更しました。