目利きの方に質問です - ページ 2 123456789...21 新しいコメント Константин Скворцов 2008.06.06 11:12 #11 ここにコードのバリエーションがありました。 どのように私のEAに挿入することができるのでしょうか? //+----------------------------------------------------------------------------+ //| Возвращает номер бара открытия последней позиции или -1. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oot<OrderOpenTime()) oot=OrderOpenTime(); } } } } } } return(iBarShift(sym, tf, oot, True)); } Александр 2008.06.06 11:19 #12 Kostay: エキスパートアドバイザーで奇妙なことが起こっています。それは、ポジションの閉鎖で動作していません。その結果、修正版とはいえ、すべてが同じ問題で負けているのです 修正しました、お試しください。 extern double Lots = 0.1; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double P_up0,P_down0,P_up1,P_down1; double st_m1, st_s1, st_m2, st_s2,Pivot,ma_s1; int i, cnt, ticket, total; bool flag=true; if(Bars<100) { Print("bars less than 100"); return(0); } // Проверяем стоит ли открываться cnt=OrdersHistoryTotal()-1; for(i=cnt;i>=0;i--) { if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )) continue; if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа flag=false; break; } } cnt=OrdersTotal()-1; for(i=cnt;i>=0;i--) { if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа flag=false; break; } } //----------------------------------------------- P_up0=iCustom(0,0,"Ценовой канал",11,0,0); P_down0=iCustom(0,0,"Ценовой канал",11,1,0); P_up1=iCustom(0,0,"Ценовой канал",11,0,1); P_down1=iCustom(0,0,"Ценовой канал",11,1,1); st_m1=iStochastic(0,0,10,3,3,MODE_SMA,0,MODE_MAIN,1); st_s1=iStochastic(0,0,10,3,3,MODE_SMA,0,MODE_SIGNAL,1); st_m2=iStochastic(0,0,10,3,3,MODE_SMA,0,MODE_MAIN,2); st_s2=iStochastic(0,0,10,3,3,MODE_SMA,0,MODE_SIGNAL,2); Pivot=iCustom(0,0,"Pivot",0,1); ma_s1=iMA(0,0,4,0,MODE_SMA,PRICE_CLOSE,1); //задали все данные // Проверка свободной маржи if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } total=OrdersTotal(); // Условие открытие позиции BUY if(st_m2>st_s2&&st_m1>st_s1&&st_m2<25&&Pivot<ma_s1) { if((total>0) || (!flag)) return(0); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",0,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Alert("Покупка: ",OrderOpenPrice()); } else Alert("ошибка:по цене ",OrderOpenPrice()); return(0); } // Условие открытие позиции SELL if(st_m2<st_s2&&st_m1<st_s1&&st_m2>75&&Pivot>ma_s1) { if((total>0) || (!flag)) return(0); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",0,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Alert("Покупка: ",OrderOpenPrice()); } else Alert("ошибка:по цене ",OrderOpenPrice()); return(0); } for(i=cnt;i>=0;i--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) {// длинная позиция открыта // условие закрытие длинной позиции if(P_down1>P_down0) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); return(0); } } else { // условие закрытия короткой позиции if(P_up1<P_up0) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); return(0); } } } } return(0); } Артём 2008.11.10 13:05 #13 こんにちは。 ニューラルネットワークを プログラミングする際、次のような問題が発生しました。 配列がある double X[3]; X[0]=1; X[1]=2; X[2]=3; X[3]=4; Comment(X[3]); テストすると、4ではなく0になってしまいます。同じことが2次元配列で起きているのですが、どうしたらいいのでしょうか? また、この機会に2つ目の質問をします。私が理解するところでは、mql4では、変数を乱数に割り当てるための特定の範囲を設定することはできないのでしょうか? Delphiでは、次のようになります。 ランダム化する。 i:=Random(10); // 同じく0から10までの範囲 Виктор 2008.11.10 14:06 #14 Chris_Brown >> : ...配列があるんです。 テストすると、4ではなく0が表示されます。2次元配列でも同じことが起こりますが、どうしたらよいでしょうか? 配列は単純で、次元[3]を定義し、4つ目の足りないセルを呼び出すだけです。 double X[4];と書けば、すべてうまくいく。 Артём 2008.11.10 14:52 #15 granit77 >> : 配列の場合は簡単で、次元[3]を定義しますが、4番目の足りないセルを呼び出すのです。 double X[4];と書けば、すべてうまくいく。 ありがとうございます、試してみますが、ランダムはどうなんでしょうか? Артём 2008.11.10 15:01 #16 また、2次元の配列、4×9の行列があり、各要素に0.1という値が割り当てられて いるとしたら、それくらいでいいのでしょうか。 int i, j; double W[4][9]; for ( i=0; i<=3; i++) for ( j=0; j<=8; j++) W[ i][ j]=0.1; Виктор 2008.11.10 18:32 #17 Chris_Brown >> : また、2次元の配列、4×9の行列があり、各要素に値0.1を割り当てると、次のようになりますね? 動作するはずです。手間を惜しまず、コメントで行列全体を一行ずつ表示すると、結果が見えてきます。 ちなみに、このコメントを関数にして、配列の中身をチェックするのに使うこともできます。 そして、ランダム性についてですが、私はパスします。通りかかったら、間違いがあった。:)) rsi 2008.11.10 18:54 #18 Chris_Brown писал(а)>> ありがとうございます、試してみますが、ランダムはどうなんでしょう? double i=MathRand()/32767.0*10; ヘルプはそこにある Александр 2008.11.11 06:17 #19 Chris_Brown писал(а)>> また、4×9の2次元配列の行列があり、各要素に0.1という値が割り当てられているとしたら、次のようなものになるでしょうか。 使用可能 intArrayInitialize() double &array[], double value). 数値配列の全要素を同じ値に設定します。初期化された要素の数を返す。 PapaYozh 2008.11.11 06:47 #20 Chris_Brown писал(а)>> また、2次元の配列、4×9の行列があり、各要素に0.1という値を割り当てた場合、次のように動作するでしょうか。 int i, j; double W[4][9]; for ( i=0; i<=3; i++) for ( j=0; j<=8; j++) W[ i][ j]=0.1; うまくいくのですが、このような書き方でなければなりません。 int i, j; double W[4][9]; for ( i=0; i<4; i++) for ( j=0; j<9; j++) W[ i][ j]=0.1; 123456789...21 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ここにコードのバリエーションがありました。
どのように私のEAに挿入することができるのでしょうか?
エキスパートアドバイザーで奇妙なことが起こっています。それは、ポジションの閉鎖で動作していません。その結果、修正版とはいえ、すべてが同じ問題で負けているのです
修正しました、お試しください。
こんにちは。
ニューラルネットワークを プログラミングする際、次のような問題が発生しました。
配列がある
テストすると、4ではなく0になってしまいます。同じことが2次元配列で起きているのですが、どうしたらいいのでしょうか?
また、この機会に2つ目の質問をします。私が理解するところでは、mql4では、変数を乱数に割り当てるための特定の範囲を設定することはできないのでしょうか?
Delphiでは、次のようになります。
ランダム化する。
i:=Random(10); // 同じく0から10までの範囲
...配列があるんです。
テストすると、4ではなく0が表示されます。2次元配列でも同じことが起こりますが、どうしたらよいでしょうか?
配列は単純で、次元[3]を定義し、4つ目の足りないセルを呼び出すだけです。
double X[4];と書けば、すべてうまくいく。
配列の場合は簡単で、次元[3]を定義しますが、4番目の足りないセルを呼び出すのです。
double X[4];と書けば、すべてうまくいく。
ありがとうございます、試してみますが、ランダムはどうなんでしょうか?
また、2次元の配列、4×9の行列があり、各要素に0.1という値が割り当てられて いるとしたら、それくらいでいいのでしょうか。
また、2次元の配列、4×9の行列があり、各要素に値0.1を割り当てると、次のようになりますね?
動作するはずです。手間を惜しまず、コメントで行列全体を一行ずつ表示すると、結果が見えてきます。
ちなみに、このコメントを関数にして、配列の中身をチェックするのに使うこともできます。
そして、ランダム性についてですが、私はパスします。通りかかったら、間違いがあった。:))
ありがとうございます、試してみますが、ランダムはどうなんでしょう?
また、4×9の2次元配列の行列があり、各要素に0.1という値が割り当てられているとしたら、次のようなものになるでしょうか。
使用可能
また、2次元の配列、4×9の行列があり、各要素に0.1という値を割り当てた場合、次のように動作するでしょうか。
うまくいくのですが、このような書き方でなければなりません。