コーディングの方法は? - ページ 111 1...104105106107108109110111112113114115116117118...347 新しいコメント 削除済み 2008.07.26 03:02 #1101 MrPip: OrderComment()を使ってトレードを識別するときは、注意が必要です。時々、ブローカーはコメントに文字を追加します。を使うのがベストです。 if (StringFind(OrderComment(), UserComment, 0) > 0) { // OrderCommentで見つかったUserCommentで特定されるオーダー } の代わりに if (OrderComment() == UserComment) { // 注文はUserCommentで特定されるかもしれない // もしOrderCommentがブローカーによって変更されなかったら } ロバート その通りです.また、EAでコード化された元のコメントが長すぎて、プラットフォームによってtroncatedされることもあります(コメントの残りが「メモリ」にあるかどうかは分かりませんが、コメント欄には表示されません)。 FerruFx pete42 2008.07.27 06:20 #1102 EAについて教えてください こんにちは。 私はロングとショートのポジションを同時にオープンするEAに取り組んでいますが、この問題に直面しています。両方のタイプのポジションがオープンしているとき、例えば最初のものがショートで2つ目がロングです。EAはショートがまだオープンしている場合はロングポジションを閉じません。ショートが閉じられるのを待って、条件が満たされたらロングを閉じます。その逆も同じです。 以下はEAでオープンポジションを閉じるべき部分です。 //---- オープンポジションをクローズする for(int cnt=0; cnt<total; cnt++) { OrderSelect(cnt, SELECT_BY_POS); { //-- ロングをクローズ if(OrderSymbol() == Symbol() && OrderType() ==OP_BUY && rsi1>75 && rsi<75) { OrderClose(OrderTicket(),OrderLots(),Bid,5,Green)。 LotL=Lot; } //-- ショートを閉じる if(OrderSymbol() == Symbol() && OrderType() ==OP_SELL && rsi125) { OrderClose(OrderTicket(),OrderLots(),Ask,5,赤); LotS=Lot; } } } *ここで、rsi1 は以前の rsi で、rsi は現在の読みです。 *LotLとLotSは元のLotの倍数で、最大3ポジションずつ開くように設定しているので、1種類のオープンポジションをクローズすると、LotLとLotSは元のサイズにリセットされます。 ループ部分のEAがすべてのオープンポジションを読み込まず、最初の1つだけを読み込んでいるのだと思います...これを修正する手助けがあれば本当に感謝します! 乾杯 ピート 10ポイント 3.mq4 コーディングのヘルプ [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 削除済み 2008.07.27 18:36 #1103 Pips to activate Trailing stop」機能を追加しようとしています。私が変更したのは赤の部分です。他に何を追加する必要があるのでしょうか? extern string Remark1 = "== Main Settings =="; extern int MagicNumber = 54321; extern bool SignalMail = False; extern bool EachTickMode = true; extern double Lots = 4; extern int Slippage = 2; extern bool UseStopLoss = false; extern int StopLoss = 100; extern bool UseTakeProfit = false; extern int TakeProfit = 15; extern bool UseTrailingStop = true; extern int TrailingStop = 45; extern double Pips_Activate_TS = 5; extern bool MoveStopOnce = False; extern int MoveStopWhenPrice = 50; extern int MoveStopTo = 1; extern int MaxConcurrentTrades = 2; //Version 2.01 int BarCount; int Current; bool TickCheck = False; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { BarCount = Bars; if (EachTickMode) Current = 0; else Current = 1; return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int Order = SIGNAL_NONE; int Total, Ticket; double StopLossLevel, TakeProfitLevel; if (EachTickMode && Bars != BarCount) TickCheck = False; Total = OrdersTotal(); Order = SIGNAL_NONE; //+------------------------------------------------------------------+ //| Variable Begin | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Variable End | //+------------------------------------------------------------------+ //Check position bool IsTrade = False; for (int i = 0; i < Total; i ++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { IsTrade = True; if(OrderType() == OP_BUY) { //Close //+------------------------------------------------------------------+ //| Signal Begin(Exit Buy) | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Signal End(Exit Buy) | //+------------------------------------------------------------------+ if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy"); if (!EachTickMode) BarCount = Bars; IsTrade = False; continue; } //MoveOnce if(MoveStopOnce && MoveStopWhenPrice > 0) { if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) { if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) { OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red); if (!EachTickMode) BarCount = Bars; continue; } } } //Trailing stop if(UseTrailingStop && TrailingStop > 0) { if(Bid - OrderOpenPrice() > Point * TrailingStop) { if(OrderStopLoss() < Bid - Point * TrailingStop) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen); if (!EachTickMode) BarCount = Bars; continue; } } } } else { //Close //+------------------------------------------------------------------+ //| Signal End(Exit Sell) | //+------------------------------------------------------------------+ if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell"); if (!EachTickMode) BarCount = Bars; IsTrade = False; continue; } //MoveOnce if(MoveStopOnce && MoveStopWhenPrice > 0) { if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) { if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) { OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red); if (!EachTickMode) BarCount = Bars; continue; } } } //Trailing stop if(UseTrailingStop && TrailingStop > 0) { if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) { if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange); if (!EachTickMode) BarCount = Bars; continue; } } } } } } //+------------------------------------------------------------------+ //| Signal Begin(Entry) | //+------------------------------------------------------------------+ if(Open[0] > Open[0+1] && Open[0+1] >= Open[0+2] && Open[0+2]>= Open[0+3] && Open[0+3] >= Open[0+4] && Open[0+4] >= Open[0+5] && Open[0+5] >= Open[0+6]) Order = SIGNAL_SELL; if(Open[0] < Open[0+1] && Open[0+1] <= Open[0+2] && Open[0+2]<= Open[0+3] && Open[0+3] <= Open[0+4] && Open[0+4] <= Open[0+5] && Open[0+5] <= Open[0+6]) Order = SIGNAL_BUY; //+------------------------------------------------------------------+ //| Signal End | //+------------------------------------------------------------------+ //Buy if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { if(DecideToOpenTrade(OP_BUY) && TradeSlotsAvailable()) { //Check free margin if (AccountFreeMargin() < (1000 * Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0; if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0; Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue); if(Ticket > 0) { if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) { Print("BUY order opened : ", OrderOpenPrice()); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy"); } else { Print("Error opening BUY order : ", GetLastError()); } } if (EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } } //Sell if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { if(DecideToOpenTrade(OP_SELL) && TradeSlotsAvailable()) { //Check free margin if (AccountFreeMargin() < (1000 * Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0; if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0; Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink); if(Ticket > 0) { if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) { Print("SELL order opened : ", OrderOpenPrice()); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell"); } else { Print("Error opening SELL order : ", GetLastError()); } } if (EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } } if (!EachTickMode) BarCount = Bars; return(0); } アスク! コーディングのヘルプ ICustom機能 削除済み 2008.07.30 13:40 #1104 削除済み 2008.07.31 02:14 #1105 mifiglo: こんにちは、トレーダー仲間です。カスタムインジケータからExpert Advisorを開発する際に、ちょっとした問題が発生しました。「iCustom」関数を試しましたが、私のインジケータはいつも同じ値を返します。 21473...のような値を返します。 私はEAが売りと買いの矢印シグナルが生成されたときに認識することができ、それが対応するトレードアクションを実行する必要があります(すなわち、インジケータが上と言うとき買い、下と言うとき売り)したいのです。 このインジケーターのコードですが、どなたか早急に解決していただけると助かります。 iCustom()関数を 使ったコードラインも投稿してください。 FerruFx masternico 2008.07.31 13:17 #1106 すみません、これしかないんです...。 削除済み 2008.07.31 19:41 #1107 willmalou 2008.07.31 20:53 #1108 Rsi Ea これは私の最初のEAです。3つの時間枠で交差する2つのRSIを使用します。私はこのEAがクロスに対してトレードを行うことに問題があります。売るべき時に買い、買うべき時に売っています。どなたかコードを見て、どこで間違えたのか教えていただけないでしょうか。私は何も間違っていることを見ることができませんでした。 私はEAと問題の写真を添付しています。 ファイル: rsi_test.mq4 11 kb rsi_wrong_entry.gif 60 kb BigA 2008.07.31 22:51 #1109 EAコードのヘルプが必要です 皆さん、こんにちは。 ご存知のように、FX市場は24時間体制なので、PCの前に座らずに一晩中トレードするのは気が引けます。そこで、価格が自分の好きな方向に動いたときに取引を保護するプログラムが一番良い方法だと考えています。例えば、5ロット開設した場合、利益が50ピップス以上になったら、自動的にストップロスをブレイクイーブンに移動させる。利益が100pipsを超えたら30pips、200pipsを超えたら50pipsを保護するように動く。 自分でコーディングしてみました。しかし、私はそれを私のチャートにドラッグして、それを取引ライブに設定するときに動作しません。どなたか、私のコードを見て修正するのを手伝っていただけませんか?ありがとうございます。 #プロパティ コピーライト "x li" #property link "" (プロパティリンク) #property show_confirm //---- 入力パラメータ extern int target1 =50; extern int target2 =100; extern int target3 =150; extern int target4 =200; extern int target5 =300; extern int protect1 =0; extern int protect2 =5; extern int protect3 =50; extern int protect4 =100。 //+-----------------------------------------------------------------------------+ //| script "move stoploss to protect(50->0;100->5;150->50;200->50;300->100)" | //+-----------------------------------------------------------------------------+ int start() { bool result; double stop_loss,point,EntryPrice,profitを指定します。 int cmd,total,error,i; //---- total=OrdersTotal(); point=MarketInfo(Symbol(),MODE_POINT)。 //---- for(i=0; i<total; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { cmd=OrderType(); EntryPrice=OrderOpenPrice()。 //---- 買い注文が考慮される if(cmd==OP_BUY) { profit=Bid-EntryPrice。 if(profit>target1*point && profit<target2*point) { stop_loss=EntryPrice+protect1*point。 result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)。 } if(profit>target2*point && profit<target3*point) { stop_loss=EntryPrice+protect2*point。 result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。 } if(profit>target3*point && profit<target4*point) { stop_loss=EntryPrice+protect3*point。 result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。 } if(profit>target4*point && profit<target5*point) { stop_loss=EntryPrice+protect3*point。 result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。 } if(profit>target5*point) { stop_loss=EntryPrice+protect4*point。 result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。 } } //----売り注文 を考慮する if(cmd==OP_SELL) { profit=EntryPrice-Ask; if(profit>target1*point && profit<target2*point) { stop_loss=EntryPrice-protect1*point。 result=OrderModify(OrderTicket(),0,stop_loss,0,CLR_NONE)となります。 } if(profit>target2*point && profit<target3*point) { stop_loss=EntryPrice-protect2*point。 result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。 } if(profit>target3*point && profit<target4*point) { stop_loss=EntryPrice-protect3*point。 result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。 } if(profit>target4*point && profit<target5*point) { stop_loss=EntryPrice-protect3*point。 result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。 } if(profit>target5*point) { stop_loss=EntryPrice-protect4*point。 result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。 } } } else { Print("Error when order select ", GetLastError()); break; }. } //---- return(0); } //+------------------------------------------------------------------+ How to code? simple code to modify MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 BigBe 2008.08.01 00:41 #1110 Rsi Ea 取引開始と取引終了に同じ変数を使用する理由が分かりませんが、うまくいくかもしれません。 これが問題なのかもしれません。 "Order "はグローバル変数です。 つまり、Start関数を 実行するたびに、最後に割り当てられた値に設定され、次の実行の開始時にその値が使用されます。 これをローカルにする(Start関数内に移動する)ことで、解決できるかもしれません。 そうでない場合は、最後に使用した後にリセットする必要があります。 グッドハンティング。 Big Be 1...104105106107108109110111112113114115116117118...347 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
OrderComment()を使ってトレードを識別するときは、注意が必要です。時々、ブローカーはコメントに文字を追加します。
を使うのがベストです。
if (StringFind(OrderComment(), UserComment, 0) > 0)
{
// OrderCommentで見つかったUserCommentで特定されるオーダー
}
の代わりに
if (OrderComment() == UserComment)
{
// 注文はUserCommentで特定されるかもしれない
// もしOrderCommentがブローカーによって変更されなかったら
}
ロバートその通りです.また、EAでコード化された元のコメントが長すぎて、プラットフォームによってtroncatedされることもあります(コメントの残りが「メモリ」にあるかどうかは分かりませんが、コメント欄には表示されません)。
FerruFx
EAについて教えてください
こんにちは。
私はロングとショートのポジションを同時にオープンするEAに取り組んでいますが、この問題に直面しています。両方のタイプのポジションがオープンしているとき、例えば最初のものがショートで2つ目がロングです。EAはショートがまだオープンしている場合はロングポジションを閉じません。ショートが閉じられるのを待って、条件が満たされたらロングを閉じます。その逆も同じです。
以下はEAでオープンポジションを閉じるべき部分です。
//---- オープンポジションをクローズする
for(int cnt=0; cnt<total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
{
//-- ロングをクローズ
if(OrderSymbol() == Symbol() && OrderType() ==OP_BUY && rsi1>75 && rsi<75)
{
OrderClose(OrderTicket(),OrderLots(),Bid,5,Green)。
LotL=Lot;
}
//-- ショートを閉じる
if(OrderSymbol() == Symbol() && OrderType() ==OP_SELL && rsi125)
{
OrderClose(OrderTicket(),OrderLots(),Ask,5,赤);
LotS=Lot;
}
}
}
*ここで、rsi1 は以前の rsi で、rsi は現在の読みです。
*LotLとLotSは元のLotの倍数で、最大3ポジションずつ開くように設定しているので、1種類のオープンポジションをクローズすると、LotLとLotSは元のサイズにリセットされます。
ループ部分のEAがすべてのオープンポジションを読み込まず、最初の1つだけを読み込んでいるのだと思います...これを修正する手助けがあれば本当に感謝します!
乾杯
ピート
Pips to activate Trailing stop」機能を追加しようとしています。私が変更したのは赤の部分です。他に何を追加する必要があるのでしょうか?
extern string Remark1 = "== Main Settings ==";
extern int MagicNumber = 54321;
extern bool SignalMail = False;
extern bool EachTickMode = true;
extern double Lots = 4;
extern int Slippage = 2;
extern bool UseStopLoss = false;
extern int StopLoss = 100;
extern bool UseTakeProfit = false;
extern int TakeProfit = 15;
extern bool UseTrailingStop = true;
extern int TrailingStop = 45;
extern double Pips_Activate_TS = 5;
extern bool MoveStopOnce = False;
extern int MoveStopWhenPrice = 50;
extern int MoveStopTo = 1;
extern int MaxConcurrentTrades = 2;
//Version 2.01
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if(Open[0] > Open[0+1] &&
Open[0+1] >= Open[0+2] &&
Open[0+2]>= Open[0+3] &&
Open[0+3] >= Open[0+4] &&
Open[0+4] >= Open[0+5] &&
Open[0+5] >= Open[0+6]) Order = SIGNAL_SELL;
if(Open[0] < Open[0+1] &&
Open[0+1] <= Open[0+2] &&
Open[0+2]<= Open[0+3] &&
Open[0+3] <= Open[0+4] &&
Open[0+4] <= Open[0+5] &&
Open[0+5] <= Open[0+6]) Order = SIGNAL_BUY;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(DecideToOpenTrade(OP_BUY) && TradeSlotsAvailable()) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(DecideToOpenTrade(OP_SELL) && TradeSlotsAvailable()) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
こんにちは、トレーダー仲間です。
カスタムインジケータからExpert Advisorを開発する際に、ちょっとした問題が発生しました。「iCustom」関数を試しましたが、私のインジケータはいつも同じ値を返します。
21473...のような値を返します。
私はEAが売りと買いの矢印シグナルが生成されたときに認識することができ、それが対応するトレードアクションを実行する必要があります(すなわち、インジケータが上と言うとき買い、下と言うとき売り)したいのです。
このインジケーターのコードですが、どなたか早急に解決していただけると助かります。iCustom()関数を 使ったコードラインも投稿してください。
FerruFx
すみません、これしかないんです...。![](https://c.mql5.com/forextsd/smiles/confused_smile.png)
Rsi Ea
これは私の最初のEAです。3つの時間枠で交差する2つのRSIを使用します。私はこのEAがクロスに対してトレードを行うことに問題があります。売るべき時に買い、買うべき時に売っています。どなたかコードを見て、どこで間違えたのか教えていただけないでしょうか。私は何も間違っていることを見ることができませんでした。![](https://c.mql5.com/forextsd/smiles/cry_smile.png)
私はEAと問題の写真を添付しています。
EAコードのヘルプが必要です
皆さん、こんにちは。
ご存知のように、FX市場は24時間体制なので、PCの前に座らずに一晩中トレードするのは気が引けます。そこで、価格が自分の好きな方向に動いたときに取引を保護するプログラムが一番良い方法だと考えています。例えば、5ロット開設した場合、利益が50ピップス以上になったら、自動的にストップロスをブレイクイーブンに移動させる。利益が100pipsを超えたら30pips、200pipsを超えたら50pipsを保護するように動く。
自分でコーディングしてみました。しかし、私はそれを私のチャートにドラッグして、それを取引ライブに設定するときに動作しません。どなたか、私のコードを見て修正するのを手伝っていただけませんか?ありがとうございます。
#プロパティ コピーライト "x li"
#property link "" (プロパティリンク)
#property show_confirm
//---- 入力パラメータ
extern int target1 =50;
extern int target2 =100;
extern int target3 =150;
extern int target4 =200;
extern int target5 =300;
extern int protect1 =0;
extern int protect2 =5;
extern int protect3 =50;
extern int protect4 =100。
//+-----------------------------------------------------------------------------+
//| script "move stoploss to protect(50->0;100->5;150->50;200->50;300->100)" |
//+-----------------------------------------------------------------------------+
int start()
{
bool result;
double stop_loss,point,EntryPrice,profitを指定します。
int cmd,total,error,i;
//----
total=OrdersTotal();
point=MarketInfo(Symbol(),MODE_POINT)。
//----
for(i=0; i<total; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
cmd=OrderType();
EntryPrice=OrderOpenPrice()。
//---- 買い注文が考慮される
if(cmd==OP_BUY)
{
profit=Bid-EntryPrice。
if(profit>target1*point && profit<target2*point)
{
stop_loss=EntryPrice+protect1*point。
result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)。
}
if(profit>target2*point && profit<target3*point)
{
stop_loss=EntryPrice+protect2*point。
result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。
}
if(profit>target3*point && profit<target4*point)
{
stop_loss=EntryPrice+protect3*point。
result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。
}
if(profit>target4*point && profit<target5*point)
{
stop_loss=EntryPrice+protect3*point。
result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。
}
if(profit>target5*point)
{
stop_loss=EntryPrice+protect4*point。
result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。
}
}
//----売り注文 を考慮する
if(cmd==OP_SELL)
{
profit=EntryPrice-Ask;
if(profit>target1*point && profit<target2*point)
{
stop_loss=EntryPrice-protect1*point。
result=OrderModify(OrderTicket(),0,stop_loss,0,CLR_NONE)となります。
}
if(profit>target2*point && profit<target3*point)
{
stop_loss=EntryPrice-protect2*point。
result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。
}
if(profit>target3*point && profit<target4*point)
{
stop_loss=EntryPrice-protect3*point。
result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。
}
if(profit>target4*point && profit<target5*point)
{
stop_loss=EntryPrice-protect3*point。
result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。
}
if(profit>target5*point)
{
stop_loss=EntryPrice-protect4*point。
result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE)となります。
}
}
}
else { Print("Error when order select ", GetLastError()); break; }.
}
//----
return(0);
}
//+------------------------------------------------------------------+
Rsi Ea
取引開始と取引終了に同じ変数を使用する理由が分かりませんが、うまくいくかもしれません。
これが問題なのかもしれません。
"Order "はグローバル変数です。 つまり、Start関数を 実行するたびに、最後に割り当てられた値に設定され、次の実行の開始時にその値が使用されます。 これをローカルにする(Start関数内に移動する)ことで、解決できるかもしれません。 そうでない場合は、最後に使用した後にリセットする必要があります。
グッドハンティング。
Big Be