初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 46 1...394041424344454647484950515253...260 新しいコメント Oksana Berenko 2016.12.27 17:48 #451 Renat Akhtyamov: int ticket;//тикет ордера.......... ticket=OrderSend(.....);//приказ и запоминаем тикет ордераif(ticket>0)//открылась{//действия с тикетом}より正確には、次のようになります。if(ticket!=-1)//открылась{//действия с тикетом}OrderSend- "トレードサーバーがオーダーに割り当てたチケット番号を返すか、失敗した場合は-1を返します 。"テスターでも最初のチケット番号は0でなく1ですが。 Alexey Volchanskiy 2016.12.29 00:54 #452 Oksana Berenko:より正確には、そうなります。if(ticket!=-1)//открылась{//действия с тикетом}OrderSend - "トレードサーバーがオーダーに割り当てたチケット番号を返すか、失敗した場合は-1を返します 。" テスターでも最初のチケット番号は0でなく1ですが。行方不明のオクサナに会えてとてもうれしいです ))確かに、テスターでもDCサーバーでもチケットは1から始まりますが、DCで1が獲れることはないでしょう。不等号と-1を比較するのは正しくありません。実アカウントが 1234567を返したらどうする?if(ticket>0)//открылась{//действия с тикетом}// так верно 削除済み 2016.12.29 01:27 #453 だから、テスターではチケットは1より小さくはできないし、実世界ではなおさらだゼロが1より小さい場合、両方の条件が正しく、一方だけが比較のため、もう一方は除外のためです。慣れたとはいえ// Открываем ордер int ticketbuy = OrderSend(sy,OP_BUY,ll,MarketInfo(sy,MODE_ASK),Slippage,0,0,Comments,mn,0,BuyColor); if(ticketbuy<0) Print(sy," OpenPosition. OrderSend Buy fail #",GetLastError()); else Print(sy," OpenPosition. OrderSend Buy successfully");しかし、私のを考えると、条件はすべて正しく、ロジックが違うだけです) Questions from Beginners MQL4 Who can help with ロボットのこと、どうして動かないのか、誰が助けてくれるの? 削除済み 2016.12.30 17:02 #454 こんばんは、新年おめでとうございます。 このコードのどこがおかしいのか、教えていただけませんか?void CloseOrder(int type) { bool ret; int error=0; double price=0.0; int total=OrdersTotal(); if(!disabled(_Symbol)) { Print(rezult); return; } for(int i=total-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS))continue; if(OrderSymbol()!=_Symbol)continue; if(OrderMagicNumber()!=Magic)continue; if(OrderType()>1)continue; if(OrderType()!=type)continue; int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS); if(OrderType()==OP_BUY)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_BID),digits); if(OrderType()==OP_SELL)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK),digits); if(NormalizeDouble(NormalizePrice(OrderSymbol(),price),digits)!=price)continue; ret=OrderClose(OrderTicket(),OrderLots(),price,Slippage,clrLawnGreen); if(!ret) { error=GetLastError(); rezult=StringConcatenate(OrderSymbol(),": error close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType())," №- ",error," ",ErrorDescription(error)); Print(rezult); } else { rezult=StringConcatenate(OrderSymbol(),": close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType())); Print(rezult); } } } Questions from Beginners MQL4 MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 自動売買選手権2007:エキスパートにありがちなミス Renat Akhtyamov 2016.12.30 17:06 #455 Movlat Baghiyev: 新年おめでとうございます!このコードのどこがおかしいのか、教えていただけませんか?ルートでロジックを変更することをお勧めしますすなわち、売りが何本、買いが何本というように、オープンオーダーの記録を残すことが必要ですそして、これらの考察に基づいて、注文を管理すること、つまり、注文を開いたり閉じたりすることです。 wishmast 2016.12.31 09:23 #456 ポジションを建てる条件でないはずなのに、なぜEAがたくさん注文を出すのか分かりませんが、出した後にまた注文を出します。私のEAは、ポジションを開かせたくないのに、なぜ多くの注文を開くのか理解できませんが、私が開いた後に再び開きます。for(int i=OrdersTotal()-1;i>=0;i--)if(OrderSelect(i,SELECT_BY_POS))if(OrderMagicNumber()==magic) // 私たちのMagicなら{if(OrderType()==OP_BUY) sdel_b++; // baiをカウントする。if(OrderType()==OP_SELL) sdel_s++; // 売り数を数える。if(OrderType()==OP_BUYSTOP) otl_b++; // バイストップ待ちを数えるif(OrderType()==OP_SELLSTOP) otl_s++; // 保留中のセルストップをカウントする。}// 注文受付中if(Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0); // 時刻で、保留中の注文がない場合。{OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); // 保留注文を出す。OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //} Questions from Beginners MQL4 MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 [ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you Sergey Gritsay 2016.12.31 14:00 #457 wishmast:ポジションを建てる条件でないはずなのに、なぜEAがたくさん注文を出すのか分かりませんが、出した後にまた注文を出します。私のEAは、ポジションを開かせたくないのに、なぜ多くの注文を開くのか理解できませんが、私が開いた後に再び開きます。for(int i=OrdersTotal()-1;i>=0;i--)if(OrderSelect(i,SELECT_BY_POS))if(OrderMagicNumber()==magic) // 私たちのMagicなら{if(OrderType()==OP_BUY) sdel_b++; // baiをカウントする。if(OrderType()==OP_SELL) sdel_s++; // 売り数を数える。if(OrderType()==OP_BUYSTOP) otl_b++; // バイストップ待ちを数えるif(OrderType()==OP_SELLSTOP) otl_s++; // 保留中のセルストップをカウントする。}// 注文受付中if(Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0); // 時刻で、保留中の注文がない場合。{OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); //ポジションを取る。OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //}お試しください sdel_b=0; sdel_s=0; otl_b=0; otl_s=0; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderMagicNumber()==magic) // Если наш Меджик { if(OrderType()==OP_BUY) sdel_b++; // Считаем баи if(OrderType()==OP_SELL) sdel_s++; // Считаем селы if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы } } }.... Questions from Beginners MQL4 MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 エラーに悩まされ、取引業務がない wishmast 2016.12.31 15:03 #458 Sergey Gritsay:お試しください sdel_b=0; sdel_s=0; otl_b=0; otl_s=0; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderMagicNumber()==magic) // Если наш Меджик { if(OrderType()==OP_BUY) sdel_b++; // Считаем баи if(OrderType()==OP_SELL) sdel_s++; // Считаем селы if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы } } }.... 今もなお、多くの注文を受け付けている148未決済・保留の注文 数が、ブローカーが設定した上限に達した。 Sergey Gritsay 2016.12.31 15:42 #459 wishmast: 今でも多くの注文を受け付けています148未決済・保留の注文 数が、ブローカーが設定した上限に達した。 どこを間違えているのかわかりにくいので、コード全体をお送りください。 Andrei Sokolov 2016.12.31 17:14 #460 ごあいさつ皆さん、明けましておめでとうございます。EAを実行した後に最適化しようとすると、結果や最適化グラフが空白になり、ログに書き込まれます。最適化中に2つのパスが行わ れましたが、2つの結果は重要でないとして 破棄されました。遺伝的アルゴリズム"のチェックを外しても、解決しない。テスターにとっては取るに足らない結果に見えるのはわかりますが、どうすればそこにあるものを見ることができるのでしょうか。しかも、テスト中のExpert Advisorは同期間(1年間)損をしないにもかかわらず、±20%という結果です。 1...394041424344454647484950515253...260 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
..........
ticket=OrderSend(.....);//приказ и запоминаем тикет ордера
if(ticket>0)//открылась
{
//действия с тикетом
}
より正確には、次のようになります。
{
//действия с тикетом
}
OrderSend- "トレードサーバーがオーダーに割り当てたチケット番号を返すか、失敗した場合は-1を返します 。"
テスターでも最初のチケット番号は0でなく1ですが。
より正確には、そうなります。
{
//действия с тикетом
}
OrderSend - "トレードサーバーがオーダーに割り当てたチケット番号を返すか、失敗した場合は-1を返します 。"
テスターでも最初のチケット番号は0でなく1ですが。
行方不明のオクサナに会えてとてもうれしいです ))
確かに、テスターでもDCサーバーでもチケットは1から始まりますが、DCで1が獲れることはないでしょう。不等号と-1を比較するのは正しくありません。実アカウントが 1234567を返したらどうする?
{
//действия с тикетом
}
// так верно
だから、テスターではチケットは1より小さくはできないし、実世界ではなおさらだ
ゼロが1より小さい場合、両方の条件が正しく、一方だけが比較のため、もう一方は除外のためです。
慣れたとはいえ
int ticketbuy = OrderSend(sy,OP_BUY,ll,MarketInfo(sy,MODE_ASK),Slippage,0,0,Comments,mn,0,BuyColor);
if(ticketbuy<0)
Print(sy," OpenPosition. OrderSend Buy fail #",GetLastError());
else
Print(sy," OpenPosition. OrderSend Buy successfully");
しかし、私のを考えると、条件はすべて正しく、ロジックが違うだけです)
{
bool ret;
int error=0;
double price=0.0;
int total=OrdersTotal();
if(!disabled(_Symbol))
{
Print(rezult);
return;
}
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderType()>1)continue;
if(OrderType()!=type)continue;
int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
if(OrderType()==OP_BUY)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_BID),digits);
if(OrderType()==OP_SELL)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK),digits);
if(NormalizeDouble(NormalizePrice(OrderSymbol(),price),digits)!=price)continue;
ret=OrderClose(OrderTicket(),OrderLots(),price,Slippage,clrLawnGreen);
if(!ret)
{
error=GetLastError();
rezult=StringConcatenate(OrderSymbol(),": error close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType())," №- ",error," ",ErrorDescription(error));
Print(rezult);
}
else
{
rezult=StringConcatenate(OrderSymbol(),": close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType()));
Print(rezult);
}
}
}
新年おめでとうございます!このコードのどこがおかしいのか、教えていただけませんか?
ルートでロジックを変更することをお勧めします
すなわち、売りが何本、買いが何本というように、オープンオーダーの記録を残すことが必要です
そして、これらの考察に基づいて、注文を管理すること、つまり、注文を開いたり閉じたりすることです。
ポジションを建てる条件でないはずなのに、なぜEAがたくさん注文を出すのか分かりませんが、出した後にまた注文を出します。
私のEAは、ポジションを開かせたくないのに、なぜ多くの注文を開くのか理解できませんが、私が開いた後に再び開きます。
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // 私たちのMagicなら
{
if(OrderType()==OP_BUY) sdel_b++; // baiをカウントする。
if(OrderType()==OP_SELL) sdel_s++; // 売り数を数える。
if(OrderType()==OP_BUYSTOP) otl_b++; // バイストップ待ちを数える
if(OrderType()==OP_SELLSTOP) otl_s++; // 保留中のセルストップをカウントする。
}
// 注文受付中
if(Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0); // 時刻で、保留中の注文がない場合。
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); // 保留注文を出す。
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
ポジションを建てる条件でないはずなのに、なぜEAがたくさん注文を出すのか分かりませんが、出した後にまた注文を出します。
私のEAは、ポジションを開かせたくないのに、なぜ多くの注文を開くのか理解できませんが、私が開いた後に再び開きます。
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // 私たちのMagicなら
{
if(OrderType()==OP_BUY) sdel_b++; // baiをカウントする。
if(OrderType()==OP_SELL) sdel_s++; // 売り数を数える。
if(OrderType()==OP_BUYSTOP) otl_b++; // バイストップ待ちを数える
if(OrderType()==OP_SELLSTOP) otl_s++; // 保留中のセルストップをカウントする。
}
// 注文受付中
if(Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0); // 時刻で、保留中の注文がない場合。
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); //ポジションを取る。
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
お試しください
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
お試しください
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
今でも多くの注文を受け付けています
ごあいさつ皆さん、明けましておめでとうございます。
EAを実行した後に最適化しようとすると、結果や最適化グラフが空白になり、ログに書き込まれます。
最適化中に2つのパスが行わ れましたが、2つの結果は重要でないとして 破棄されました。
遺伝的アルゴリズム"のチェックを外しても、解決しない。テスターにとっては取るに足らない結果に見えるのはわかりますが、どうすればそこにあるものを見ることができるのでしょうか。しかも、テスト中のExpert Advisorは同期間(1年間)損をしないにもかかわらず、±20%という結果です。