int start()
{
//----
if (iOpen(NULL,5,0)-Bid>Delta*Point) //Цена упала больше Delta пунктов
{
OrderSend(Symbol(),OP_BUY,Ask,5,0,Ask+TakeProfit*Point,0);
}
if (iOpen(NULL,5,0)-Bid<Delta*Point) //Цена выросла больше Delta пунктов
{
OrderSend(Symbol(),OP_SELL,Ask,5,0,Ask+TakeProfit*Point,0);
}
//----
return(0);
}
OrderSend(Symbol(),OP_SELL,Ask,5,0,Ask+TakeProfit*Point,0);
Эту строку вытащил из другого эксперта. А что означают в ней цифры 5 и 0?
//+------------------------------------------------------------------+
bool IsCondition()
{
bool result=true;
string field=" ";
string msg;
string title="Ошибка"; if (AccountNumber()>0)title=AccountNumber()+": "+title;
if (!IsConnected())
{
msg=msg+"Связь с сервером отсутствует"+field;
result=false;
}
if (!IsTradeAllowed())
{
if (!result) msg=msg+"\n";
msg=msg+"Торговля запрещена"+field;
result=false;
}
if (!result) MessageBox(msg,title,MB_OK|MB_ICONERROR);
return(result);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void ShowError()
{
string description;
int err=GetLastError();
switch(err)
{
case 0: return;
case 1: description="Нет ошибки, но результат неизвестен"; break;
case 2: description="Общая ошибка"; break;
case 3: description="Неправильные параметры"; break;
case 4: description="Торговый сервер занят"; break;
case 5: description="Старая версия клиентского терминала"; break;
case 6: description="Нет связи с торговым сервером"; break;
case 7: description="Недостаточно прав"; break;
case 8: description="Слишком частые запросы"; break;
case 9: description="Недопустимая операция нарушающая функционирование сервера"; break;
case 64: description="Счет заблокирован"; break;
case 65: description="Неправильный номер счета"; break;
case 128: description="Истек срок ожидания совершения сделки"; break;
case 129: description="Неправильная цена"; break;
case 130: description="Неправильные стопы"; break;
case 131: description="Неправильный объем"; break;
case 132: description="Рынок закрыт"; break;
case 133: description="Торговля запрещена"; break;
case 134: description="Недостаточно денег для совершения операции"; break;
case 135: description="Цена изменилась"; break;
case 136: description="Нет цен"; break;
case 137: description="Брокер занят"; break;
case 138: description="Новые цены"; break;
case 139: description="Ордер заблокирован и уже обрабатывается"; break;
case 140: description="Разрешена только покупка"; break;
case 141: description="Слишком много запросов"; break;
case 145: description="Модификация запрещена, так как ордер слишком близок к рынку"; break;
case 146: description="Подсистема торговли занята"; break;
case 147: description="Использование даты истечения ордера запрещено брокером"; break;
default : description="Неизвестная ошибка"; break;
}
string field=" ";
string msg="Ошибка #"+err+" "+description+field;
string title="Ошибка"; if (AccountNumber()>0)title=AccountNumber()+": "+title;
MessageBox(msg,title,MB_OK|MB_ICONERROR);
}
// End
//+------------------------------------------------------------------+
if (iOpen(NULL,5,0)-Bid>Delta*Point) //Цена упала больше Delta пунктов
{
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"My order #",MagicNumber,0,Green);
}
if (iOpen(NULL,5,0)-Bid<Delta*Point) //Цена выросла больше Delta пунктов
{
ticket=OrderSend(Symbol(),OP_SELL,1,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"My order #",MagicNumber,0,Green);
}
//----
return(0);
}
//+------------------------------------------------------------------+
int start() { //---- if (iOpen(NULL,5,0)-Bid>Delta*Point) //Цена упала больше Delta пунктов { OrderSend(Symbol(),OP_BUY,Ask,5,0,Ask+TakeProfit*Point,0); } if (iOpen(NULL,5,0)-Bid<Delta*Point) //Цена выросла больше Delta пунктов { OrderSend(Symbol(),OP_SELL,Ask,5,0,Ask+TakeProfit*Point,0); } //---- return(0); }どうしたんですか?
//+------------------------------------------------------------------+ //| Expert-000001.mq4 | //| Copyright © 2008, salesman*** | //| http://www.forexgrand.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, salesman***" #property link "http://www.forexgrand.ru" extern int StopLoss=12; // Stop Loss extern int TakeProfit=3; // Take Profit extern int Percent=100; // Объем сделки в % extern int Delta=30; // Сигнал приказа в пунктах extern string _Comment = "Money-money-money"; // Комментарий к ордеру extern int MagicNumber =55555; // Order ID //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if (iOpen(NULL,5,0)-Bid>Delta*Point) //Цена упала больше Delta пунктов { OrderSend(Symbol(),OP_BUY,Ask,5,0,Ask*Point,0); } if (iOpen(NULL,5,0)-Bid<Delta*Point) //Цена выросла больше Delta пунктов { OrderSend(Symbol(),OP_SELL,Ask,5,0,Ask*Point,0); } //---- return(0); } //+------------------------------------------------------------------+FunctionOrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
パラメータ: シンボル - 取引される金融商品の名前。
cmd - 取引の操作。取引操作の値のいずれかを指定することができる。
volume - ロットの数です。
price - 始値です。slippage - 成行注文(買いまたは売り注文)に対して許容される最大価格偏差。
ストップロス - 損失に達したときにポジションを閉じるための価格(損失がない場合は0)。
Takeprofit - 収益性のレベルに達したときにポジションを閉じるための価格(収益性のレベルがない場合は0)。
comment - オーダーコメントテキスト.コメントの最後の部分は、取引サーバーで変更することができます。
magic - オーダーのマジックナンバー.ユーザー定義識別子として使用できる。
expiration - 保留注文の有効期限。
arrow_color - チャート上の開始矢印の色.パラメータがない場合、またはその値がCLR_NONEの場合、チャート上にオープニングの矢印は表示されません。
どこにあるんですか?- OrderSend の代わりに、いくつかのフラグメントがあります。
そして、ここでのAsk*Pointの 計算結果はどうなっているのでしょうか。
???以下はコードの全文です。
//+------------------------------------------------------------------+ //| Expert-000001.mq4 | //| Copyright © 2008, salesman*** | //| http://www.forexgrand.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, salesman***" #property link "http://www.forexgrand.ru" extern int StopLoss=12; // Stop Loss extern int TakeProfit=3; // Take Profit extern int Percent=70; // Объем сделки в % extern int Slippage = 3; // Максимальное отклонение от запрошенной цены extern int Delta=2; // Сигнал приказа в пунктах extern string _Comment = "Money-money-money"; // Комментарий к ордеру extern int MagicNumber =55555; // Order ID int ticket; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if (iOpen(NULL,5,0)-Bid>Delta*Point) //Цена упала больше Delta пунктов { ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"My order #",MagicNumber,0,Green); } if (iOpen(NULL,5,0)-Bid<Delta*Point) //Цена выросла больше Delta пунктов { ticket=OrderSend(Symbol(),OP_SELL,1,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"My order #",MagicNumber,0,Green); } //---- return(0); } //+------------------------------------------------------------------+簡単なテストとして、Delta=2 に設定しました。extern int Delta=2;
これを実装すれば、エラーがわかるかもしれません。
//+------------------------------------------------------------------+ bool IsCondition() { bool result=true; string field=" "; string msg; string title="Ошибка"; if (AccountNumber()>0)title=AccountNumber()+": "+title; if (!IsConnected()) { msg=msg+"Связь с сервером отсутствует"+field; result=false; } if (!IsTradeAllowed()) { if (!result) msg=msg+"\n"; msg=msg+"Торговля запрещена"+field; result=false; } if (!result) MessageBox(msg,title,MB_OK|MB_ICONERROR); return(result); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void ShowError() { string description; int err=GetLastError(); switch(err) { case 0: return; case 1: description="Нет ошибки, но результат неизвестен"; break; case 2: description="Общая ошибка"; break; case 3: description="Неправильные параметры"; break; case 4: description="Торговый сервер занят"; break; case 5: description="Старая версия клиентского терминала"; break; case 6: description="Нет связи с торговым сервером"; break; case 7: description="Недостаточно прав"; break; case 8: description="Слишком частые запросы"; break; case 9: description="Недопустимая операция нарушающая функционирование сервера"; break; case 64: description="Счет заблокирован"; break; case 65: description="Неправильный номер счета"; break; case 128: description="Истек срок ожидания совершения сделки"; break; case 129: description="Неправильная цена"; break; case 130: description="Неправильные стопы"; break; case 131: description="Неправильный объем"; break; case 132: description="Рынок закрыт"; break; case 133: description="Торговля запрещена"; break; case 134: description="Недостаточно денег для совершения операции"; break; case 135: description="Цена изменилась"; break; case 136: description="Нет цен"; break; case 137: description="Брокер занят"; break; case 138: description="Новые цены"; break; case 139: description="Ордер заблокирован и уже обрабатывается"; break; case 140: description="Разрешена только покупка"; break; case 141: description="Слишком много запросов"; break; case 145: description="Модификация запрещена, так как ордер слишком близок к рынку"; break; case 146: description="Подсистема торговли занята"; break; case 147: description="Использование даты истечения ордера запрещено брокером"; break; default : description="Неизвестная ошибка"; break; } string field=" "; string msg="Ошибка #"+err+" "+description+field; string title="Ошибка"; if (AccountNumber()>0)title=AccountNumber()+": "+title; MessageBox(msg,title,MB_OK|MB_ICONERROR); } // End //+------------------------------------------------------------------+なぜかうまくいかない......。
以下はコードの全文です。
if (iOpen(NULL,5,0)-Bid>Delta*Point) //Цена упала больше Delta пунктов { ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"My order #",MagicNumber,0,Green); } if (iOpen(NULL,5,0)-Bid<Delta*Point) //Цена выросла больше Delta пунктов { ticket=OrderSend(Symbol(),OP_SELL,1,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"My order #",MagicNumber,0,Green); } //---- return(0); } //+------------------------------------------------------------------+実は、買いのOrderSendと売りのOrderSendは少し違う書き方をしています。アスク価格で買い、ビッド価格で売るからです。そして、ストップ高によるクロージングも...。あなたとともに - すべて同じ価格で ...また、lot=1はここで働くことを想定しています。預金はこのサイズに該当するのでしょうか?また、ログにはどのように書かれているのでしょうか。なぜうまくいかないのでしょうか?
BidとAskの違いもわからないし、ショートポジションとロングポジションの違いもわからない。ストップロスやテイクプロフィットが何なのか分かっていない。すでに書いてあることが理解できていない。直感でコーディングしようとしているのでしょう。誰が助けてくれるんだ? 基本を学ぶ。すべての疑問にお答えします。教科書を引用する意味がわからない。
なぜかうまくいかない......。
簡単なテストとして、Delta=2 に設定しました。
extern int Delta=2;
何のために?テスターの使い方をご存知ですか?
昔、知り合いがいた。彼は1年間FXの取引をしていたが、まだロングポジションとは市場に長くとどまるものだと思っていた。そして、ショートポジションとは、「クソみたいなピップ...」というやつだ!
いかがでしょうか?