[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 479

 
Svinozavr >>:

Да, кажется, все проще - время сделки-то известно. Если так, то время по тайм-фрейму будет таково:


Time[iBarShift(NULL,tf,DealTime)]

где
tf - нужный тайм-фрейм,
DealTime - время (с датой) сделки


ありがとうございます。しかし、まだ取引がなく、DealTimeが取引予定の既知の時間である場合はどうでしょうか?

 
MoneyJinn >>:


Спасибо, а как быть если сделки еще не было и DealTime - известное время планируемой сделки?

tf*60*MathFloor(DealTime/60/tf) // 変数の意味は同じです。

スクリプトを確認することができます。

#property show_inputs
extern int tf=1440;
extern datetime DealTime;

void start() {Alert(TimeToStr(tf*60*MathFloor(DealTime/60/tf)));}
===
修正しました。秒を分に変換するのを忘れていました)))
 
私のEAには約200のMAがあり、それらをテストするとき、「チャートを開く」を押すと、それらがすべて表示されます。
それらを削除して隠すことができます。
ありがとうございます。
 
snowman647 >>:
у меня в советнике около 200 MA, при тестировани, когда жмешь "открыть график" они все рисуються.
можно их както убрать, чтоб не видно было?
спасибо

void HideTestIndicators( bool hide )
Expert Advisor が呼び出すインジケータを非表示にするフラグを設定する機能です。テスト終了後にチャートを開くと、非表示フラグが付いたインジケータはテストチャートには表示されません。インジケータは、各コール前に現在の隠蔽フラグでフラグが立てられます。
テスト中のExpert Advisorから直接呼び出された指標のみがテストチャートに表示されることに注意が必要です。

 
私はMQL言語をマスターしようとしており、練習として私のEAにマーチンゲールファンクションを追加することにしました。
ロット別のSLに係数を掛けて、TPの場合は元のロットから始めるという注文を出したかったのですが!
TPとSLに条件をつける方法がわかりません!?
正しいコードの使い方を教えてください。
//--------------------------------------------------------------------
extern int  stoploss    = 50,
            takeprofit  = 50;
extern double  mult=2;
extern double      Lot=1;
int         tip;
//--------------------------------------------------------------------
int init()
{
   OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                        NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
}
//--------------------------------------------------------------------
int start()
{
   for (int i=0; i<OrdersTotal(); i++){   
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
         if (OrderSymbol()==Symbol()){
            tip = OrderType();
            Lot = OrderLots();return;}}}
   if (Lot==0) return;
   if (tip==0) OrderSend(Symbol(),OP_SELL,Lot*mult,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
   if (tip==1) OrderSend(Symbol(),OP_BUY ,Lot*mult,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
   return(0);
}
//-----------------------------------------------------------------
 
Kogalym >>:
Пытаюсь освоить язык MQL в качестве практики решил добавить в советник перевертыш функцию Мартингейла!
Что бы при SL открывал ордер лотом умноженным на коэффициент, а при TP начинал с первоночального лота!
Но получилось что лот увеличивается с каждым ордером, не знаю как поставить условие на TP и SL!
Подскажите пожалуйста как должен выглядеть правильный код!

このような関数があるはずです。

double getLot()
{
   if(OrdersHistoryTotal()==0)return(0.1);
   // ищем самый последний закрытый ордер
   datetime time=0;
   int ticket=-1;
   for(i=OrdersHistoryTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==Symbol())
         {
            if(OrderCloseTime()>time)
            {
               time=OrderCloseTime();
               ticket=OrderTicket();
            }
         }
      }
   }
   if(OrderTicket()!=ticket)OrderSelect(ticket,SELECT_BY_TICKET);
   if(OrderProfit()<=0) return(NormalizeDouble(OrderLots()*Martin_Koef,2));
   if(OrderProfit()>0)return(0.1);
   //-----
}
 
Roger >>:

Да уже плешь проели с этим вопросом. Набираешь old tick здесь в поисковике и читаешь, читаешь, читаешь.

そんなに頭がいいなら、なぜここに来るんだ?生意気な手紙を書いても、返事は気にしないってことでしょ。さて、さて。

 
StatBars >>:

Должна быть функция вроде этой


時間がどう関係するのか理解できない。
最後の3行だけが、損失が出た場合のロット増加の責任を負うのだと思います
if(OrderTicket()!=ticket)OrderSelect(ticket,SELECT_BY_TICKET);
   if(OrderProfit()<=0) return(NormalizeDouble(OrderLots()*Martin_Koef,2));
   if(OrderProfit()>0)return(0.1);
 
Kogalym >>:


Не понимаю причем там время???
По моему за наращивание лота при убытке отвечают только 3 последние строчки

この関数は、最後に決済された注文を見つけ、その利益に基づいてロットを計算します。ストップロスで利益がプラスになることがないクローズドオーダー、テイクプロフィットで利益がマイナスになることがないクローズドオーダーがあれば、この機能は正しく動作します。
何らかのトロールがある場合は、関数を書き換える必要があります。

 
StatBars >>:

При том что функция находит последний закрытый ордер, по его профиту расчитывается лот. Если у Вас закрытый ордер по стоплоссу никогда не будет положительным по профиту, а закрытый по тейкпрофиту ордер никогда не будет отрицателен по профиту, то функция корректно отработает.
Если же у Вас есть трал какой-нибудь то функцию нужно переделать.

TPで同方向に、SLで逆方向に注文を出すEAを書いたのですが、マーチンゲール関数を挿入して元に戻せません。

//--------------------------------------------------------------------
extern int  stoploss    = 50,
            takeprofit  = 50;
extern double  mult=2;
extern double      Lot=1;
//--------------------------------------------------------------------
int init()
{
   OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                        NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
}
//--------------------------------------------------------------------
int start()
{   for (int i=0; i<OrdersTotal(); i++){   
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
         if (OrderSymbol()==Symbol()){
         Lot = OrderLots();return;}}}
            if (Lot==0) return;
        
  if(OrderType() == OP_SELL)
     if(OrderProfit()>0) OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
   else OrderSend(Symbol(),OP_BUY ,Lot,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
                                                                        
    if(OrderType() == OP_BUY) 
    if(OrderProfit()>0) OrderSend(Symbol(),OP_BUY ,Lot,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
    else OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
                                     
       
   return(0);
}
//-----------------------------------------------------------------

マーチンゲールの機能を挿入できない、元のロットに戻せない!この機能をどこに配置すればいいのか、教えてくれるかもしれませんね