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

 
Auch ich frage mich manchmal, warum die Entwickler statt des ganzen Unsinns nicht einfach zwei Schaltflächen im Terminal einbauen konnten: "verdienen" und "ablassen". Die Probleme würden sich um eine Größenordnung verringern.
 
Necron >>:

Добрый всем! В общем проблема следующего плана. Есть тс, по которой нужно открывать позицию тройным лотом, после чего каждый лот сопровождается отдельно(со своим TP, сигналом закрытия). Интересуют способы реализации. Мне на ум пришел такой способ: использовать три отложенника, запоминать их тикеты, а потом каждый отдельно выбирать и закрывать по своему условию. Есть ли какие-либо другие способы (или более удобные)?

PS. Поймите правильно, около месяца назад только своего первого советника на машках написал=)))))

für jeden Auftrag einen Kommentar setzen ("lot_1", "lot_2"....), Aufträge anhand des Kommentars erkennen...

Wenn es nicht klar ist, dann schreiben Sie mehr Details beschrieben werden kann...

 
StatBars >>:

установите каждому ордеру свой коммент("lot_1","lot_2"....), по коменту распознавайте ордера...

Если не понятно то пишите подробнее можно будет описать...

Danke, StatBars! Es ist nur so, dass ich bereits mit der Wahl des Magiers begonnen habe. Ich denke, Ihre Option würde wie folgt aussehen? (Ich gestehe, dass ich mich daran erinnerte, dass es einen ähnlichen in einem der EAs gab =)) Welche Option ist dann die beste?

if ( (OrderSymbol() == Symbol()) &&
(StringSubstr(OrderComment(),0,0) == "lot_1") )

 
Necron >>:

Спасибо, StatBars! Просто я уже начал делать с выбором по магику. Ваш вариант думаю так будет выглядеть? (признаюсь, вспомнил что в одном из советников было похожее =)) Тогда какой вариант наиболее оптимален?

if ( (OrderSymbol() == Symbol()) &&
(StringFind(OrderComment(),"lot_1") >= 0) )

Ein wenig korrigiert.

Normalerweise verwende ich Magie und das Symbol, um "meine" EA-Aufträge zu identifizieren.

Alle anderen Informationen habe ich in den Kommentar geschrieben.

Ich würde nicht sagen, dass dies optimal wäre, denn man kann nicht sehen, was man später mit den Aufträgen macht und ob man noch 3 weitere Aufträge eröffnen kann....

 
chief2000 >>:



Будет срабатывать на каждом тике пока выполняется условие. Небось код для тещи переделываете? :)





Ein großes DANKESCHÖN! Kompiliert funktioniert alles, piept bei jedem Ticken.

Meine Schwiegermutter ist noch nicht da, aber wenn überhaupt..., werde ich diese Idee aufgreifen)))

 

Sorry, es gibt eine Frage. wie man einen Client programmatisch zum Absturz bringt.

Bei meinen Nachforschungen über die Dekompilierung bin ich auf die Zweideutigkeit der Dekompilierung gestoßen, und nun stellt sich die Frage, wie sie zu verwenden ist.

Sie haben die Wahl, das System zum Absturz zu bringen.

oder den Decompiler aufhängen.

 
StatBars >>:

Поправил немного.

Магик и символ обычно использую для идентификации "своих" ордеров эксперта.

Всю остальную информацию запихиваю в коммент.

Я бы не сказал что тут будет что-то оптимальнее, не видно же что Вы потом будуте делать с ордерами и может ли открыться ещё одна 3-ка ордеров....

Ich danke Ihnen! Im Expert Advisor zu Ihrer Variante korrigiert. Ich werde dieses Wunder vollenden und es auf Code Base als meine erste (mehr oder weniger) ernsthafte Kreation hochladen). Das System, mit dem ich den Expert Advisor schreibe, heißt Muteki, aber es ist ein wenig mit meinen Ergänzungen (für Positionsmanagement). Es ist gut, dass es wenigstens einen Indikator gibt, der all diese Trends aufzeigt=)))

Es hat sich nur eine andere Frage ergeben. Wie eröffne ich drei Positionen gleichzeitig (oder etwa ein Angebot)? Ist das richtig, oder gibt es andere Möglichkeiten? Ich kann es nicht mit Anhängern machen=(( Kleiner Abstand ist manchmal zu viel:(


if(b1==0 && !IsTradeContextBusy())
{
if(Low[0]<HHL_1 && Bid>=HHL_1 && trade_buy==true)
{
ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,slippage*PointX,sl_b,BuyTarget1,"lot_1_buy",Magic,0,Lime);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("lot_1_buy order opened : ",OrderOpenPrice());
b1=1;
}
else Print("Error opening BUY order : ",GetLastError());

return(0);
}
}

 
// ищем самый последний закрытый ордер
for( i=OrdersHistoryTotal(); i>=0; i--){
  if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==16384){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()> time){
          time=OrderCloseTime();
          profit=OrderProfit();
          
            //мартин
            if( profit<=0) Lots=OrderLots()*2;
            //----
            
            
          }
        }
      }
    }
  }
}
//-----

Die Funktion sucht nach dem letzten geschlossenen Lot, wenn es einen Verlust gemacht hat, wird sein Lot für die Eröffnung eines neuen Geschäfts mit dem Doppelten multipliziert.

In der Praxis wird jedes neue Geschäft, unabhängig davon, ob es gewinnbringend war oder nicht, in der Menge verdoppelt.


Frage: Was ist los?

 
Summer:

Ich erinnere mich an eine Funktion, die ich neu erstellt habe. Hier ist der Code. Lots (in orderend) =getLots(), koeff= lot increment factor (default is 2) Nur bis zu zehn Lots (von 0.1) habe ich in meinem test=))))

double getLots() {

double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
int round;
if(minlot==0.01)round=2;
if(minlot==0.1) round=1;
double koeff=2;
double result=Lots;

int total = OrdersHistoryTotal();
double spread = MarketInfo(Symbol(), MODE_SPREAD);

for (int i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderProfit() > 0)
{
result = Lots;

} else {
result = OrderLots() * koeff;

}
}
}
result = NormalizeDouble(result, round);
if (result > maxlot) {
result = maxlot;
}
if (result < minlot) {
result = minlot;
}
RefreshRates();
return(result);
}

 

es gibt einen Fehler in der Funktion, ich kann ihn nicht finden, es ist entweder mit ( oder mit {

Ich habe den Code beigefügt.