[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 251

 
skyjet:
Fachleute, bitte helfen Sie mir! Ich habe meinen Expert Advisor für 4 Währungen in einem Terminal installiert, aber er öffnet Orders nur für 1 dieser Währungen. Was könnte der Grund dafür sein? Wie kann ich es schaffen, dass es in 4 Währungen gleichzeitig funktioniert?

Ich habe mich in letzter Zeit selbst mit diesem Thema beschäftigt. Zusätzlich zur Aufzählung der Währungen im EA müssen Sie Point, Ask, Bid, Digits korrekt angeben. Tauschen Sie die historischen Daten für jede Währung aus, falls diese verwendet wird. Wenn es Berechnungen mit vordefinierter Währung iBar, iClose gibt, fügen Sie auch eine Währungsaufzählung anstelle von NULL ein. Hier ist ein Beispiel für 25 Währungspaare. Vielleicht bin ich kein großer Experte, aber ich habe von den Experten keine klare Antwort erhalten, ich musste es selbst versuchen.


int nnnn;
string SymbolMax[25] = {"EURUSD", "GBPUSD", "USDCHF", "USDJPY", "AUDUSD", 
                        "USDCAD", "EURGBP", "EURJPY", "GBPJPY", "AUDCAD", 
                        "EURAUD", "EURCAD", "GBPCHF", "AUDCHF", "AUDJPY", 
                        "CADCHF", "CADJPY", "CHFJPY", "GBPAUD", "GBPCAD", 
                        "NZDCAD", "AUDNZD", "NZDJPY", "EURNZD", "NZDUSD"};

     if(nnnn<24) nnnn+=1; else nnnn=0;
     bid=MarketInfo(SymbolMax[nnnn],MODE_BID);
     ask=MarketInfo(SymbolMax[nnnn],MODE_ASK);
     point=MarketInfo(SymbolMax[nnnn],MODE_POINT);
     digits=MarketInfo(SymbolMax[nnnn],MODE_DIGITS);
     Startimeframe4();


 
sergeev:
ja :)
Da Sie so schnell antworten, beantworten Sie mir eine dumme Frage - wenn ich den Fehler 1 im Code mache, wird das Terminal ihn an mich zurückgeben? Werden diese Informationen nicht an den Server weitergeleitet?
 
granit77:
Da Sie so schnell antworten, beantworten Sie mir eine dumme Frage - wenn ich den Fehler 1 im Code mache, wird das Terminal ihn an mich zurückgeben? Werden diese Informationen nicht an den Server weitergeleitet?

Ich schließe mich der Frage an, nur um hinzuzufügen: "Fehler 130".

 
granit77:
Da du so schnell antwortest, beantworte mir eine dumme Frage: Wenn ich den Fehler 1 im Code mache, wirft das Terminal ihn mir dann zurück? Diese Informationen gehen nicht an den Server?


Ich werde es Ihnen gleich sagen:

- Ich bin nicht Sergejew :)

- und ich weiß es nicht :)

Aber

- das lässt sich leicht durch Erfahrung herausfinden :)

 
granit77:
Da Sie so schnell antworten, beantworten Sie mir eine dumme Frage - wenn ich den Fehler 1 im Code mache, wirft das Terminal ihn mir zurück? Werden diese Informationen nicht an den Server weitergeleitet?

Ich habe es überprüft, das tut es nicht. Es ist die Antwort des Terminals durch Änderung.
 
sergeev:
Ich habe es überprüft, es ist nicht. Es ist die Antwort des Terminals.
Danke, so kann ich mich entspannen.
 
Roman.:


1.EURUSD oder GBPUSD usw... - es bedeutet ALLES ... ticket=OrderSend( EURUSD, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);

2.sy=Symbol(); ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen); - das bedeutet durch Zuweisung...

Finden Sie es mit dieser intelligenten Funktion heraus - OpenPosition() Funktion für online - und fügen Sie sie in Ihren Eulencode ein und alles wird funktionieren... vielleicht auch durch Zuweisung...

Roman, ich danke dir für deine Hilfe und dein professionelles Vorgehen :)
 
Bitte teilen Sie mir mit, ob es eine Funktion/Befehl gibt, die die Provision für alle offenen Aufträge ermittelt.
 

Ich habe ein Problem mit der Schleifenbildung unter Verwendung einer Modifikation,

Ich habe Fraktalmodifikation mit Breakeven verwendet, ich habe unendliche Modifikationen mit Fraktal und Breakeven.

die Änderung basiert auf https://book.mql4.com/ru/trading/ordermodify

//ф-я модификации ордеров безубыток

int mod_b()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double TS=Tral_Stop; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист&&((SL<TS && Tip==0)||(SL>TS && Tip==1))
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(Bid-TS*Point,Digits))
{
SL=Price+18*Point; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(Ask+TS*Point,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=Price-18*Point; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}

int mod_f()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.

//------------------------------------------------------обсчет фрактала

int f = 3; //номер бара с которого идет проверка наличия фрагтала
int DnN = 0, UpN = 0; //порядковый номер присвоен к направлению(upper, lower)
double UpFr = 0, DnFr = 0; //числовое значение фрагтала выраженное в еденице валюты присвоен к направлению(upper, lower)
while (f < Bars && (UpFr == 0 || DnFr == 0))
{
if (iFractals(Symbol(), 0, MODE_UPPER, f) != 0)
if (UpFr == 0)
{
UpFr = iFractals(Symbol(), 0, MODE_UPPER, f);//фрактальная отложка вверх(buy)
UpN = f;
}
if (iFractals(Symbol(), 0, MODE_LOWER, f) != 0)
if (DnFr == 0)
{
DnFr = iFractals(Symbol(), 0, MODE_LOWER, f);//фрактальная отложка вниз(sell)
DnN = f;
}
f++;
}
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double UD;
double TS=UD; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
if(Tip==0)
UD=DnFr;
if(Tip==1)
UD=UpFr;
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(UD,Digits))
{
SL=UD; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(UD,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=UD; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}

 
LazarevDenis:
Bitte teilen Sie mir mit, ob es eine Funktion/Befehl gibt, die die Provision für alle offenen Aufträge ermittelt.
Warum berechnen Sie den Betrag nicht selbst mit der Funktion OrderCommission()?