アスク! - ページ 63 1...565758596061626364656667686970...182 新しいコメント proverbs 2007.06.15 01:30 #621 OK ピボット計算がわかりました。ありがとうございました。 今直面している問題は、正しい価格の場所で保留中の注文 を正しく開いたとき、価格行動が1ピップ動くたびに保留中の注文を何度も開き続けることです。 なぜこのような現象が起こるのか、今後も調査を続けますが、私の行っているロジックエラーについて、ヒントやヘルプを頂ければと思います。 いつもありがとうございます。 extern int look_price_hour = 1; // Change for your time zone (my is +1 Hour). Should be 9AM London time. extern int look_price_min = 35; // Offset in minutes when to look on price. extern int close_hour = 12; // Close all orders after this hour bool use_close_hour = true; // set it to false to ignore close_hour int take_profit = 20; extern int Currency_Spread = 4; int open_long = 21; int open_short = 21; int stop_long = 30; int stop_short = 30; extern int slippage = 0;// Put what your brooker requires extern double lots = 0.20; // Position size extern int magic = 123; bool clear_to_send = true; void ReportStrategy() { int totalorders = HistoryTotal(); double StrategyProfit = 0.0; double StrategyProfitOpen = 0.0; int StrategyOrders = 0; int StrategyOrdersOpen = 0; for(int j=0; j<totalorders;j++) { if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) && (OrderMagicNumber() == magic)) { if((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { StrategyOrders++; StrategyProfit += OrderProfit(); } } } totalorders = OrdersTotal(); for(j=0; j<totalorders;j++) { if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) && (OrderMagicNumber() == magic)) { if((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { StrategyOrdersOpen++; StrategyProfitOpen += OrderProfit(); } } } Comment("Daily20Pip EA Executed ", StrategyOrders,"+",StrategyOrdersOpen, " trades with ", StrategyProfit,"+", StrategyProfitOpen," = ",StrategyProfit+StrategyProfitOpen," of profit\n", "Server hour: ", TimeHour(CurTime()), " Local hour: ", TimeHour(LocalTime())); return; } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- ReportStrategy(); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { ReportStrategy(); if(Hour() >= close_hour && use_close_hour){ // we are after closing time int totalorders = OrdersTotal(); for(int j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red); if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red); if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket()); } } return(0); } if(Hour() == look_price_hour && Minute() >= look_price_min && clear_to_send){ // Probably I need to close any old positions first: totalorders = OrdersTotal(); for(j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red); if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red); if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket()); } } } double PIVOT; PIVOT = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1))/3; // Send orders: OrderSend(Symbol(), OP_BUYSTOP, lots, PIVOT+(open_long+Currency_Spread)*Point, // Spread included slippage, PIVOT+((open_long+Currency_Spread)-stop_long)*Point, PIVOT+((open_long+Currency_Spread)+take_profit)*Point, NULL, magic, 0, FireBrick); OrderSend(Symbol(), OP_SELLSTOP, lots, PIVOT-open_short*Point, slippage, PIVOT-(open_short-stop_short)*Point, PIVOT-(open_short+take_profit)*Point, NULL, magic, 0, FireBrick); clear_to_send = false; // mark that orders are sent if(!clear_to_send){ // there are active orders int long_ticket = -1; int short_ticket = -1; bool no_active_order = true; totalorders = OrdersTotal(); for(j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUYSTOP) long_ticket = OrderTicket(); if(OrderType() == OP_SELLSTOP) short_ticket = OrderTicket(); if(OrderType() == OP_BUY || OrderType() == OP_SELL) // Active order no_active_order = false; } } if(short_ticket == -1 && long_ticket != -1) OrderDelete(long_ticket); if(long_ticket == -1 && short_ticket != -1) OrderDelete(short_ticket); if(long_ticket == -1 && short_ticket == -1 && no_active_order && Hour() != look_price_hour && Minute() >= look_price_min) clear_to_send = true; if(Hour() == (look_price_hour-1) && MathAbs(Minute() - look_price_min) < 10) clear_to_send = true; } //---- return(0); } Ask! コーディングの方法は? [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 proverbs 2007.06.15 03:57 #622 前回の投稿についてです。 clear_to_send = false;」が保留注文の 後に切り替わらないようです。何かアイデアはありますか? これは、ピボットを保留中の注文の参照ポイントにしたとたんに起こったことです。このロジックを解決できない場合は、インジケータからピボットを参照し、EAからそれを呼び出す方法を見つけようと思います。 何かアドバイスや援助があれば、感謝します。 ryanklefas 2007.06.15 04:16 #623 extern int look_price_hour = 1; // Change for your time zone (my is +1 Hour). Should be 9AM London time. extern int look_price_min = 35; // Offset in minutes when to look on price. extern int close_hour = 12; // Close all orders after this hour bool use_close_hour = true; // set it to false to ignore close_hour int take_profit = 20; extern int Currency_Spread = 4; int open_long = 21; int open_short = 21; int stop_long = 30; int stop_short = 30; extern int slippage = 0;// Put what your brooker requires extern double lots = 0.20; // Position size extern int magic = 123; bool clear_to_send = true; void ReportStrategy() { int totalorders = HistoryTotal(); double StrategyProfit = 0.0; double StrategyProfitOpen = 0.0; int StrategyOrders = 0; int StrategyOrdersOpen = 0; for(int j=0; j<totalorders;j++) { if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) && (OrderMagicNumber() == magic)) { if((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { StrategyOrders++; StrategyProfit += OrderProfit(); } } } totalorders = OrdersTotal(); for(j=0; j<totalorders;j++) { if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) && (OrderMagicNumber() == magic)) { if((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { StrategyOrdersOpen++; StrategyProfitOpen += OrderProfit(); } } } Comment("Daily20Pip EA Executed ", StrategyOrders,"+",StrategyOrdersOpen, " trades with ", StrategyProfit,"+", StrategyProfitOpen," = ",StrategyProfit+StrategyProfitOpen," of profit\n", "Server hour: ", TimeHour(CurTime()), " Local hour: ", TimeHour(LocalTime())); return; } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- ReportStrategy(); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { ReportStrategy(); if(Hour() >= close_hour && use_close_hour){ // we are after closing time int totalorders = OrdersTotal(); for(int j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red); if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red); if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket()); } } return(0); } if(Hour() == look_price_hour && Minute() >= look_price_min && clear_to_send){ // Probably I need to close any old positions first: totalorders = OrdersTotal(); for(j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red); if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red); if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket()); } } } double PIVOT; PIVOT = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1))/3; // Send orders: if (clear_to_send){ OrderSend(Symbol(), OP_BUYSTOP, lots, PIVOT+(open_long+Currency_Spread)*Point, // Spread included slippage, PIVOT+((open_long+Currency_Spread)-stop_long)*Point, PIVOT+((open_long+Currency_Spread)+take_profit)*Point, NULL, magic, 0, FireBrick); OrderSend(Symbol(), OP_SELLSTOP, lots, PIVOT-open_short*Point, slippage, PIVOT-(open_short-stop_short)*Point, PIVOT-(open_short+take_profit)*Point, NULL, magic, 0, FireBrick); clear_to_send = false; // mark that orders are sent } if(!clear_to_send){ // there are active orders int long_ticket = -1; int short_ticket = -1; bool no_active_order = true; totalorders = OrdersTotal(); for(j=0;j<totalorders;j++){ OrderSelect(j, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber() == magic){ if(OrderType() == OP_BUYSTOP) long_ticket = OrderTicket(); if(OrderType() == OP_SELLSTOP) short_ticket = OrderTicket(); if(OrderType() == OP_BUY || OrderType() == OP_SELL) // Active order no_active_order = false; } } if(short_ticket == -1 && long_ticket != -1) OrderDelete(long_ticket); if(long_ticket == -1 && short_ticket != -1) OrderDelete(short_ticket); if(long_ticket == -1 && short_ticket == -1 && no_active_order && Hour() != look_price_hour && Minute() >= look_price_min) clear_to_send = true; if(Hour() == (look_price_hour-1) && MathAbs(Minute() - look_price_min) < 10) clear_to_send = true; } //---- return(0); } このコードを試してみてください。 Ask! コーディングの方法は? [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 proverbs 2007.06.15 17:42 #624 リャンクレファス 。 この分野ではあなたは素晴らしい、ただただ素晴らしいです。 あなたの修正から行ったテストはうまくいきました。 なぜピボットロジックを追加すると、現在の "If "ロジックと干渉してしまうのかはよくわかりません。おそらく、ピボットのコードを別の場所に設置する必要があったのでしょう。しかし、保留中の注文 コードを分離した方法がわかり、今のところうまくいっています。 コード例を示す URL をありがとうございました。これは、私がプログラミングのスキルを向上させるための大きなリソースとなるでしょう。 ある問題を解決すると、別の問題が発生することがあるのが面白い/悔しいと思います。 現在の課題です。このコードでは、なぜ価格が5桁で、3桁でない場合にのみ注文を保留できるのか、その理由を知る必要があります。 例:1.1234はうまくいくが、1.12は1.123333はOrderSendの有効な価格ではないというエラーが出る。 そのため、GBP/USDでは動作しますが、USD/JPYでは動作しません。 お時間をいただき、ありがとうございました。 ryanklefas 2007.06.16 08:49 #625 proverbs: リャンクレファス,この分野では、あなたは素晴らしいです。 ありがとうございます。 あなたの問題については、次のとおりです。 ピボット値をorderSend関数に送る前に、NormalizeDouble関数で 正規化したことを確認してください。2番目のパラメータとして事前定義された値「Digits」を使用して、doubleを通貨に適した桁数に丸めてください。 ryanklefas 2007.06.16 08:52 #626 waaustin: 私の問題は、計算された値をどのように小数点以下の桁に丸めるかです。 normalizeDouble関数も 使えると思います。 また、MathFloor関数やMathCeiling関数を使用して同じことを実現しているコードも見たことがあります。 hellkkas 2007.06.16 09:04 #627 その他のヘルプ どなたか、この方法を教えてください。 ファイル: chart.gif 18 kb Sergey Golubev 2007.06.16 09:21 #628 hellkas: どなたか方法を教えてください。 このスレッドに関連していると思いますhttps://www.mql5.com/en/forum/176969 highway3000 2007.06.16 14:52 #629 コードでレベルの色を設定する レベル1 30を緑に、レベル2 70を赤に設定する方法を教えてください。 #プロパティ indicator_separate_window #property indicator_buffers 1 (インジケータバッファ1) #property indicator_color1 DodgerBlue (インジケーターカラー1) #property インジケータ_レベル1 30 #property indicator_level2 70 #property indicator_minimum 0 #property indicator_maximum 100 (インジケーターの最大値 よろしくお願いします。 ryanklefas 2007.06.16 21:44 #630 highway3000: レベル1 30をグリーンに、レベル2 70をレッドに設定する方法を教えてください。 #property indicator_separate_window#property インジケーターバッファー1#property indicator_color1 ドジャーブルー#property indicator_level1 30#property indicator_level2 70#property indicator_minimum 0#property indicator_maximum 100 です。 ありがとうございました。 MetaEditorのこの部分がお探しのものになるかと思います。 MQL4 Reference - Basics - Preprocessor -Controlling compilation(コンパイルの制御) 1...565758596061626364656667686970...182 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
OK ピボット計算がわかりました。ありがとうございました。
今直面している問題は、正しい価格の場所で保留中の注文 を正しく開いたとき、価格行動が1ピップ動くたびに保留中の注文を何度も開き続けることです。
なぜこのような現象が起こるのか、今後も調査を続けますが、私の行っているロジックエラーについて、ヒントやヘルプを頂ければと思います。
いつもありがとうございます。
extern int look_price_hour = 1; // Change for your time zone (my is +1 Hour). Should be 9AM London time.
extern int look_price_min = 35; // Offset in minutes when to look on price.
extern int close_hour = 12; // Close all orders after this hour
bool use_close_hour = true; // set it to false to ignore close_hour
int take_profit = 20;
extern int Currency_Spread = 4;
int open_long = 21;
int open_short = 21;
int stop_long = 30;
int stop_short = 30;
extern int slippage = 0;// Put what your brooker requires
extern double lots = 0.20; // Position size
extern int magic = 123;
bool clear_to_send = true;
void ReportStrategy()
{
int totalorders = HistoryTotal();
double StrategyProfit = 0.0;
double StrategyProfitOpen = 0.0;
int StrategyOrders = 0;
int StrategyOrdersOpen = 0;
for(int j=0; j<totalorders;j++)
{ if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) &&
(OrderMagicNumber() == magic))
{
if((OrderType() == OP_BUY) ||
(OrderType() == OP_SELL))
{
StrategyOrders++;
StrategyProfit += OrderProfit();
}
}
}
totalorders = OrdersTotal();
for(j=0; j<totalorders;j++)
{ if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) &&
(OrderMagicNumber() == magic))
{
if((OrderType() == OP_BUY) ||
(OrderType() == OP_SELL))
{
StrategyOrdersOpen++;
StrategyProfitOpen += OrderProfit();
}
}
}
Comment("Daily20Pip EA Executed ", StrategyOrders,"+",StrategyOrdersOpen, " trades with ", StrategyProfit,"+",
StrategyProfitOpen," = ",StrategyProfit+StrategyProfitOpen," of profit\n",
"Server hour: ", TimeHour(CurTime()), " Local hour: ", TimeHour(LocalTime()));
return;
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
ReportStrategy();
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
ReportStrategy();
if(Hour() >= close_hour &&
use_close_hour){
// we are after closing time
int totalorders = OrdersTotal();
for(int j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if(OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);
if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
OrderDelete(OrderTicket());
}
}
return(0);
}
if(Hour() == look_price_hour &&
Minute() >= look_price_min &&
clear_to_send){
// Probably I need to close any old positions first:
totalorders = OrdersTotal();
for(j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if(OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);
if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
OrderDelete(OrderTicket());
}
}
}
double PIVOT;
PIVOT = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1))/3;
// Send orders:
OrderSend(Symbol(),
OP_BUYSTOP,
lots,
PIVOT+(open_long+Currency_Spread)*Point, // Spread included
slippage,
PIVOT+((open_long+Currency_Spread)-stop_long)*Point,
PIVOT+((open_long+Currency_Spread)+take_profit)*Point,
NULL,
magic,
0,
FireBrick);
OrderSend(Symbol(),
OP_SELLSTOP,
lots,
PIVOT-open_short*Point,
slippage,
PIVOT-(open_short-stop_short)*Point,
PIVOT-(open_short+take_profit)*Point,
NULL,
magic,
0,
FireBrick);
clear_to_send = false; // mark that orders are sent
if(!clear_to_send){ // there are active orders
int long_ticket = -1;
int short_ticket = -1;
bool no_active_order = true;
totalorders = OrdersTotal();
for(j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUYSTOP)
long_ticket = OrderTicket();
if(OrderType() == OP_SELLSTOP)
short_ticket = OrderTicket();
if(OrderType() == OP_BUY ||
OrderType() == OP_SELL) // Active order
no_active_order = false; }
}
if(short_ticket == -1 && long_ticket != -1)
OrderDelete(long_ticket);
if(long_ticket == -1 && short_ticket != -1)
OrderDelete(short_ticket);
if(long_ticket == -1 && short_ticket == -1 && no_active_order &&
Hour() != look_price_hour && Minute() >= look_price_min)
clear_to_send = true;
if(Hour() == (look_price_hour-1) &&
MathAbs(Minute() - look_price_min) < 10)
clear_to_send = true;
}
//----
return(0);
}
前回の投稿についてです。
clear_to_send = false;」が保留注文の 後に切り替わらないようです。何かアイデアはありますか?
これは、ピボットを保留中の注文の参照ポイントにしたとたんに起こったことです。このロジックを解決できない場合は、インジケータからピボットを参照し、EAからそれを呼び出す方法を見つけようと思います。
何かアドバイスや援助があれば、感謝します。
extern int look_price_hour = 1; // Change for your time zone (my is +1 Hour). Should be 9AM London time.
extern int look_price_min = 35; // Offset in minutes when to look on price.
extern int close_hour = 12; // Close all orders after this hour
bool use_close_hour = true; // set it to false to ignore close_hour
int take_profit = 20;
extern int Currency_Spread = 4;
int open_long = 21;
int open_short = 21;
int stop_long = 30;
int stop_short = 30;
extern int slippage = 0;// Put what your brooker requires
extern double lots = 0.20; // Position size
extern int magic = 123;
bool clear_to_send = true;
void ReportStrategy()
{
int totalorders = HistoryTotal();
double StrategyProfit = 0.0;
double StrategyProfitOpen = 0.0;
int StrategyOrders = 0;
int StrategyOrdersOpen = 0;
for(int j=0; j<totalorders;j++)
{ if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) &&
(OrderMagicNumber() == magic))
{
if((OrderType() == OP_BUY) ||
(OrderType() == OP_SELL))
{
StrategyOrders++;
StrategyProfit += OrderProfit();
}
}
}
totalorders = OrdersTotal();
for(j=0; j<totalorders;j++)
{ if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) &&
(OrderMagicNumber() == magic))
{
if((OrderType() == OP_BUY) ||
(OrderType() == OP_SELL))
{
StrategyOrdersOpen++;
StrategyProfitOpen += OrderProfit();
}
}
}
Comment("Daily20Pip EA Executed ", StrategyOrders,"+",StrategyOrdersOpen, " trades with ", StrategyProfit,"+",
StrategyProfitOpen," = ",StrategyProfit+StrategyProfitOpen," of profit\n",
"Server hour: ", TimeHour(CurTime()), " Local hour: ", TimeHour(LocalTime()));
return;
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
ReportStrategy();
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
ReportStrategy();
if(Hour() >= close_hour &&
use_close_hour){
// we are after closing time
int totalorders = OrdersTotal();
for(int j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if(OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);
if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
OrderDelete(OrderTicket());
}
}
return(0);
}
if(Hour() == look_price_hour &&
Minute() >= look_price_min &&
clear_to_send){
// Probably I need to close any old positions first:
totalorders = OrdersTotal();
for(j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if(OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);
if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
OrderDelete(OrderTicket());
}
}
}
double PIVOT;
PIVOT = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1))/3;
// Send orders:
if (clear_to_send){
OrderSend(Symbol(),
OP_BUYSTOP,
lots,
PIVOT+(open_long+Currency_Spread)*Point, // Spread included
slippage,
PIVOT+((open_long+Currency_Spread)-stop_long)*Point,
PIVOT+((open_long+Currency_Spread)+take_profit)*Point,
NULL,
magic,
0,
FireBrick);
OrderSend(Symbol(),
OP_SELLSTOP,
lots,
PIVOT-open_short*Point,
slippage,
PIVOT-(open_short-stop_short)*Point,
PIVOT-(open_short+take_profit)*Point,
NULL,
magic,
0,
FireBrick);
clear_to_send = false; // mark that orders are sent
}
if(!clear_to_send){ // there are active orders
int long_ticket = -1;
int short_ticket = -1;
bool no_active_order = true;
totalorders = OrdersTotal();
for(j=0;j<totalorders;j++){
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber() == magic){
if(OrderType() == OP_BUYSTOP)
long_ticket = OrderTicket();
if(OrderType() == OP_SELLSTOP)
short_ticket = OrderTicket();
if(OrderType() == OP_BUY ||
OrderType() == OP_SELL) // Active order
no_active_order = false; }
}
if(short_ticket == -1 && long_ticket != -1)
OrderDelete(long_ticket);
if(long_ticket == -1 && short_ticket != -1)
OrderDelete(short_ticket);
if(long_ticket == -1 && short_ticket == -1 && no_active_order &&
Hour() != look_price_hour && Minute() >= look_price_min)
clear_to_send = true;
if(Hour() == (look_price_hour-1) &&
MathAbs(Minute() - look_price_min) < 10)
clear_to_send = true;
}
//----
return(0);
}
このコードを試してみてください。
リャンクレファス 。
この分野ではあなたは素晴らしい、ただただ素晴らしいです。
あなたの修正から行ったテストはうまくいきました。
なぜピボットロジックを追加すると、現在の "If "ロジックと干渉してしまうのかはよくわかりません。おそらく、ピボットのコードを別の場所に設置する必要があったのでしょう。しかし、保留中の注文 コードを分離した方法がわかり、今のところうまくいっています。
コード例を示す URL をありがとうございました。これは、私がプログラミングのスキルを向上させるための大きなリソースとなるでしょう。
ある問題を解決すると、別の問題が発生することがあるのが面白い/悔しいと思います。
現在の課題です。このコードでは、なぜ価格が5桁で、3桁でない場合にのみ注文を保留できるのか、その理由を知る必要があります。
例:1.1234はうまくいくが、1.12は1.123333はOrderSendの有効な価格ではないというエラーが出る。
そのため、GBP/USDでは動作しますが、USD/JPYでは動作しません。
お時間をいただき、ありがとうございました。
リャンクレファス,
この分野では、あなたは素晴らしいです。
ありがとうございます。
あなたの問題については、次のとおりです。
ピボット値をorderSend関数に送る前に、NormalizeDouble関数で 正規化したことを確認してください。2番目のパラメータとして事前定義された値「Digits」を使用して、doubleを通貨に適した桁数に丸めてください。
私の問題は、計算された値をどのように小数点以下の桁に丸めるかです。
normalizeDouble関数も 使えると思います。 また、MathFloor関数やMathCeiling関数を使用して同じことを実現しているコードも見たことがあります。
その他のヘルプ
どなたか、この方法を教えてください。
どなたか方法を教えてください。
このスレッドに関連していると思いますhttps://www.mql5.com/en/forum/176969
コードでレベルの色を設定する
レベル1 30を緑に、レベル2 70を赤に設定する方法を教えてください。
#プロパティ indicator_separate_window
#property indicator_buffers 1 (インジケータバッファ1)
#property indicator_color1 DodgerBlue (インジケーターカラー1)
#property インジケータ_レベル1 30
#property indicator_level2 70
#property indicator_minimum 0
#property indicator_maximum 100 (インジケーターの最大値
よろしくお願いします。
レベル1 30をグリーンに、レベル2 70をレッドに設定する方法を教えてください。
#property indicator_separate_window
#property インジケーターバッファー1
#property indicator_color1 ドジャーブルー
#property indicator_level1 30
#property indicator_level2 70
#property indicator_minimum 0
#property indicator_maximum 100 です。
ありがとうございました。MetaEditorのこの部分がお探しのものになるかと思います。
MQL4 Reference - Basics - Preprocessor -Controlling compilation(コンパイルの制御)