[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 479

 
Svinozavr >>:

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


Time[iBarShift(NULL,tf,DealTime)]

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


Danke, aber was ist, wenn es noch kein Geschäft gibt und die DealTime der bekannte Zeitpunkt des geplanten Geschäfts ist?

 
MoneyJinn >>:


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

Warum?))) ok. Es ist sogar noch einfacher: tf*60*MathFloor(DealTime/60/tf) // die Bedeutung der Variablen ist dieselbe

Sie können das Skript überprüfen:

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

void start() {Alert(TimeToStr(tf*60*MathFloor(DealTime/60/tf)));}
===
Korrigiert. Ich habe vergessen, die Sekunden in Minuten umzurechnen.)))
 
Ich habe etwa 200 MA in meinem EA und wenn ich sie teste, wenn ich auf "Open Chart" drücke, werden sie alle angezeigt.
kann ich sie entfernen, um sie auszublenden?
danke
 
snowman647 >>:
у меня в советнике около 200 MA, при тестировани, когда жмешь "открыть график" они все рисуються.
можно их както убрать, чтоб не видно было?
спасибо

void HideTestIndicators( bool hide)
Die Funktion setzt ein Flag, um vom Expert Advisor aufgerufene Indikatoren auszublenden. Wenn das Diagramm nach dem Test geöffnet wird, werden die mit der Ausblendungsfahne markierten Indikatoren im Testdiagramm nicht angezeigt. Die Indikatoren werden vor jedem Aufruf mit dem aktuellen Ausblendungskennzeichen versehen.
Es ist zu beachten, dass nur die Indikatoren, die direkt von dem zu testenden Expert Advisor aufgerufen werden, im Testchart angezeigt werden können.

 
Ich versuche, die MQL-Sprache zu beherrschen, und als Übung habe ich beschlossen, die Martingale-Funktion zu meinem EA hinzuzufügen!
Ich wollte eine Order mit einem mit dem Koeffizienten multiplizierten Lot bei SL eröffnen, und bei TP würde ich mit dem ursprünglichen Lot beginnen!
Ich weiß nicht, wie man eine Bedingung für TP und SL stellt!
Bitte beraten Sie mich, wie ich dies tun kann!
//--------------------------------------------------------------------
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!
Подскажите пожалуйста как должен выглядеть правильный код!

Es muss eine Funktion wie diese geben

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 здесь в поисковике и читаешь, читаешь, читаешь.

Wenn du so klug bist, warum kommst du dann hierher? Sie meinen, es macht Ihnen nichts aus, einen frechen Brief zu schreiben, aber es macht Ihnen nichts aus, zu antworten. Sieh an, sieh an.

 
StatBars >>:

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


Ich verstehe nicht, was die Zeit damit zu tun hat.
Ich denke, dass nur die letzten 3 Zeilen für die Erhöhung des Loses im Falle eines Verlustes verantwortlich sind.
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 последние строчки

Diese Funktion findet den letzten geschlossenen Auftrag und berechnet das Lot auf der Grundlage seines Gewinns. Wenn Sie einen geschlossenen Stop-Loss-Auftrag haben, der niemals einen positiven Gewinn ausweist, und einen geschlossenen Take-Profit-Auftrag, der niemals einen negativen Gewinn ausweist, funktioniert diese Funktion korrekt.
Wenn Sie eine Art von Schleppnetz haben, muss die Funktion umgeschrieben werden.

 
StatBars >>:

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

Ich habe einen EA geschrieben, der bei TP eine Order in die gleiche Richtung öffnet und bei SL eine Order in die entgegengesetzte Richtung öffnet, aber ich kann die Martingale-Funktion nicht einfügen und zum ursprünglichen

//--------------------------------------------------------------------
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);
}
//-----------------------------------------------------------------

Ich kann die Martingale-Funktion nicht einfügen, ich kann nicht zum ursprünglichen Los zurückkehren! Vielleicht können Sie mir zeigen, wo diese Funktion platziert werden sollte!