#define KEY_NUMPAD_5 12 #define KEY_LEFT 37 #define KEY_UP 38 #define KEY_RIGHT 39 #define KEY_DOWN 40 #define KEY_NUMLOCK_DOWN 98 #define KEY_NUMLOCK_LEFT 100 #define KEY_NUMLOCK_5 101 #define KEY_NUMLOCK_RIGHT 102 #define KEY_NUMLOCK_UP 104 //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ intOnInit() { //--- Print("Запущен эксперт с именем ",MQLInfoString(MQL_PROGRAM_NAME)); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа long constdouble& dparam, // параметр события типа double conststring& sparam) // параметр события типа string { //--- нажатие левой кнопкой мышки на графике if(id==CHARTEVENT_CLICK) { Print("Координаты щелчка мышки на графике: x = ",lparam," y = ",dparam); } //--- нажатие мышкой на графическом объекте if(id==CHARTEVENT_OBJECT_CLICK) { Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'"); } //--- нажатие кнопки на клавиатуре if(id==CHARTEVENT_KEYDOWN) { switch(int(lparam)) { case KEY_NUMLOCK_LEFT: Print("Нажата KEY_NUMLOCK_LEFT"); break; case KEY_LEFT: Print("Нажата KEY_LEFT"); break; case KEY_NUMLOCK_UP: Print("Нажата KEY_NUMLOCK_UP"); break; case KEY_UP: Print("Нажата KEY_UP"); break; case KEY_NUMLOCK_RIGHT: Print("Нажата KEY_NUMLOCK_RIGHT"); break; case KEY_RIGHT: Print("Нажата KEY_RIGHT"); break; case KEY_NUMLOCK_DOWN: Print("Нажата KEY_NUMLOCK_DOWN"); break; case KEY_DOWN: Print("Нажата KEY_DOWN"); break; case KEY_NUMPAD_5: Print("Нажата KEY_NUMPAD_5"); break; case KEY_NUMLOCK_5: Print("Нажата KEY_NUMLOCK_5"); break; default: Print("Нажата какая-то неперечисленная клавиша"); } ChartRedraw(); } //--- удален объект if(id==CHARTEVENT_OBJECT_DELETE) { Print("Удален объект с именем ",sparam); } //--- создан объект if(id==CHARTEVENT_OBJECT_CREATE) { Print("Создан объект с именем ",sparam); } //--- перемещен объект или изменены координаты точек привязки if(id==CHARTEVENT_OBJECT_DRAG) { Print("Изменение точек привязки объекта с именем ",sparam); } //--- изменен текст в поле ввода графического объекта Edit if(id==CHARTEVENT_OBJECT_ENDEDIT) { Print("Изменен текст в объекте Edit ",sparam); } }
皆さん、ロボットを教えてください。 マーティンを使っているもの。
例えば、注文を出したらロボットが動き続けるとか...。
皆さん、ロボットを提案してください。 マーティンを使っているものです。
例えば、注文を出したらロボットが動き続けるとか...。
こんにちは。イベントの仕組みを考えているところです。チャートからオブジェクトを削除するイベント(CHARTEVENT_OBJECT_DELETE)を動作させたことがありません。マウス操作とオブジェクトリストによる削除の両方が可能です。ビルド600。
何が問題なのか、教えてください。
ヘルプにあるコードを使っています
#define KEY_NUMPAD_5 12
#define KEY_LEFT 37
#define KEY_UP 38
#define KEY_RIGHT 39
#define KEY_DOWN 40
#define KEY_NUMLOCK_DOWN 98
#define KEY_NUMLOCK_LEFT 100
#define KEY_NUMLOCK_5 101
#define KEY_NUMLOCK_RIGHT 102
#define KEY_NUMLOCK_UP 104
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Print("Запущен эксперт с именем ",MQLInfoString(MQL_PROGRAM_NAME));
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, // идентификатор события
const long& lparam, // параметр события типа long
const double& dparam, // параметр события типа double
const string& sparam) // параметр события типа string
{
//--- нажатие левой кнопкой мышки на графике
if(id==CHARTEVENT_CLICK)
{
Print("Координаты щелчка мышки на графике: x = ",lparam," y = ",dparam);
}
//--- нажатие мышкой на графическом объекте
if(id==CHARTEVENT_OBJECT_CLICK)
{
Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
}
//--- нажатие кнопки на клавиатуре
if(id==CHARTEVENT_KEYDOWN)
{
switch(int(lparam))
{
case KEY_NUMLOCK_LEFT: Print("Нажата KEY_NUMLOCK_LEFT"); break;
case KEY_LEFT: Print("Нажата KEY_LEFT"); break;
case KEY_NUMLOCK_UP: Print("Нажата KEY_NUMLOCK_UP"); break;
case KEY_UP: Print("Нажата KEY_UP"); break;
case KEY_NUMLOCK_RIGHT: Print("Нажата KEY_NUMLOCK_RIGHT"); break;
case KEY_RIGHT: Print("Нажата KEY_RIGHT"); break;
case KEY_NUMLOCK_DOWN: Print("Нажата KEY_NUMLOCK_DOWN"); break;
case KEY_DOWN: Print("Нажата KEY_DOWN"); break;
case KEY_NUMPAD_5: Print("Нажата KEY_NUMPAD_5"); break;
case KEY_NUMLOCK_5: Print("Нажата KEY_NUMLOCK_5"); break;
default: Print("Нажата какая-то неперечисленная клавиша");
}
ChartRedraw();
}
//--- удален объект
if(id==CHARTEVENT_OBJECT_DELETE)
{
Print("Удален объект с именем ",sparam);
}
//--- создан объект
if(id==CHARTEVENT_OBJECT_CREATE)
{
Print("Создан объект с именем ",sparam);
}
//--- перемещен объект или изменены координаты точек привязки
if(id==CHARTEVENT_OBJECT_DRAG)
{
Print("Изменение точек привязки объекта с именем ",sparam);
}
//--- изменен текст в поле ввода графического объекта Edit
if(id==CHARTEVENT_OBJECT_ENDEDIT)
{
Print("Изменен текст в объекте Edit ",sparam);
}
}
フォーラムのメンバー親愛なる、理解するために私を助けて、iは現在のろうそく、なぜi-2は、線を描きたくない、テスターは、実行時に停止します。
フォーラムのメンバー親愛なる、理解するために私を助けて、iは現在のろうそく、なぜi-2は、線を描きたくない、テスターは、実行時に停止します。
もし、iから2本前の線を引こうとするなら、ローソク足の番号は右から左へ、0-現在のバーだから、引き算ではなく、2足す必要があるのです。
まだ存在しないバー(-2)に線を引こうとすると、配列のインデックスが 負になることはありえません。そのためには、必要なバーの時間を計算します。例えば、Time[0]+2*(Time[0]-Time[1])です。
もし、i番目のローソク足から2本先の線を引きたいのであれば、ローソク足の番号は右から左へ、0-現在のバーだから、引き算ではなく、2足す必要があるのです。
まだ存在しないバー(-2)に線を引こうとすると、配列のインデックスが負になることはありえません。そ のためには、Time[0]+2*(Time[0]-Time[1])のように、欲しいバーの時間を計算 する必要があります。
ありがとうございました。存在しないバー(-2)に線を引くべきでした。
ありがとうございました。存在しないバー(-2)に線を引くべきでした。
そうでなければ、なぜ価格があるのでしょう。なんといっても、対象が時間軸ですからね。
どうもありがとうございます。線は存在しないバー(-2)の上に構築されているはずです。
お願い
もうひとつの "美しい "ソリューションがここにあります。
Time[0]+Period()*60*2 //60 переводим в секунды, 2 кол-во баров
皆さん、手伝ってください。注文を開始する必要がある。
input int TakeProfit = 30;
input double StartLot = 0.01;
input double summ=false; //true, открываем позиции в обе стороны
input int Slippage = 30; // установим значение проскальзывания
void OnTick()
{
if(summ) { // открываем однупозицию, покупка.
OrderSend(
Symbol(),
OP_BUY,
StartLot,
NormalizeDouble(NormalizeDouble(Ask,_Digits),_Digits),
Slippage,
0,
TakeProfit,
WindowExpertName()+" "+(string)0,
0,
0,
clrBlue
);
}else{
OrderSend(
Symbol(),
OP_BUY,
StartLot,
NormalizeDouble(NormalizeDouble(Ask,_Digits),_Digits),
Slippage,
0,
TakeProfit,
WindowExpertName()+" "+(string)0,
0,
0,
clrBlue
);
OrderSend(
Symbol(),
OP_SELL,
StartLot,
NormalizeDouble(NormalizeDouble(Bid,_Digits),_Digits),
Slippage,
0,
TakeProfit,
WindowExpertName()+" "+(string)0,
0,
0,
clrBlue
);
}
}
うまくいきません、どうしたのでしょうか?
ポジションを 開くだけのコードを書く。それだけでいいんです...。
皆さん、手伝ってください。注文を開始する必要がある。
うまくいきません、どうしたのでしょうか?
ポジションを開くだけのコードを書く。これだけあれば大丈夫...。
注文送信 時にTakeProfitが正しく指定されていない。nano-pipsの利益の数ではなく、価格を指定する必要があります。Ask+TakeProfit*Point() に修正 Ask, Bid は正規化する必要はない...。
OrderSend(
Symbol(),
OP_BUY,
StartLot,
Ask,
Slippage,
0,
Ask+TakeProfit*Point(),
WindowExpertName()+" "+(string)0,
0,
0,
clrBlue
);