//+----------------------------------------------------------------------------- //| 作成者 : Kim Igor V. 別名 KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------- //| バージョン : 23.04.2009 | //| Description : ストップレベルをロスレスに移動する | //+----------------------------------------------------------------------------- //| Parameters:| //| sy - 楽器名 ( "" - 任意の記号, | //| NULL - 現在の記号 ) | //| op - 操作 ( -1 - 任意の位置 ) | //| mn - MagicNumber ( -1 - 任意のマジック ) | //+--------------------------------------------------------+ void MovingInWL(string sy=NULL, int op=-1, int mn=-1) {
double po,pp,PercentStep,MoveStoplossLevel,StoplossLevel.PercentStep,MoveStoplossLevel,StoplossLevel.PercentStep,MoveStoplossLevel,StoplossLevel.PercentStep, MoveStoplossLevel,MoveStoplossLevel.PercentStep,MoveStoplossLevel,StoplossLevel; int i, k=OrdersTotal();
if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if ((OrderSymbol()==sy || sy=="))&& (op<0 || OrderType()==op)){ if (mn<0 || OrderMagicNumber()==mn) {
po=MarketInfo(OrderSymbol(), MODE_POINT)とする。
if (OrderType()==OP_BUY){ PercentStep=(OrderTakeProfit()-OrderOpenPrice())/po/(138-23); MoveStoplossLevel = OrderOpenPrice() + PercentStep*(76-23); StoplossLevel = OrderOpenPrice() + PercentStep*(51-23); if (OrderStopLoss()-OrderOpenPrice()<StoplossLevel*po) { pp=MarketInfo(OrderSymbol(), MODE_BID); if (pp-OrderOpenPrice()>MoveStoplossLevel*po) { ModifyOrder(-1, OrderOpenPrice()+StoplossLevel*po, -1); }. }
}
if (OrderType()==OP_SELL) { PercentStep=(OrderTakeProfit()-OrderOpenPrice())/po/(138-23); MoveStoplossLevel = OrderOpenPrice() - PercentStep*(76-23); StoplossLevel = OrderOpenPrice() - PercentStep*(51-23) if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<StoplossLevel*po) { pp=MarketInfo(OrderSymbol(), MODE_ASK); if (OrderOpenPrice()-pp>MoveStoplossLevel*po) { ModifyOrder(-1, OrderOpenPrice() -StoplossLevel*po, -1);
splxgf: - ありがとうございました。すべてが時計のように正確に動いています。
以下はIgor Kimの損益分岐コードで、ポイントの代わりに"splxgf: "をパーセントに変換しています。
//+-----------------------------------------------------------------------------
//| 作成者 : Kim Igor V. 別名 KimIV, http://www.kimiv.ru |
//+-----------------------------------------------------------------------------
//| バージョン : 23.04.2009 |
//| Description : ストップレベルをロスレスに移動する |
//+-----------------------------------------------------------------------------
//| Parameters:|
//| sy - 楽器名 ( "" - 任意の記号, |
//| NULL - 現在の記号 ) |
//| op - 操作 ( -1 - 任意の位置 ) |
//| mn - MagicNumber ( -1 - 任意のマジック ) |
//+--------------------------------------------------------+
void MovingInWL(string sy=NULL, int op=-1, int mn=-1) {
double po,pp,PercentStep,MoveStoplossLevel,StoplossLevel.PercentStep,MoveStoplossLevel,StoplossLevel.PercentStep,MoveStoplossLevel,StoplossLevel.PercentStep, MoveStoplossLevel,MoveStoplossLevel.PercentStep,MoveStoplossLevel,StoplossLevel;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if ((OrderSymbol()==sy || sy=="))&& (op<0 || OrderType()==op)){
if (mn<0 || OrderMagicNumber()==mn) {
po=MarketInfo(OrderSymbol(), MODE_POINT)とする。
if (OrderType()==OP_BUY){
PercentStep=(OrderTakeProfit()-OrderOpenPrice())/po/(138-23);
MoveStoplossLevel = OrderOpenPrice() + PercentStep*(76-23);
StoplossLevel = OrderOpenPrice() + PercentStep*(51-23);
if (OrderStopLoss()-OrderOpenPrice()<StoplossLevel*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (pp-OrderOpenPrice()>MoveStoplossLevel*po) {
ModifyOrder(-1, OrderOpenPrice()+StoplossLevel*po, -1);
}.
}
}
if (OrderType()==OP_SELL) {
PercentStep=(OrderTakeProfit()-OrderOpenPrice())/po/(138-23);
MoveStoplossLevel = OrderOpenPrice() - PercentStep*(76-23);
StoplossLevel = OrderOpenPrice() - PercentStep*(51-23)
if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<StoplossLevel*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pp>MoveStoplossLevel*po) {
ModifyOrder(-1, OrderOpenPrice() -StoplossLevel*po, -1);
} .
}
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
数字で見る
138は フィボナッチ%での利益確定です。
23は 注文の開始価格(フィボナッチ%)です。
76は フィボナッチグリッドの%で、価格がこの値に達した場合、 ストップロスはフィボナッチグリッドの51%に移動されます。
e-MovingInWL2 Expert Advisorの機能です。
{
Trailing();
double Line11=iCustom(Symbol(), 0, "TDI Red Green", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type, 4, 1);
double Line12=iCustom(Symbol(), 0, "TDI Red Green", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type, 4, 2);
double Line21=iCustom(Symbol(), 0, "TDI Red Green", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type, 5, 1);
if (timeprev == Time[0]) return(0);
timeprev = Time[0];
ma0=iMA(NULL,0,10,0,MODE_SMA,PRICE_CLOSE,1);
ma1=iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,1);
ma2=iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,1);
ma3=iMA(NULL,0,800,0,MODE_SMA,PRICE_CLOSE,1);
if (CountBuy()>5 && Volume[0]==1 && Ask > ma0 && Ask > ma1 && Ask > ma3)
{
if (Line11>Level1&&Line12<Level1&&Line11>Line12)
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Ask-sl*Point, Ask+tp*Point, comment, Magic, 0, Blue);
}
if (CountSell()>5 && Volume[0]==1 && Bid < ma0 && Bid < ma1 && Ask < ma3)
{
if (Line11>Level2&&Line12>Level1&&Line11>Line12)
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, Ask+sl*Point,Ask-tp*Point, comment, Magic, 0, Red);
}
return(0);
}
TDI Red Green インジケータで注文を開くための信号で、コードのエラーを見つけるのを助けてください。
テスターがディールを開かない、または1つしか開かない。エラーは報告されません。
インジケーターのバッファーが正しく表示されました。
mql4の勉強を始めて数日の初心者です)))
事前に感謝します!(笑)。この中のパラメータNは可変であるため、変更するたびに「if」条件(対応する配列の下)を追加(または削除)して、コードを作り直す必要があります。
質問 - "if "を1つだけ使用し、配列名で変数 "to "を使用することは可能ですか?すなわち、ARRAY_{k}のようなものです。配列を終端変数に置き換えることは可能ですが、極端な話です。アレイの場合、そのような解決策はあるのでしょうか?
このジレンマに直面しました。例えば、ループフォーがあるとします。
この中のパラメータNは変数なので、それを変更するたびに、if条件(対応する配列の下)を追加(または削除)してコードを修正する必要があります。
質問 - "if "を1つだけ使用して、配列名で変数 "to "を使用することは可能ですか(または他の何か)?すなわち、ARRAY_{k}のようなものです。配列を終端変数に置き換えることは可能ですが、極端な話です。アレイの場合、そのような解決策はあるのでしょうか?
なんとなく似ているのであればOKです。
なんとなく似ているのであればOKです。
どういう意味だったのか、言葉で説明できますか?
どういう意味か、言葉で説明できますか?
すみません、気が散ってしまいました。
配列のインデックスを 識別子の一部とする。
以下は簡単なコードです。
50本目のロウソクに縦線を引くようにしたい。
と入力すると、プログラムは垂直線を 描画します。
が問題です。
このプログラムでは、最初の冠にのみ 1本の縦線が表示されます(50の倍数)。
ありがとうございます。
配列のインデックスを識別子の一部とする。
私の理解する限り、あなたの解決策は私のケースでは機能しませんが、チェックする価値のあるアイデアを与えてくれました。ありがとうございました。
以下は簡単なコードです。
EVERY 50thキャンドルにつけてほしい。
が縦線を露出していた。
課題
このプログラムでは、最初の行(50の倍数)にのみ 1本の縦線が設定されます。
50本目のキャンドルごとに同じ名前にしてほしい。
同じ名前のオブジェクトを複数作成しようとしているが、これは不可能である。名前は、時間のようにユニークでなければならない。
それがまず第一です。第二に、サイクルはどこにあるのか。スクリプトはどのようにロウソクを数えるのでしょうか?