どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1067 1...106010611062106310641065106610671068106910701071107210731074...1178 新しいコメント 削除済み 2016.06.28 09:54 #10661 助けて!お願いインジケータとExpert Advisorの2つのファイルがあります。インジケータ内の関数を#includeで正しく参照するには? iCustomは諸事情により不向きです。これは、インジケーターに書いたものです。bool BuyTrue(double& переменная, int переменная) export { //тело функции return(true); } そして、Expert Advisorにはこのように書きました。#import "НазваниеИндикатора.ex4" bool BuyTrue(double& переменная, int переменная);if (BuyTrue(переменная, переменная)) Opn_B = true;しかし、なぜかExpert Advisorが動作せず、テスト 中に価格チャートにインジケータが 表示されない。正しく書けたか、間違いがあればどこが間違いか。 Nauris Zukas 2016.06.28 10:38 #10662 AlexeyVik:ツタ。持っていないんです。しかし、どこかにファイルがあるのは確かで、そこから記録された情報を入手しています。 ilya_v 2016.06.28 13:39 #10663 mt4へのコンパイルをお願いします。FileClose' - 'void' 型の式が不正 TickToCVS~.mq4 84 12. ファイル: ticktocvsb.mq4 4 kb Alexey Viktorov 2016.06.28 14:36 #10664 abeiks:持っていないんです。しかし、どこかに確実にファイルがあり、そこから記録された情報を得ることができるのです。 私のスクリーンショットはMetaEditorのメニューで、あなたのスクリーンショットはMTのものです。 削除済み 2016.06.29 05:32 #10665 AlexeyVik:これはEMPTY_VALUEの値です。どこに飛び出しているのか、探してみてください。 ありがとうございます。あなたのおかげで、問題が解決しました。私のインジケータは、ロードされると、ゼロからではなく、最初のバーから計算します(私は意図的にそうしました)。現在、タイムフレームを変更し、チャートに添付し、ターミナルを再起動すると、バー0にバッファの値をゼロにリセットし、問題は解決しました。 Nauris Zukas 2016.06.29 06:07 #10666 AlexeyVik: 私のスクリーンショットはMetaEditorのメニューで、あなたのスクリーンショットはMTのものです。 そうなんだ!ありがとうございました。 Nauris Zukas 2016.06.29 10:26 #10667 この注文がトリガーされた場合、履歴にある注文の開始価格ではなく、未決済ポジションの価格を取得するにはどうすればよいですか?添付の関数では、注文がトリガーされた場合、この注文はポジションでしか見つけることができないため、動作しません。また、ポジションにはオープン ポジションの価格のみが 表示され、注文価格は表示されません。double GetPriceLastCloseOrder(string sy="", int mn=-1) { datetime t=0; int i, k=OrdersHistoryTotal(); double r=0; if (sy==NULL) sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) { if (OrderType()>1 && OrderType()<6) { if (t<OrderCloseTime()) { t=OrderCloseTime(); r=OrderOpenPrice(); } } } } } return(r); } Sergei Noga 2016.06.29 12:37 #10668 Hi guys, my question is, I can't modify an order. There are two aspects to it, I don't understand the mathematics of modification, please explain it to me.私の考えでは、SL= IF ORDERSELEKT,Bid-ORDERSTOPLOS*POINT,DIGITS です。第二の側面:XBMSの映像から学んだこと私はテスターの変数の値を変更しようとしなかった方法 eror 130 ストップロスやそのようなデタラメを修正しない2016.06.28 21:42:23.402 2016.06.23 00:00 trade RSI 入力: Lots=0.1; Slippage=5; StopLoss=10; TakeProfit=30; RSIPeriod=7; Magic=1087;桁からの乗算があり、SLを間違えた場合の関数もありますがextern double Lots = 0.1;extern int Slippage = 10;extern int StopLoss = 10;extern int TakeProfit =30;extern int RSIPeriod = 7;extern int Magic =1087;ダブルMaRSI。int TP,SL;bool tfu;//+------------------------------------------------------------------+//| 専門家による初期化機能//+------------------------------------------------------------------+int OnInit(){if(Digits == 3||Digits == 5){スリッページ *= 10;TakeProfit *= 10;StopLoss *= 10;}return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| 専門家による初期化関数//+------------------------------------------------------------------+void OnDeinit(const int reason){}//+------------------------------------------------------------------+//| エキスパートティック機能//+------------------------------------------------------------------+void OnTick(){//+------------------------------------------------------------------+//オープンセル//+------------------------------------------------------------------+MaRSI=iRSI(Symbol(),0, RSIPeriod,PRICE_CLOSE,1);if(CountTrades() <= 0&MaRSI<=30 ){if( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,「テスト」,マジック,0,グリーン)){ int ticket = OrderTicket();SL = NormalizeDouble( Ask - StopLoss*Point,Digits)。TP = NormalizeDouble( Ask + TakeProfit*Point,Digits)。修正注文(ticket,OrderOpenPrice(),SL,TP,0,Black)です。}}// if(CountTrades <= 0&MaRSI>=70 )//+------------------------------------------------------------------+//オープン・バイ//+------------------------------------------------------------------+をクリックします。//+------------------------------------------------------------------+//+オーダーカウンター//+------------------------------------------------------------------+int CountTrades (){int count = 0;for(int i = OrdersTotal()-1;i>=0;i--){if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)//オーダーが我々のものであればcount++;//カウンタを増加させる}//select インデックス順}// order.i===1 順目。return(count);//注文件数を返す}// 機能//+------------------------------------------------------------------+//エラー処理付き発注機能//+------------------------------------------------------------------+int SendOrder( string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit,stringコメント,int magic=0,datetime期限=0,color arrow_color=CLR_NONE){int err = GetLastError()。err =0;bool exit_cikl = false;int ticket = -1;int Retry = 10; //注文を確定するまでの試行回数int cnt = 0; //トライ回数if(cmd == OP_BUY || cmd == OP_SELL){while(!exit_cikl){ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);err= GetLastError()。スイッチ{case ERR_NO_ERROR:exit_cikl = trueです。が壊れる。{ case ERR_SERVER_BUSY:case ERR_NO_CONNECTION:case ERR_INVALID_PRICE:case ERR_OFF_QUOTES:case ERR_BROKER_BUSY:case ERR_TRADE_CONTEXT_BUSY:cnt++です。が壊れる。case ERR_PRICE_CHANGED:case ERR_REQUOTE:RefreshRates()。を続ける。のデフォルトになります。exit_cikl = trueです。が壊れる。}// switch switch(err)if(cnt > 再試行)exit_cikl = trueです。if(!exit_cikl){Sleep(1000)です。RefreshRates()。}//ループを抜けない場合 if(!exit_cikl)さもなくば{if(err != ERR_NO_ERROR){Print("Error : " + IntegerToString(err));}// まだエラーがある場合 if(err != ERR_NO_ERROR)}// OTHERWISEif(err==ERR_NO_ERROR){if( OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)return(ticket)です。}// if(err==ERR_NO_ERROR)Print("Error opening order after " + IntegerToString(cnt) +"attempts");return(-1)です。} //cycle while}// 注文の種類が「買い」または「売り」の場合return(ticket)です。}// SendOrder 機能//-------------------------------------------------------------------------------------------------------------//関数 modify order//------------------------------------------------------------------------------------------------------------注文の変更(int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color){if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)){価格 = NormalizeDouble(price,Digits);stoploss = NormalizeDouble(stoploss,Digits)。takeprofit = NormalizeDouble(takeprofit,Digits)。CheckValidStop(Symbol(),price,stoploss);//ストップ安を変更する関数です。int err = GetLastError()。err = 0 ;int Retry = 10;int cnt = 0;bool exit_cikl = false;bool result;while(!exit_cikl){result = OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);err = GetLastError()。if(result == true){Print("注文番号 "+ IntegerToString(ticket), "変更に成功");return(true)です。}スイッチ{case ERR_NO_ERROR:exit_cikl = trueです。が壊れる。{ case ERR_SERVER_BUSY:case ERR_NO_CONNECTION:case ERR_INVALID_PRICE:case ERR_OFF_QUOTES:case ERR_BROKER_BUSY:case ERR_TRADE_CONTEXT_BUSY:cnt++です。が壊れる。case ERR_PRICE_CHANGED:case ERR_REQUOTE:RefreshRates()。を続ける。のデフォルトになります。exit_cikl = trueです。が壊れる。}// switch switch(err)}// while(!exit_cikl)if ( err != ERR_NO_ERROR){Print("Error modifying order # " + IntegerToString(ticket));Print("Error code:" + IntegerToString(err));}}//(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))さもなくば{Print("注文の選択に失敗しました、チケット = " + IntegerToString(ticket));return(false)です。}//if something goes wrongreturn(true)です。}// function modify//----------------------------------------------------------------------------------------------------//ChtckValidStop//--------------------------------------------------------------------------------------------------void CheckValidStop(文字列シンボル,double価格,double&sl){if(sl==0)を返します。double min_stop_server = MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT).MARKET_STOP_SERVER は、MarketInfo(symbol,MODE_POINT)と同じです。if(MathAbs(price-sl) <= min_stop_server){if(price>sl)sl = 価格 - min_stop_server;else sl = sl + min_stop_server;}// if(MathAbs(price-sl) <= min_stop_server)sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS))}// 機能 Any rookie question, so 初心者の方からの質問 MQL5 MT5 MetaTrader Questions from Beginners MQL5 削除済み 2016.06.30 05:05 #10669 アドバイスください! 取引履歴に2つの注文があります:1) 売り № tic 415 STOPLOSS 1.1000 lot 0.01 2) 売り № tic 418 STOPLOSS 1.1000 lot 0.02 Asc価格がSELL注文のSTOPLOSSと等しい場合、X=tick、Y=STOPLOSS、B=lotという変数を割り当てなければならない。最初の値を1次、次に2次の値を割り当てる方法。私の場合、最初の注文には必ず値が割り当てられます。 Vitalie Postolache 2016.06.30 06:58 #10670 m8akca:アドバイスください! 取引履歴に2つの注文があります:1) 売り № tic 415 STOPLOSS 1.1000 lot 0.01 2) 売り № tic 418 STOPLOSS 1.1000 lot 0.02 Asc価格がSELLオーダーのSTOPLOSSと等しい場合、X=tick、Y=STOPLOSS、B=lotという変数を割り当てなければならない。最初の値を1次、次に2次の値を割り当てる方法。私の場合、最初の注文には必ず値が割り当てられます。このトピックは、すでに何かを書いているけれど、なかなか思い通りにいかないという方のために用意しました。何が問題なのか、他の人がわかるように、コードを送信してください。そして、オーダーメイドで書いてもらうなら、そこが 一番です。 1...106010611062106310641065106610671068106910701071107210731074...1178 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
助けて!お願いインジケータとExpert Advisorの2つのファイルがあります。インジケータ内の関数を#includeで正しく参照するには? iCustomは諸事情により不向きです。これは、インジケーターに書いたものです。
そして、Expert Advisorにはこのように書きました。
しかし、なぜかExpert Advisorが動作せず、テスト 中に価格チャートにインジケータが 表示されない。正しく書けたか、間違いがあればどこが間違いか。
ツタ。
持っていないんです。しかし、どこかにファイルがあるのは確かで、そこから記録された情報を入手しています。
mt4へのコンパイルをお願いします。
FileClose' - 'void' 型の式が不正 TickToCVS~.mq4 84 12.
持っていないんです。しかし、どこかに確実にファイルがあり、そこから記録された情報を得ることができるのです。
これはEMPTY_VALUEの値です。
どこに飛び出しているのか、探してみてください。
私のスクリーンショットはMetaEditorのメニューで、あなたのスクリーンショットはMTのものです。
Hi guys, my question is, I can't modify an order. There are two aspects to it, I don't understand the mathematics of modification, please explain it to me.
私の考えでは、SL= IF ORDERSELEKT,Bid-ORDERSTOPLOS*POINT,DIGITS です。
第二の側面:XBMSの映像から学んだこと
私はテスターの変数の値を変更しようとしなかった方法 eror 130 ストップロスやそのようなデタラメを修正しない
2016.06.28 21:42:23.402 2016.06.23 00:00 trade RSI 入力: Lots=0.1; Slippage=5; StopLoss=10; TakeProfit=30; RSIPeriod=7; Magic=1087;
桁からの乗算があり、SLを間違えた場合の関数もありますが
extern double Lots = 0.1;
extern int Slippage = 10;
extern int StopLoss = 10;
extern int TakeProfit =30;
extern int RSIPeriod = 7;
extern int Magic =1087;
ダブルMaRSI。
int TP,SL;
bool tfu;
//+------------------------------------------------------------------+
//| 専門家による初期化機能
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits == 3||Digits == 5)
{
スリッページ *= 10;
TakeProfit *= 10;
StopLoss *= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 専門家による初期化関数
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| エキスパートティック機能
//+------------------------------------------------------------------+
void OnTick()
{
//+------------------------------------------------------------------+
//オープンセル
//+------------------------------------------------------------------+
MaRSI=iRSI(Symbol(),0, RSIPeriod,PRICE_CLOSE,1);
if(CountTrades() <= 0&MaRSI<=30 )
{
if( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,「テスト」,マジック,0,グリーン))
{ int ticket = OrderTicket();
SL = NormalizeDouble( Ask - StopLoss*Point,Digits)。
TP = NormalizeDouble( Ask + TakeProfit*Point,Digits)。
修正注文(ticket,OrderOpenPrice(),SL,TP,0,Black)です。
}
}// if(CountTrades <= 0&MaRSI>=70 )
//+------------------------------------------------------------------+
//オープン・バイ
//+------------------------------------------------------------------+
をクリックします。
//+------------------------------------------------------------------+
//+オーダーカウンター
//+------------------------------------------------------------------+
int CountTrades ()
{
int count = 0;
for(int i = OrdersTotal()-1;i>=0;i--)
{
if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)//オーダーが我々のものであれば
count++;//カウンタを増加させる
}//select インデックス順
}// order.i===1 順目。
return(count);//注文件数を返す
}// 機能
//+------------------------------------------------------------------+
//エラー処理付き発注機能
//+------------------------------------------------------------------+
int SendOrder( string symbol,int cmd,double volume,double price,int slippage,double stoploss,
double takeprofit,stringコメント,int magic=0,datetime期限=0,color arrow_color=CLR_NONE)
{
int err = GetLastError()。
err =0;
bool exit_cikl = false;
int ticket = -1;
int Retry = 10; //注文を確定するまでの試行回数
int cnt = 0; //トライ回数
if(cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_cikl)
{
ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);
err= GetLastError()。
スイッチ
{
case ERR_NO_ERROR:
exit_cikl = trueです。
が壊れる。
{ case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++です。
が壊れる。
case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates()。
を続ける。
のデフォルトになります。
exit_cikl = trueです。
が壊れる。
}// switch switch(err)
if(cnt > 再試行)
exit_cikl = trueです。
if(!exit_cikl)
{
Sleep(1000)です。
RefreshRates()。
}//ループを抜けない場合 if(!exit_cikl)
さもなくば
{
if(err != ERR_NO_ERROR)
{
Print("Error : " + IntegerToString(err));
}// まだエラーがある場合 if(err != ERR_NO_ERROR)
}// OTHERWISE
if(err==ERR_NO_ERROR)
{
if( OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)
return(ticket)です。
}// if(err==ERR_NO_ERROR)
Print("Error opening order after " + IntegerToString(cnt) +"attempts");
return(-1)です。
} //cycle while
}// 注文の種類が「買い」または「売り」の場合
return(ticket)です。
}// SendOrder 機能
//-------------------------------------------------------------------------------------------------------------
//関数 modify order
//------------------------------------------------------------------------------------------------------------
注文の変更(int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
価格 = NormalizeDouble(price,Digits);
stoploss = NormalizeDouble(stoploss,Digits)。
takeprofit = NormalizeDouble(takeprofit,Digits)。
CheckValidStop(Symbol(),price,stoploss);//ストップ安を変更する関数です。
int err = GetLastError()。
err = 0 ;
int Retry = 10;
int cnt = 0;
bool exit_cikl = false;
bool result;
while(!exit_cikl)
{
result = OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);
err = GetLastError()。
if(result == true)
{
Print("注文番号 "+ IntegerToString(ticket), "変更に成功");
return(true)です。
}
スイッチ
{
case ERR_NO_ERROR:
exit_cikl = trueです。
が壊れる。
{ case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++です。
が壊れる。
case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates()。
を続ける。
のデフォルトになります。
exit_cikl = trueです。
が壊れる。
}// switch switch(err)
}// while(!exit_cikl)
if ( err != ERR_NO_ERROR)
{
Print("Error modifying order # " + IntegerToString(ticket));
Print("Error code:" + IntegerToString(err));
}
}//(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
さもなくば
{
Print("注文の選択に失敗しました、チケット = " + IntegerToString(ticket));
return(false)です。
}//if something goes wrong
return(true)です。
}// function modify
//----------------------------------------------------------------------------------------------------
//ChtckValidStop
//--------------------------------------------------------------------------------------------------
void CheckValidStop(文字列シンボル,double価格,double&sl)
{
if(sl==0)
を返します。
double min_stop_server = MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT).MARKET_STOP_SERVER は、MarketInfo(symbol,MODE_POINT)と同じです。
if(MathAbs(price-sl) <= min_stop_server)
{
if(price>sl)
sl = 価格 - min_stop_server;
else sl = sl + min_stop_server;
}// if(MathAbs(price-sl) <= min_stop_server)
sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS))
}// 機能
アドバイスください!
取引履歴に2つの注文があります:1) 売り № tic 415 STOPLOSS 1.1000 lot 0.01 2) 売り № tic 418 STOPLOSS 1.1000 lot 0.02
Asc価格がSELL注文のSTOPLOSSと等しい場合、X=tick、Y=STOPLOSS、B=lotという変数を割り当てなければならない。最初の値を1次、次に2次の値を割り当てる方法。私の場合、最初の注文には必ず値が割り当てられます。
アドバイスください!
取引履歴に2つの注文があります:1) 売り № tic 415 STOPLOSS 1.1000 lot 0.01 2) 売り № tic 418 STOPLOSS 1.1000 lot 0.02
Asc価格がSELLオーダーのSTOPLOSSと等しい場合、X=tick、Y=STOPLOSS、B=lotという変数を割り当てなければならない。最初の値を1次、次に2次の値を割り当てる方法。私の場合、最初の注文には必ず値が割り当てられます。
このトピックは、すでに何かを書いているけれど、なかなか思い通りにいかないという方のために用意しました。何が問題なのか、他の人がわかるように、コードを送信してください。
そして、オーダーメイドで書いてもらうなら、そこが 一番です。