MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 276 1...269270271272273274275276277278279280281282283...1953 新しいコメント danil77783 2017.08.17 10:04 #2751 Vladimir Pastushak: ZeroMemory (...) は、文字列型の配列を NULL 値で初期化します。こんにちは。ここで質問です。EAを書いて、トレーリングストップをつけて、コンパイルして......うまくいかない:)))))))))))。パソコンを再起動し、ソースコードをいじってみたら、うまくいった。入力パラメーターで調整し始めたが、やはりうまくいかない、というか一回変わっただけで終わり......である。風向きが悪いのか、またどこかで失敗したのか。ソースコードを添付します。//+------------------------------------------------------------------+ //| test8.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //------------------------------------------------------------------- extern double lots = 0.1; extern int TakeProfit = 100; extern int StopLoss = 50; extern int Magic = 777; extern int Slippage = 3; //------------------------------------------------------------------- extern string TMA = "Параметры индикатора TMA"; extern string TimeFrame = "current time frame"; extern int HalfLength = 56; extern int Price = PRICE_CLOSE; extern double ATRMultiplier = 2.0; extern int ATRPeriod = 100; extern bool Interpolate = true; extern int TrailingStop = 50; extern int TrailingStep = 20; int timeprev = 0; //------------------------------------------------------------------- double PriceHigh, PriceLow, SL ,TP; int ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if (Digits == 3 || Digits == 5); { TakeProfit *=10; Slippage *=10; TrailingStop *=10; TrailingStep *=10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (timeprev == Time [0])return; timeprev = Time [0]; PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0); PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0); if (CountSell() == 0 && Bid >= PriceHigh) { ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red); if (ticket > 0) { TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); SL = NormalizeDouble(Bid + StopLoss*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print("Ошибк амодификации ордера на продажу!"); } else Print("Ошибка открытия ордера на продаду!"); } if (CountBuy() == 0 && Ask <= PriceLow) { ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue); if (ticket > 0) { SL = NormalizeDouble(Ask - StopLoss*Point, Digits); TP = NormalizeDouble(Ask + TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print ("Ошибка модификации ордера на покупку!"); } else Print("Ошибка открытия ордера на покупкку!"); } Trailing(); } //+------------------------------------------------------------------+ void Trailing() { for (int i=OrdersTotal() -1; i>=0; i--) { if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (Bid - OrderOpenPrice() > TrailingStop*Point || OrderStopLoss() == 0) { if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble (Bid-TrailingStop*Point, Digits), 0, 0)) Print ("Ошибка модификации ордера на покупку!"); } } } if (OrderType() == OP_SELL) { if (OrderOpenPrice() - Ask > TrailingStop*Point || OrderStopLoss() == 0) { if (OrderStopLoss() > Ask + (TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble( Ask + TrailingStop*Point, Digits), 0, 0)) Print ("Ошибка модификации ордера на родажу!"); } } } } } } } //+------------------------------------------------------------------+ int CountSell() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) count++; } } return(count); } //----------------------------------------------------------------------------------------------- int CountBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) count++; } } return(count); } //----------------------------------------------------------------------------------------------- danil77783 2017.08.17 10:25 #2752 こんにちは。EAを作成し、トレーリングストップをつけてコンパイルしたところ・・・・・・うまくいきません:)))))。正確にはトレーリングストップは機能しますが、事前に設定した利益が機能しないのですが、その理由は何ですか? Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5 www.metatrader5.com Для разработки торговых систем в платформу встроен собственный язык программирования MetaQuotes Language 5 ( MQL5 ), среда разработки MetaEditor и... Vladimir Pastushak 2017.08.17 11:26 #2753 danil77783: こんにちは。質問は以下の通りです。EAを書いて、トレーリングストップをつけて、コンパイルして......動かない:))))。パソコンを再起動し、ソースコードをいじってみたら、うまくいった。入力パラメーターで調整し始めたが、やはりうまくいかない、というか一回変わっただけで終わり......である。風向きが悪いのか、またどこかで失敗したのか。ソースコードを添付します。 if (timeprev == Time [0]) { timeprev = Time [0]; return; } danil77783 2017.08.17 12:59 #2754 Vladimir Pastushak: はまだティックプロフィットを出していない...。もう一度ご覧ください。 Vladimir Pastushak 2017.08.17 13:09 #2755 danil77783: はまだティックプロフィットを出していない...。もう一度ご確認ください。トレーリング機能では、すべての注文にテイクプロフィット0を設定していますが、オープン時には正しいテイクプロフィットを設定しています。行のロジックをお読みください。注文を出す、ストップとテイクを設定するスタート・トレーリング・ストップ・テイク0末尾の注文の0をOrderTakeProfit()に置き換えます。 danil77783 2017.08.17 13:32 #2756 今、彼はストップライトを置きません Vladimir Pastushak 2017.08.17 13:37 #2757 danil77783:今、それはストップライトを置くことはありません新しいコードを見せてください。 danil77783 2017.08.17 13:45 #2758 Vladimir Pastushak: 新しいコードを表示する//+------------------------------------------------------------------+ //| test8.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //------------------------------------------------------------------- extern double lots = 0.1; extern int TakeProfit = 50; extern int StopLoss = 50; extern int Magic = 777; extern int Slippage = 3; //------------------------------------------------------------------- extern string TMA = "Параметры индикатора TMA"; extern string TimeFrame = "current time frame"; extern int HalfLength = 56; extern int Price = PRICE_CLOSE; extern double ATRMultiplier = 2.0; extern int ATRPeriod = 100; extern bool Interpolate = true; extern int TrailingStop = 50; extern int TrailingStep = 20; int timeprev = 0; //------------------------------------------------------------------- double PriceHigh, PriceLow, SL ,TP; int ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if (Digits == 3 || Digits == 5); { TakeProfit *=10; Slippage *=10; TrailingStop *=10; TrailingStep *=10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (timeprev == Time [0]) { timeprev = Time [0]; return; } PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0); PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0); if (CountSell() == 0 && Bid >= PriceHigh) { ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red); if (ticket > 0) { TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print("Ошибк амодификации ордера на продажу!"); } else Print("Ошибка открытия ордера на продаду!"); } if (CountBuy() == 0 && Ask <= PriceLow) { ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue); if (ticket > 0) { TP = NormalizeDouble(Ask + TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print ("Ошибка модификации ордера на покупку!"); } else Print("Ошибка открытия ордера на покупкку!"); } Trailing(); } //+------------------------------------------------------------------+ void Trailing() { for (int i=OrdersTotal() -1; i>=0; i--) { if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (Bid - OrderOpenPrice() > TrailingStop*Point || OrderStopLoss() == 0) { if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep)*Point || OrderStopLoss() == OrderTakeProfit()) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble (Bid-TrailingStop*Point, Digits), 0, 0)) Print ("Ошибка модификации ордера на покупку!"); } } } if (OrderType() == OP_SELL) { if (OrderOpenPrice() - Ask > TrailingStop*Point || OrderStopLoss() == 0) { if (OrderStopLoss() > Ask + (TrailingStop+TrailingStep)*Point || OrderStopLoss() == OrderTakeProfit()) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble( Ask + TrailingStop*Point, Digits), 0, 0)) Print ("Ошибка модификации ордера на родажу!"); } } } } } } } //+------------------------------------------------------------------+ int CountSell() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) count++; } } return(count); } //----------------------------------------------------------------------------------------------- int CountBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) count++; } } return(count); } //----------------------------------------------------------------------------------------------- Vladimir Pastushak 2017.08.17 13:48 #2759 danil77783: トレーリングでtakeの代わりに0を入れたとはっきり言ったはずです。このオプションにチェックを入れます。 //+------------------------------------------------------------------+ //| test8.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //------------------------------------------------------------------- extern double lots = 0.1; extern int TakeProfit = 100; extern int StopLoss = 50; extern int Magic = 777; extern int Slippage = 3; //------------------------------------------------------------------- extern string TMA = "Параметры индикатора TMA"; extern string TimeFrame = "current time frame"; extern int HalfLength = 56; extern int Price = PRICE_CLOSE; extern double ATRMultiplier = 2.0; extern int ATRPeriod = 100; extern bool Interpolate = true; extern int TrailingStop = 50; extern int TrailingStep = 20; int timeprev = 0; //------------------------------------------------------------------- double PriceHigh, PriceLow, SL ,TP; int ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if (Digits == 3 || Digits == 5); { TakeProfit *=10; Slippage *=10; TrailingStop *=10; TrailingStep *=10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (timeprev == Time [0])return; timeprev = Time [0]; PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0); PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0); if (CountSell() == 0 && Bid >= PriceHigh) { ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red); if (ticket > 0) { TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); SL = NormalizeDouble(Bid + StopLoss*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print("Ошибк амодификации ордера на продажу!"); } else Print("Ошибка открытия ордера на продаду!"); } if (CountBuy() == 0 && Ask <= PriceLow) { ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue); if (ticket > 0) { SL = NormalizeDouble(Ask - StopLoss*Point, Digits); TP = NormalizeDouble(Ask + TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print ("Ошибка модификации ордера на покупку!"); } else Print("Ошибка открытия ордера на покупкку!"); } Trailing(); } //+------------------------------------------------------------------+ void Trailing() { for (int i=OrdersTotal() -1; i>=0; i--) { if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (Bid - OrderOpenPrice() > TrailingStop*Point || OrderStopLoss() == 0) { if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble (Bid-TrailingStop*Point, Digits),OrderTakeProfit(), 0)) // -------------------------- Print ("Ошибка модификации ордера на покупку!"); } } } if (OrderType() == OP_SELL) { if (OrderOpenPrice() - Ask > TrailingStop*Point || OrderStopLoss() == 0) { if (OrderStopLoss() > Ask + (TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble( Ask + TrailingStop*Point, Digits),OrderTakeProfit(), 0)) // -------------------------- Print ("Ошибка модификации ордера на родажу!"); } } } } } } } //+------------------------------------------------------------------+ int CountSell() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) count++; } } return(count); } //----------------------------------------------------------------------------------------------- int CountBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) count++; } } return(count); } //----------------------------------------------------------------------------------------------- mila.com 2017.08.17 22:25 #2760 こんにちは。 最初のバーのMAの価格と、前の4つのバーのMAの価格を比較するのを手伝ってください。価格が上昇し、その差がNより大きい場合、バッファに記入する。を心がけています。 MA_1 = iMA(NULL, 0, ma_period, 0, ma_method,applied_price, i+1); MA_2 = iMA(NULL, 0, ma_period, 0, ma_method,applied_price, i+2); MA_3 = iMA(NULL, 0, ma_period, 0, ma_method,applied_price, i+3); if(MA_1>MA_2) { double N_=0.005; BarCount=4; BUL=false; for(int il=i+1;il<=BarCount;il++) { if(iMA(NULL, 0, ma_period, 0, ma_method,applied_price, i)-iMA(NULL, 0, ma_period, 0, ma_method,applied_price, i+il)>=N_ ) {BUL=true;break;} } RefreshRates(); if(BUL) { BufferUP[i+1]=low[i+1]-distance*MyPoint; BUL=false; } } 1...269270271272273274275276277278279280281282283...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ZeroMemory (...) は、文字列型の配列を NULL 値で初期化します。
こんにちは。ここで質問です。EAを書いて、トレーリングストップをつけて、コンパイルして......うまくいかない:)))))))))))。パソコンを再起動し、ソースコードをいじってみたら、うまくいった。入力パラメーターで調整し始めたが、やはりうまくいかない、というか一回変わっただけで終わり......である。風向きが悪いのか、またどこかで失敗したのか。ソースコードを添付します。
こんにちは。EAを作成し、トレーリングストップをつけてコンパイルしたところ・・・・・・うまくいきません:)))))。正確にはトレーリングストップは機能しますが、事前に設定した利益が機能しないのですが、その理由は何ですか?
こんにちは。質問は以下の通りです。EAを書いて、トレーリングストップをつけて、コンパイルして......動かない:))))。パソコンを再起動し、ソースコードをいじってみたら、うまくいった。入力パラメーターで調整し始めたが、やはりうまくいかない、というか一回変わっただけで終わり......である。風向きが悪いのか、またどこかで失敗したのか。ソースコードを添付します。
はまだティックプロフィットを出していない...。もう一度ご覧ください。
はまだティックプロフィットを出していない...。もう一度ご確認ください。
トレーリング機能では、すべての注文にテイクプロフィット0を設定していますが、オープン時には正しいテイクプロフィットを設定しています。
行のロジックをお読みください。
注文を出す、ストップとテイクを設定する
スタート・トレーリング・ストップ・テイク0
末尾の注文の0をOrderTakeProfit()に置き換えます。
今、彼はストップライトを置きません
今、それはストップライトを置くことはありません
新しいコードを見せてください。
新しいコードを表示する
トレーリングでtakeの代わりに0を入れたとはっきり言ったはずです。
このオプションにチェックを入れます。
最初のバーのMAの価格と、前の4つのバーのMAの価格を比較するのを手伝ってください。価格が上昇し、その差がNより大きい場合、バッファに記入する。を心がけています。