どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 758 1...751752753754755756757758759760761762763764765...1178 新しいコメント Artyom Trishkin 2014.10.30 05:25 #7571 Ozero:ブラケット裏の「;」を通過させる。プログラムは動作しますが、時々エラー4108で失敗します。オゼロ。ヘルプを開くと、ランタイムエラーが 表示され、私たちは見ています。 4108 err_invalid_ticket チケット番号に誤りがある。考えて、探して...。 MegaHunter 2014.10.30 05:26 #7572 人々が区別し、区別するために、独自の受注と各通貨で取引する必要があるヘルプ + 価格がさらに遠くロールバックした場合、オープン順序の後に別の順序を開くことができる最初と同じように。//+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double MACDOpenLevel=3; extern double MACDCloseLevel=2; extern double MATrendPeriod=26; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt=0, ticket, total; // первичные проверки данных // важно удостовериться что эксперт работает на нормальном графике и // пользователь правильно выставил внешние переменные (Lots, StopLoss, // TakeProfit, TrailingStop) // в нашем случае проверяем только TakeProfit if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit<10) { Print("TakeProfit less than 10"); return(0); // проверяем TakeProfit } // ради упрощения и ускорения кода, сохраним необходимые // данные индикаторов во временных переменных MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); total=OrdersTotal(); if(total<1) { // нет ни одного открытого ордера if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // проверяем на возможность встать в длинную позицию (BUY) if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } // проверяем на возможность встать в короткую позицию (SELL) if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } // переходим к важной части эксперта - контролю открытых позиций // 'важно правильно войти в рынок, но выйти - еще важнее...' for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // это открытая позиция? OP_BUY или OP_SELL OrderSymbol()==Symbol()) // инструмент совпадает? { if(OrderType()==OP_BUY) // открыта длинная позиция { // проверим, может уже пора закрываться? if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // закрываем позицию return(0); // выходим } // проверим - может можно/нужно уже трейлинг стоп ставить? if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop, OrderTakeProfit(),0,Green); return(0); } } } } else // иначе это короткая позиция { // проверим, может уже пора закрываться? if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // закрываем позицию return(0); // выходим } // проверим - может можно/нужно уже трейлинг стоп ставить? if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop, OrderTakeProfit(),0,Red); return(0); } } } } } } return(0); } // конец. Alexey Kravchenko 2014.10.30 05:33 #7573 皆さん、こんにちは。今気づいたのですが、NormalizeDoubleの 動作がおかしいです。つまり、Expert Advisorは問題なく動作し、エラーも出ないが、Strategy Testerのログが非常におかしいのである。説明します。この関数を使って利益を計算しています。私はNormalizeDouble(Profit,Digits)がすべきと思うことをする。そして、Print(" profit=",DoubleToStrMorePrecision(Profit,8)) を実行します。その結果、ログには「profit=0.88881912」というメッセージが表示されました。0.88881000となるようですが、どうでしょうか?それとも、私がバカで何か間違ったことをしているのでしょうか? Artyom Trishkin 2014.10.30 05:36 #7574 goodearth:皆さん、こんにちは。今気づいたのですが、NormalizeDoubleの動作がおかしいです。つまり、Expert Advisorは問題なく動作し、エラーも出ないが、Strategy Testerのログが非常におかしいのである。説明します。この関数を使って利益を計算しています。私はNormalizeDouble(Profit,Digits)がすべきと思うことをする。そして、Print(" profit=",DoubleToStrMorePrecision(Profit,8)) を実行します。その結果、ログには「profit=0.88881912」と表示されています。0.88881000となるようですが、どうでしょうか?それとも、私がバカで何か間違ったことをしているのでしょうか?トレードオーダーに Profitの値はありますか? Alexey Kravchenko 2014.10.30 05:43 #7575 artmedia70: プロフィットバリューはトレードオーダーに参加していますか?はい、もちろんです。そしてノーミス :-)だから、びっくりしたんです。Build 735を持っています。取引はデモで。割り当て 操作を忘れていました :-)。"Profit=NormalizeDouble(Profit,Digits) "です。しかし、なぜEAがエラーを表示しないのか、まだ理解できていません ))もしかしたら、サーバーが自動的に丸くなるのかもしれませんが......。NormalizeDoubleは関数ではなくプロシージャなのでは:-)。 Boris 2014.10.30 06:17 #7576 Ozero:括弧の後ろに"; "をつける。 プログラムは動作しますが、時々エラー4108で失敗します。オゼロ。むしろ、削除する必要がある! Artyom Trishkin 2014.10.30 06:35 #7577 borilunad:むしろ削除すべき!ボリス 直接コードを見せた方がいいよ、眠くて覚えられなかったから...。;)ResetLastError(); if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("Чё-та не закрылася позиция. Фигня вот такая происходит: "+GetLastError()); Boris 2014.10.30 07:05 #7578 artmedia70:ボリス 直接コードを見せたほうがいいよ、眠くて覚えられなかったから...。;)著作権を乱用するつもりはなかったんだ!;)そして、マジで何かが刺さってない!?でも、これからやってみます!ResetLastError(); if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("");そして今、それが功を奏している!おかしいな! visnu 2014.10.30 11:35 #7579 こんにちは解決策をお教えください。エディタの500回目のビルドでエラーなくコンパイルされるEAがあります。しかし、新しいバージョンでは、エラーが発生します。こんなエラーが出ています。bool TP?=true; // ошибка '?' - semicolon expected そして、これは2回。if(TP?) // ')' - unexpected token // ')' - ':' colon sign expected 新バージョンと旧バージョンのマニュアルに目を通しましたが、クエスチョンマークについて何も書かれていませんでした。質問:これらの操作は何を意味し、どのように修正すればコードが正常にコンパイルできるようになるのでしょうか?ありがとうございました。 削除済み 2014.10.30 14:26 #7580 こんにちは!時々、ifle演算子が効かないことがあるのですが、どうしてか教えてください。 以下はその例です。double H3=ObjectGet ("H3 line", OBJPROP_PRICE1); int start() { double price = Bid; if (price==H3) { Alert ("Урааааа ", Symbol()); } return(0); }Where: H3はレベルの 価格値 priceは現在の価格 結果は、価格がこのレベルに達する(時にはそこで止まる)のですが、Alertは発動しません。 エラーが何なのか教えてください。 1...751752753754755756757758759760761762763764765...1178 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ブラケット裏の「;」を通過させる。
プログラムは動作しますが、時々エラー4108で失敗します。
オゼロ。
ヘルプを開くと、ランタイムエラーが 表示され、私たちは見ています。
4108
err_invalid_ticket
チケット番号に誤りがある。
考えて、探して...。
人々が区別し、区別するために、独自の受注と各通貨で取引する必要があるヘルプ + 価格がさらに遠くロールバックした場合、オープン順序の後に別の順序を開くことができる最初と同じように。
皆さん、こんにちは。
今気づいたのですが、NormalizeDoubleの 動作がおかしいです。
つまり、Expert Advisorは問題なく動作し、エラーも出ないが、Strategy Testerのログが非常におかしいのである。
説明します。
この関数を使って利益を計算しています。私はNormalizeDouble(Profit,Digits)がすべきと思うことをする。
そして、Print(" profit=",DoubleToStrMorePrecision(Profit,8)) を実行します。
その結果、ログには「profit=0.88881912」というメッセージが表示されました。0.88881000となるようですが、どうでしょうか?
それとも、私がバカで何か間違ったことをしているのでしょうか?
皆さん、こんにちは。
今気づいたのですが、NormalizeDoubleの動作がおかしいです。
つまり、Expert Advisorは問題なく動作し、エラーも出ないが、Strategy Testerのログが非常におかしいのである。
説明します。
この関数を使って利益を計算しています。私はNormalizeDouble(Profit,Digits)がすべきと思うことをする。
そして、Print(" profit=",DoubleToStrMorePrecision(Profit,8)) を実行します。
その結果、ログには「profit=0.88881912」と表示されています。0.88881000となるようですが、どうでしょうか?
それとも、私がバカで何か間違ったことをしているのでしょうか?
プロフィットバリューはトレードオーダーに参加していますか?
はい、もちろんです。そしてノーミス :-)だから、びっくりしたんです。
Build 735を持っています。
取引はデモで。
割り当て 操作を忘れていました :-)。"Profit=NormalizeDouble(Profit,Digits) "です。
しかし、なぜEAがエラーを表示しないのか、まだ理解できていません ))
もしかしたら、サーバーが自動的に丸くなるのかもしれませんが......。
NormalizeDoubleは関数ではなくプロシージャなのでは:-)。
括弧の後ろに"; "をつける。
プログラムは動作しますが、時々エラー4108で失敗します。
オゼロ。
むしろ、削除する必要がある!
むしろ削除すべき!
ボリス 直接コードを見せた方がいいよ、眠くて覚えられなかったから...。;)
ボリス 直接コードを見せたほうがいいよ、眠くて覚えられなかったから...。;)
著作権を乱用するつもりはなかったんだ!;)
そして、マジで何かが刺さってない!?でも、これからやってみます!
そして今、それが功を奏している!おかしいな!
こんにちは!時々、ifle演算子が効かないことがあるのですが、どうしてか教えてください。
以下はその例です。
Where:
H3はレベルの 価格値
priceは現在の価格
結果は、価格がこのレベルに達する(時にはそこで止まる)のですが、Alertは発動しません。
エラーが何なのか教えてください。