Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich möchte selbst lernen, wie man Code schreibt... Also dachte ich, ich frage mal um Rat. Ich dachte, vielleicht könnte mir jemand eine Probe geben... Danke!
Der Kunde beschwert sich, dass der Expert Advisor weiterhin Geschäfte eröffnet, auch wenn er aus dem Diagramm entfernt wurde. Das kann doch nicht der Fall sein, oder?
Wenn er gelöscht und korrekt geschrieben wird, sollte er nicht gelöscht werden. Entladen mit Deinitialisierungscode - 1. Wenn der Expert Advisor einrastet... Wir müssen uns damit befassen...
Wenn Sie das EA-Fenster schließen, wird der EA mit Deinitialisierungscode entladen - 4:
REASON_CHARTCLOSE
4
Chart ist geschlossen
https://www.mql5.com/ru/docs/constants/namedconstants/uninit
Nun, das stimmt, es gibt dort Metaquote-Zitate, soweit ich mich erinnere, und Tickstory ist von guter Qualität.
Zumindest ein Screenshot, um zu verstehen, welche Zeilen Sie zusammenführen möchten
Zumindest einen Screenshot, um zu verstehen, welche Zeilen Sie zusammenführen möchten.
Zumindest einen Screenshot, um zu verstehen, welche Art von Linien Sie kombinieren möchten. Vielen Dank für Ihre Antwort! Ich möchte zwei obere Werkzeugzeilen auf MT4 zu einer verbinden.
Was könnte die rote Farbe der Variablen dT bedeuten?
Was könnte die rote Farbe der Variablen dT bedeuten?
double Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);//Определение общего количества лотов
double Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,1); //Параметры MACD основной линии текущего бара
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,2);//Параметры MACD основной линии предыдущего бара
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,3);//Параметры MACD основной линии со смещением на 2 бара
double StopLoss=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,0);//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,1);//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,1);//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
static datetime New_Time=TimeCurrent();// Время текущего бара
bool New_Bar=false; // Флаг нового бара
int ticket,total,cnt;
//---------------------------------------------------------------------------
total=OrdersTotal();// Опредление количства ордеров
if(total<1)
{
//--- нет открытых ордеров
if(Margin_Percent<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT)))
//Проверка на наличие денежных средств для открытия минимального лота
{
Print("Не хватает средств. Свободные средства = ",AccountFreeMargin());
return;
}
if(Time[0]==New_Time) // Сравниваем время
{
New_Bar=true; // Поймался новый бар
if(New_Bar==false) // Если бар не новый..
return; // ..то уходим
}
//Определение количества лотов
if(Lots>Lots_Volume)
Lots=Lots_Volume;
else if(Lots<Lots_Volume)
Lots=MathFloor(Lots);
return;
//--- условие для открытия длинной позиции (BUY)
if(CurrentPSAR<iOpen(NULL,0,1) &&
((MacdPrevious1>0 && MacdPrevious2<0) ||
(MacdCurrent>0 && MacdPrevious1<0) ||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2<0)||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)//проверка отрытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера BUY : ",GetLastError());
return;
}
}
//--- условие для открытия короткой позиции (SELL)
if(CurrentPSAR>iOpen(NULL,0,1) &&
((MacdCurrent<0 && MacdPrevious1>0) ||
(MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Red);
if(ticket>0)//проверка открытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера SELL : ",GetLastError());
return;
}
}
return; //--- выход из блока "нет открытых ордеров"
}
//--- важно правильно войти в рынок, но более важно правильно из него выйти
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderMagicNumber()==MAGICNUMBER && // проверка магического номера ордера
OrderSymbol()==Symbol()) // проверка символа ордера
{
//--- длинная позиция открыта
if(OrderType()==OP_BUY)
{
//--- должен быть закрыт?
if(CurrentPSAR>iOpen(NULL,0,1) &&
((MacdCurrent<0 && MacdPrevious1>0) ||
(MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
//--- закрытие ордера и выход
if(OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
{
Print("Ордер закрыт");
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Red);
if(ticket>0)//проверка открытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера SELL : ",GetLastError());
return;
}
}
else Print("Ошибка закрытия ордера ",GetLastError());
}
//------------------Модификация ордера по СтопЛоссу
else if(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,0,Blue))
Print("Цена Stop Loss ордера успешно модифицирована.");
else Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
return;
}
return;
}
// идём на короткую позицию
else if(OrderType()==OP_SELL)
{
//--- должен быть закрыт?
if(CurrentPSAR<iOpen(NULL,0,1) &&
((MacdPrevious1>0 && MacdPrevious2<0) ||
(MacdCurrent>0 && MacdPrevious1<0) ||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2<0)||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
//--- закрытие ордера и выход
if(OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
{
Print("Ордер закрыт");
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)//проверка отрытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера BUY : ",GetLastError());
return;
}
}
else Print("Ошибка закрытия ордера ",GetLastError());
}
//-----------------Модификация ордера по СтопЛоссу
else if(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,0,Blue))
Print("Цена Stop Loss ордера успешно модифицирована.");
else Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
return;
}
}
}
}
//------
}
//-------------------------------------------------------------------------------------------------------
Leute, ein Hinweis. Tester gibt Fehler: 2017.02.08 18:24:43.751 TestGenerator: Nicht übereinstimmende Datenfehler (Tiefstwert 1.09860 am 2016.07.27 19:30 wird vom niedrigsten Zeitrahmen nicht erreicht, Tiefstpreis 1.09880 stimmt nicht überein)