#property copyright"Влад Сергеев для mmgp"#property version"1.00"#property strict#property script_show_inputsinputint orders = 4; //всего ордеров в серии inputbool buy = true; //флаг разрешающий/запрещающий покупки inputbool sell = false; //флаг разрешающий/запрещающий продажи inputint magic = 100500; //уникальный номер для ордеров, открываемых этим скриптом inputdouble lot = 0.01; //объем каждого ордера серии inputint tp = 100; //тейк профит, в пунктах inputint sl = 100; //стоп лосс, в пунктах inputint slip = 2; //допустимое проскальзывание на открытии, в пунктах (для ECN, где открытие по рынку - игнор) //+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnStart()
{
int i=0; // для чего эта переменная
int ticket=0;
if(buy)
{
while(i<orders) // здесь эта переменная используется чтобы сравнивать ордера или для чего
{
RefreshRates(); // если убрать эту функцию коду хуже не становится
ticket=OrderSend(Symbol(),OP_BUY,lot,NormalizeDouble(Ask,Digits),slip,0,0,"",magic,0,clrBlue); //здесь понятно
if(ticket!=-1) // эта строчка тоже не понятна
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) // функция для выбора ордера это логично но тоже не понятно как ей пользоваться
{
OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl*Point,Digits),NormalizeDouble(OrderOpenPrice()+tp*Point,Digits),0,clrBlue);
// эту строчку тоже хотел бы чтобы объяснили
}
}
i++; // что увеличивается на оду единицу это относится к магическому номеру ордера чтобы программа понимала что у неё есть ордера
}
}
i=0;
if(sell) // прошлая запись была для покупак эта для продаж
{
while(i<orders)
{
RefreshRates();
ticket=OrderSend(Symbol(),OP_SELL,lot,NormalizeDouble(Bid,Digits),slip,0,0,"",magic,0,clrRed);
if(ticket!=-1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl*Point,Digits),NormalizeDouble(OrderOpenPrice()-tp*Point,Digits),0,clrRed);
}
}
i++;
}
}
}
//+------------------------------------------------------------------+
売り注文がAsk価格で決済される
ちょっと戸惑いますね〜。コードのどこにバグがあるのか指をさすんだ!!!(ログにはORDER CLOSE ERROR 4108とあります。) Thanks in advance!
こんにちは、コノヤロー。一年で一番大変な日を過ごしてしまったのでしょうか?本題に入りますか?;=).
EAを描きましたが、全て良好です。しかし、私が理解しているMQLは、MT4環境で動作します。取引所と直接連携するソフトと連携してほしい。他にMQLコンパイラはありますか?そうでない場合、どのような言語でMQLを書き直せば よいのでしょうか?
一区切りついたからには、続けなければならない。
休みはないです。EAが注文を「見れない」理由は何ですか?サーバーと パソコンの時間が違うのですが、もしかしてこれが原因?
時間は人それぞれ。遠くから急がずに始める。1.OrdersTotal関数で 得られるものを確認します。この値は履歴の設定に依存します:今日、過去3日、先週、・・・お好みで調整してください。 2.次にサイクルを作成し、Alertを 含むすべての注文を出力します。これはデバッグと呼ばれ、プログラマーの仕事の中でも非常に重要な部分です。コードを書くことよりも大切なこと。
時間は人それぞれ。遠くから急がずに始める。1.OrdersTotal関数で 得られるものを確認します。この値は履歴の設定に依存します:今日、過去3日、先週、...お好みで調整してください。これはデバッグと呼ばれ、プログラマーの仕事の中でも非常に重要な部分です。コードを書くことよりも大切なこと。
ありがとうございました。
エキスパートアドバイザーのコードに、SLを設定して一度に3つのトレードを開く方法を教えてください。
以下は私の状態です。
OrdersTotal() 関数を使用するようにアドバイスされましたが、私の場合、それは合いません。このように持っています。
コンパイルはうまくいき、エラーも出ませんが、私の場合、適切ではありません。
次のようなコードが見つかりました。
使えるのかもしれないが、文字列の意味がわからない。このコードを私の条件に合うように書き換えた場合、使用することができますか?
エキスパートアドバイザーのコードに、SLを設定して一度に3つのトレードを開く方法を教えてください。
以下は私の状態です。
OrdersTotal() 関数を使用するようにアドバイスされましたが、私の場合、それは合いません。こんな感じで持っています。
コンパイルはうまくいき、エラーも出ませんが、私の場合、適切ではありません。
次のようなコードが見つかりました。
使えるのかもしれないが、文字列の意味がわからない。このコードを自分の条件に合うように書き直せば使えるのでしょうか?
この方法で試してみてください
pos=0; //オーダーカウンタ
for(int i=OrdersTotal()-1;i>=0;i--) //成行注文を読み込む
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;// 成行注文から選択する。
{
if (OrderSymbol()!=Symbol()&&OrderMagicNumber()!=Magic) continue;//EA注文のみを選択(Magicがある場合、任意の通貨ペアで取引される場合)
pos++; //選択されていれば、posを1つ増やす。
}
}
EAのコードに、SLを設定できる3つのトレードを同時に開く方法を教えていただけませんか?