[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 458

 
mamba5:

EAのテスト中にエラー130 - 間違った停止位置が表示されました。NewOrder関数では、外部変数TakeProfitとStopLossが渡されるはずで、これを達成するためにあらゆることを行ったように思えますが、印刷が示すようにゼロが渡されています。このエラーの原因がここにあることは理解しているのですが、まだ見つけることができていません。よろしくお願いします。

extern int TakeProfit=100;
extern int StopLoss=100。

NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss)です。

int NewOrder(int Cmd,double Lot,int TakeProfit,int StopLoss)

ここでの問題は、グローバル変数 StopLossがあり、それらがパラメータとしてプロシージャに渡されていることです。プロシージャの中で名前を変更するのがよいでしょう。

 
fore-x:

Как в mql4 из одного индикатора управлять более чем 8 буферами обмена, существует ли способ обхода данного ограничения?

Ну, как пример, мне нужно построить более 8 индикаторных линий, но из одной программы.

ずん子

トレンドライン

さらに詳細は?せめて、どこで読めるかリンクを教えてください。
 
splxgf:

ここでの問題は、グローバルなStopLoss変数があり、それがパラメータとしてプロシージャに渡されていることです。手順で名前を変えておくとよいでしょう。


おっしゃるとおりです。本当はもっと論理的なんです。修正しました。

//+----------Функция открытия ордера-----------------------------------+
int NewOrder(int Cmd,double Lot,int TaPr,int StLo)
{
 double TP=0;// тейкпрофит
 double SL=0;// стоплос
 double PR=0;// цена
 while(!IsTradeAllowed())Sleep(100);
 if(TaPr<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    TaPr=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(StLo<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    StLo=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 Print("TaPr=",TaPr," StLo=",StLo," StopLevel=",MarketInfo(Symbol(),MODE_STOPLEVEL));
 tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
 if(tic<0)Print("ошибка открытия ордера:",GetLastError()); Print("Cmd-",Cmd," Lot=",Lot," PR=",PR," SL=",SL," TP=",TP);
return(tic);
}
でも、あまり役に立たなかった。TaPr、StLo=100なのに、PR、SL、TPがなぜか0に......。
ファイル:
 

こんにちは、注文が一度だけ開くように条件を書くのを手伝ってくれませんか、この時点ではすべてのティックで開きます

   topOrder=OrderSend(Symbol(),OP_BUYSTOP,1,Hinput,3,Price_high-(height_box/100*sl),Price_high+(height_box/100*tp),"my order #",16384,0,Green);
                     if (topOrder<0)
                        {
                           Print("Верхний ордер ошибка #", GetLastError());
                           return(0);
                        }

ただ、こんな感じで、すでに注文が決まっている場合、OrderCommentがないと次の注文を開けないので、まだどうしたらいいのかわかりません

ありがとうございました。

 
fore-x:
詳細はいかがでしょうか。せめて、どこで読めるかリンクを教えてください。 。
何のリンク?棒グラフとトレンド ラインを結ぶのです。そうすれば、不具合のあるバッファーから独立できます。
 
artmedia70:
自分でチャートに貼らない限り、EA中に反映されることはありません。どうやったんですか?
テスターでEAを動かしているのですが、テスターが終了するとインジケーターの線の 情報が表示されます。
 
mamba5:


その通りです。その方が理にかなっていると思います。修正しました。

でも、あまり役に立たなかった。TaPr、StLo=100ですが、PR、SL、TPはなぜか0です


  NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
  NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);
if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 

損切りトレードの計算方法を教えてください。

つまり、ストップロスで決済されたトレード。

をクリックし、利益確定後にカウンターをリセットします。

I.e. Take Profitで決済した後、カウンターをゼロにリセットする。

カウンタ初期桁=1

int Schetcik = 1;

買いも売りも、すべての取引をカウントすること。

 
Vinin:



ありがとうございました。)))ここまで明確に比較しないと、間違いに気づけなかった。
 
belck:

損切りの計算方法を教えてください。

つまり、ストップロスで決済されたトレード。

をクリックし、利益確定後にカウンターをリセットします。

I.e. Take Profitで決済した後、カウンターをゼロにリセットする。

カウンタ初期桁=1

買いも売りも、すべての取引をカウントすること。


ストップロスで決済しても、トレードが負けるわけではありませんし、その逆も然りです。もちろん、ストップ&テイクがオープニングで設定され、それ以降手をつけていない場合は別ですが。