Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1097

 
alvlaf:

Der letzte Code, den Sie angegeben haben, ist einen Schritt weiter - er eröffnet überhaupt keine Geschäfte (so dass das Verbot in Kraft ist). Ich habe noch nicht verstanden, warum überhaupt keine. Im Anhang finden Sie einen Screenshot des Protokolls.

Zunächst hieß die Variable ProfitableSerie und hatte die entgegengesetzte Funktion. Und ich möchte noch etwas hinzufügen.

int OnInit()                     // abeiks && LRA: замечания приняты)))
{
   if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
   return(INIT_SUCCEEDED);
}

// OnDeinit больше не нужен

void OnTick()
{
   if (CountTrades() == 0) // Количество ордеров должно равняться нулю
   {
      if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
      // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) 
      // Если прибыль последней сделки равняется нулю, то открывается такая же
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder(), 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0)// Если последняя сделка прибыльная, то открывается ордер
      {
         if (GlobalVariableGet("AllowNewOrders") > 0) return;
         if (SignalBuy() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
         if (SignalSell() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
      }
      GlobalVariableSet("AllowNewOrders", 1);
   }
}

Versuchen Sie es auf diese Weise. Ich habe das Gefühl, dass sich noch etwas anderes ergeben wird...

 
Hallo alle, ich habe angefangen, das MQL4-Tutorial zu lesen (ich möchte lernen, wie man programmiert), aber es ist eine alte Version, was würden Sie raten zu tun? Lesen Sie das Tutorial und dann die Dokumentation?
 
LRA:
// ИХМО так нагляднее
Einverstanden!
 
linar:

Hallo, ich habe angefangen, das MQL4-Tutorial zu lesen (ich möchte lernen, wie man programmiert), aber es ist eine alte Version, was würden Sie raten, zu tun?

Wenn Sie schon einmal in C programmiert haben, ist es besser, den Quellcode von kostenlosen Indikatoren, einfacheren Indikatoren und Expert Advisors durchzusehen und die Hilfe zu lesen.

Wenn Sie überhaupt nicht programmiert haben, dann... Wenn Sie überhaupt keine Ahnung vom Programmieren haben, dann lesen Sie die Dokumentation. )))

Es gibt auch eine Anleitung in diesem Forum: https://www.mql5.com/ru/forum/108883

 
A13ksandr:

Es ist nur so, dass die Variable anfangs ProfitableSerie hieß und die gegenteilige Funktion hatte. Und es gibt noch etwas hinzuzufügen.

Versuchen Sie es auf diese Weise. Ich habe das Gefühl, dass sich noch etwas anderes ergeben wird...

Ein weiterer Schritt nach vorn - der Bot hat einen Handel eröffnet, aber das war's dann auch schon. Nichts anderes öffnet sich und es gibt nicht einmal eine Meldung im Protokoll über irgendwelche Versuche...
 
alvlaf:
Ein weiterer Schritt nach vorn - der Bot eröffnete einen Handel, aber das war's dann auch schon. Der Bot öffnet nichts anderes und es gibt keine Meldungen im Protokoll über irgendwelche Versuche...

Ich wollte nur einen Teil des Codes richtig setzen, aber dann habe ich den ganzen Code kopiert und den Fehler nicht behoben. In der letzten Bedingung sollte es so sein.

         if (GlobalVariableGet("AllowNewOrders") == 0) return;

Aber eigentlich hätte er damals kein einziges Geschäft abschließen dürfen. Einige der ersten beiden Bedingungen funktionieren nicht richtig. Fixieren Sie die Bedingung für jetzt, mal sehen :)

Updade: OnDeinit für den Fall der Fälle zurückbringen.

void  OnDeInit()
{
   GlobalVariableSet("AllowNewOrders",1); 
} 
 
A13ksandr:

Verdammt, ich wollte ursprünglich nur einen Teil des richtigen Codes einfügen, aber dann habe ich das Ganze kopiert und diesen Fehler nicht korrigiert. In der letzten Bedingung sollte es folgendermaßen aussehen

Aber eigentlich hätte er damals kein einziges Geschäft abschließen dürfen. Einige der ersten beiden Bedingungen funktionieren nicht richtig. Fixieren Sie die Bedingung für jetzt, mal sehen :)

Updade: OnDeinit für den Fall der Fälle zurückbringen.


Ich habe es ausprobiert und nach einem Handel im Minus begonnen, bei jedem Tick eine Position zu eröffnen.
 
alvlaf:
Ich habe es ausprobiert und nach einem Handel im Minus begonnen, bei jedem Tick eine Position zu eröffnen.

Setzen Sie die ersten beiden Bedingungen in die erste Zeile

if(GlobalVariableGet("AllowNewOrders") == 1) return;

Führen Sie den ersten Test mit einem Paar durch.

Der Makler GrandCapital?

 
A13ksandr:

Setzen Sie die ersten beiden Bedingungen in die erste Zeile

if (GlobalVariableGet("AllowNewOrders") == 1) return;

Führen Sie den ersten Test mit einem Paar durch.

Makler GrandCapital?

//----------------------------------------------------------------------
int OnInit()
{
if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
return(INIT_SUCCEED);
}

//----------------------------------------------------------------------

void OnDeInit()
{
GlobalVariableSet("AllowNewOrders",1);
}
//----------------------------------------------------------------------

void OnTick()
{
if (GlobalVariableGet("AllowNewOrders") == 1) return;
{
if (CountTrades() == 0) // Die Anzahl der Aufträge muss gleich Null sein
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// Wenn der letzte Handel einen Verlust aufweist, wird derselbe Handel eröffnet, jedoch mit einem größeren Los.
{
GlobalVariableSet("AllowNewOrders", 0);
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = Ask;
if (Typ == OP_SELL) Preis = Bid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbol(), Typ, Lot, Preis, Slippage, 0, 0, IntegerToString(Exp), Magic);
Rückkehr;
}
if (GlobalVariableGet("AllowNewOrders") == 1) return;
{
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// wenn der Gewinn des letzten Geschäfts gleich Null ist, wird das gleiche Geschäft eröffnet
{
GlobalVariableSet("AllowNewOrders", 0);
Typ = TypeLastHistOrder();
if (Typ == OP_BUY) Preis = Ask;
if (Typ == OP_SELL) Preis = Bid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), Typ, Lot, Preis, Slippage, 0, 0, IntegerToString(Exp), Magic);
Rückkehr;
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// Wenn der letzte Handel profitabel ist, wird die Order eröffnet
{
if (GlobalVariableGet("AllowNewOrders") == 0) return;
if (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
Rückkehr;
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
Rückkehr;
}
}
}
GlobalVariableSet("AllowNewOrders", 1);
}
}

}

Ja, die Große Hauptstadt. Haben Sie sie richtig eingesetzt? Es hat wieder aufgehört, Trades zu öffnen.

 

Leute, ich habe mir schon den Kopf zerbrochen. Wie bringe ich den EA dazu, Pending Orders auf Hochs und Tiefs zu platzieren, z.B. 8 Kerzen, mit einem Take Profit von 1/4.

Ich mache das in etwa so:

double Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0);

double Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0);

double TP=((Vhod1-Vhod2)/4)+Vhod1;


Ich habe versucht, die Parameter zu ändern, aber ich erhalte immer falsche Stopps oder setze den Preis auf 7.00000; es ist unklar, woher das kommt