コーディングの方法は? - ページ 111

 
MrPip:
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);

}

 
 
mifiglo:
こんにちは、トレーダー仲間です。

カスタムインジケータからExpert Advisorを開発する際に、ちょっとした問題が発生しました。「iCustom」関数を試しましたが、私のインジケータはいつも同じ値を返します。

21473...のような値を返します。

私はEAが売りと買いの矢印シグナルが生成されたときに認識することができ、それが対応するトレードアクションを実行する必要があります(すなわち、インジケータが上と言うとき買い、下と言うとき売り)したいのです。

このインジケーターのコードですが、どなたか早急に解決していただけると助かります。

iCustom()関数を 使ったコードラインも投稿してください。

FerruFx

 

すみません、これしかないんです...。

 
 

Rsi Ea

これは私の最初のEAです。3つの時間枠で交差する2つのRSIを使用します。私はこのEAがクロスに対してトレードを行うことに問題があります。売るべき時に買い、買うべき時に売っています。どなたかコードを見て、どこで間違えたのか教えていただけないでしょうか。私は何も間違っていることを見ることができませんでした。

私は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