Konstantin Bystrov: Bonjour à tous. Qui peut écrire un indicateur dans mt4, de sorte que les sessions de trading actives (peuvent être définies de 10 à 18) soient affichées sous forme de bougies japonaises.
Y a-t-il ici des artisans qui pourraient écrire un EA basé sur un indicateur informationnel de la force des devises. L'algorithme est le suivant. Nous attendons l'apparition de la monnaie forte et de la monnaie faible. Dans l'exemple de la capture d'écran, il s'agit d'EUR et d'USD. Si la différence est significative (à définir dans les paramètres de l'EA), alors nous ouvrons une position. Dans l'exemple de la capture d'écran, vous devez entrer dans une vente, ce que je ferai lundi. Dans l'EA, nous devons définir le paramètre de l'horizon temporel, à partir duquel l'EA doit prendre le signal (différence de force des différentes devises). La différence de force de la devise est le signal. Le Stop Loss n'est pas nécessaire. Le Take Profit est nécessaire. Si le prix va contre nous, faisons la moyenne. Dans votre conseiller expert, définissez l'étape de calcul de la moyenne, le nombre d'ordres, le nombre magique, la taille initiale du lot et le facteur d'augmentation du lot. J'ai récemment négocié avec cette méthode et j'en suis très satisfait. Pour moi, c'est un graal.
Konstantin Bystrov: Bonjour à tous. Pouvez-vous écrire un indicateur dans mt4, pour afficher les sessions de trading actives (vous pouvez définir le temps de 10-18) sous la forme de bougies japonaises.
//+------------------------------------------------------------------+//+------------------------------------------------------------------+#property copyright""#property link""#property indicator_chart_windowexternint NumberOfDays = 50;
externstring AsiaBegin = "10:00";
externstring AsiaEnd = "18:00";
externcolor AsiaColor = Goldenrod;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+void init()
{
DeleteObjects();
for(int i=0; i<NumberOfDays; i++)
CreateObjects("AS"+i, AsiaColor);
Comment("");
}
//+------------------------------------------------------------------+//| Custor indicator deinitialization function |//+------------------------------------------------------------------+void deinit()
{
DeleteObjects();
Comment("");
}
//+------------------------------------------------------------------+bool CreateObjects(
conststring name="Rectangle", // имя прямоугольникаconstcolor clr=clrRed, // цвет прямоугольникаconstlong chart_ID=0, // ID графикаconstint sub_window=0, // номер подокнаdatetime time1=0, // время первой точкиdouble price1=0, // цена первой точкиdatetime time2=0, // время второй точкиdouble price2=0, // цена второй точкиconstENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий прямоугольникаconstint width=2, // толщина линий прямоугольникаconstbool fill=false, // заливка прямоугольника цветомconstbool back=false, // на заднем планеconstbool selection=false, // выделить для перемещенийconstbool hidden=true, // скрыт в списке объектовconstlong z_order=0) // приоритет на нажатие мышью
{
//--- сбросим значение ошибкиResetLastError();
//--- создадим прямоугольник по заданным координатамif(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": не удалось создать прямоугольник! Код ошибки = ",GetLastError());
return(false);
}
//--- установим цвет прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линий прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линий прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- включим (true) или отключим (false) режим заливки прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- отобразим на переднем (false) или заднем (true) планеObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим выделения прямоугольника для перемещений//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection//--- по умолчанию равен true, что позволяет выделять и перемещать этот объектObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектовObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графикеObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнениеreturn(true);
}
//+------------------------------------------------------------------+void DeleteObjects()
{
for(int i=0; i<NumberOfDays; i++)
ObjectDelete("AS"+i);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+void start()
{
datetime dt=CurTime();
for(int i=0; i<NumberOfDays; i++)
{
DrawObjects(dt, "AS"+i, AsiaBegin, AsiaEnd);
dt=decDateTradeDay(dt);
while(TimeDayOfWeek(dt)>5)
dt=decDateTradeDay(dt);
}
}
//+------------------------------------------------------------------+void DrawObjects(datetime dt, string no, string tb, string te)
{
datetime t1, t2;
double p1, p2;
int b1, b2;
t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
if(!TimeDayOfWeek(t1))
return;
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
p2=Low [Lowest(NULL, 0, MODE_LOW, b1-b2, b2)];
ObjectSet(no, OBJPROP_TIME1, t1);
ObjectSet(no, OBJPROP_PRICE1, p1);
ObjectSet(no, OBJPROP_TIME2, t2);
ObjectSet(no, OBJPROP_PRICE2, p2);
}
//+------------------------------------------------------------------+datetime decDateTradeDay(datetime dt)
{
int ty=TimeYear(dt);
int tm=TimeMonth(dt);
int td=TimeDay(dt);
int th=TimeHour(dt);
int ti=TimeMinute(dt);
td--;
if(td==0)
{
tm--;
if(tm==0)
{
ty--;
tm=12;
}
if(tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12)
td=31;
if(tm==2)
if(MathMod(ty, 4)==0)
td=29;
else
td=28;
if(tm==4 || tm==6 || tm==9 || tm==11)
td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+
Bonjour Chers gourous de la programmation, je vous demande de m'aider à terminer ce robot.
Je ne suis pas un programmeur, ce robot est assemblé par moi-même à partir de diverses pièces trouvées sur Internet, mais je ne peux pas attacher les deux fonctions restantes que j'aimerais voir. Aidez-moi, s'il vous plaît. Je pense que pour vous, ce ne sera pas aussi difficile que pour moi. Si vous souhaitez nous aider, veuillez créer une fonction qui ferme l'ordre en attente après le déclenchement de l'un des deux ordres en attente. Et la deuxième fonction devrait automatiquement augmenter un lot de l'ordre ("supposons" que pour chaque 50 $ de solde 0,01 lot, lorsque vous atteignez 100 $ le robot augmentera automatiquement un lot de 0,02). Merci d'avance pour votre aide.
externint TakeProfit = 100.0;
externbool AllPositions = True; // Управлять всеми позициямиexternbool ProfitTrailing = True; // Тралить только профитexternint TrailingStop = 50; // Фиксированный размер тралаexternint TrailingStep = 0; // Шаг тралаexternbool UseSound = False; // Использовать звуковой сигналexternstring NameFileSound = "expert.wav"; // Наименование звукового файлаvoid start()
{
double TakeProfitLevelB;
double TakeProfitLevelS;
double BuyStart = Ask + 400*_Point;
double SellStart = Bid - 400*_Point;
TakeProfitLevelB = BuyStart + TakeProfit*Point;
TakeProfitLevelS = SellStart - TakeProfit*Point;
if (Open[1]==Close[1]&& OrdersTotal()==0)
{
int BuyTicket = OrderSend(Symbol(),OP_BUYSTOP,0.10,BuyStart,3,0,TakeProfitLevelB,NULL,0,0,Green);
int SellTicket = OrderSend(Symbol(),OP_SELLSTOP,0.10,SellStart,3,0,TakeProfitLevelS,NULL,0,0,Blue);
}
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (AllPositions || OrderSymbol()==Symbol()) {
TrailingPositions();
}
}
}
}
void TrailingPositions()
{
double pBid, pAsk, pp;
pp = MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
pBid = MarketInfo(OrderSymbol(), MODE_BID);
if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) {
if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
ModifyStopLoss(pBid-TrailingStop*pp);
return;
}
}
}
if (OrderType()==OP_SELL) {
pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
ModifyStopLoss(pAsk+TrailingStop*pp);
return;
}
}
}
}
void ModifyStopLoss(double ldStopLoss)
{
bool fm;
fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
Merci cher gss pour l'intérêt que vous portez à ma demande. C'est la raison pour laquelle j'ai décidé de m'adresser au gourou de MQL4. Le code que j'ai posté fonctionne. Je l'ai construit avec l'aide de plusieurs Expert Advisors, ou pour être plus précis, j'ai utilisé uniquement la fonction Trailing Stop. Le reste, je l'ai inventé moi-même (concernant les commandes en cours). Je voudrais vous demander, ainsi qu'à d'autres gourous, de jeter un coup d'œil à mon code et d'ajouter deux fonctions supplémentaires à ce robot, si vous le voulez bien.
1) Pour supprimer un ordre en attente lorsque l'un d'entre eux se déclenche.
2) Augmentation automatique des lots (pour chaque 50$ 0.01 i.e. pour 100$ ce sera 0.02)
Par exemple,s'il y a une différence dans les règlements ou les baies, il devrait toujours y avoir un ordre en attente pour une différence de disons 13 pips.
c'est-à-dire quesi la transaction est bénéficiaire, c'est-à-dire que l'ordre avance --- c'est-à-dire qu'en cas de mouvement inverse, le verrou sera positif.
Dans le cas de l'ouverture d'une partie du verrou, un ordre pour la différence doit être placé.
semble être tout. Encore une fois ---le conseiller expert ne devrait pas se fermer tout seulsans boutons supplémentaires sur le graphique.
Bonjour à tous. Qui peut écrire un indicateur dans mt4, de sorte que les sessions de trading actives (peuvent être définies de 10 à 18) soient affichées sous forme de bougies japonaises.
ok
Bonjour !
Y a-t-il ici des artisans qui pourraient écrire un EA basé sur un indicateur informationnel de la force des devises. L'algorithme est le suivant. Nous attendons l'apparition de la monnaie forte et de la monnaie faible. Dans l'exemple de la capture d'écran, il s'agit d'EUR et d'USD. Si la différence est significative (à définir dans les paramètres de l'EA), alors nous ouvrons une position. Dans l'exemple de la capture d'écran, vous devez entrer dans une vente, ce que je ferai lundi. Dans l'EA, nous devons définir le paramètre de l'horizon temporel, à partir duquel l'EA doit prendre le signal (différence de force des différentes devises). La différence de force de la devise est le signal. Le Stop Loss n'est pas nécessaire. Le Take Profit est nécessaire. Si le prix va contre nous, faisons la moyenne. Dans votre conseiller expert, définissez l'étape de calcul de la moyenne, le nombre d'ordres, le nombre magique, la taille initiale du lot et le facteur d'augmentation du lot. J'ai récemment négocié avec cette méthode et j'en suis très satisfait. Pour moi, c'est un graal.
Bonjour à tous. Pouvez-vous écrire un indicateur dans mt4, pour afficher les sessions de trading actives (vous pouvez définir le temps de 10-18) sous la forme de bougies japonaises.
Bonjour Chers gourous de la programmation, je vous demande de m'aider à terminer ce robot.
Je ne suis pas un programmeur, ce robot est assemblé par moi-même à partir de diverses pièces trouvées sur Internet, mais je ne peux pas attacher les deux fonctions restantes que j'aimerais voir. Aidez-moi, s'il vous plaît. Je pense que pour vous, ce ne sera pas aussi difficile que pour moi. Si vous souhaitez nous aider, veuillez créer une fonction qui ferme l'ordre en attente après le déclenchement de l'un des deux ordres en attente. Et la deuxième fonction devrait automatiquement augmenter un lot de l'ordre ("supposons" que pour chaque 50 $ de solde 0,01 lot, lorsque vous atteignez 100 $ le robot augmentera automatiquement un lot de 0,02). Merci d'avance pour votre aide.
Regardez les e-News-Lucky$.mq4.
Regardez la méthode de sélection de la taille de la position à proportion fixe (R. Jones) - MQL4 et MetaTrader 4 - MQL4 Algo-Traders Forum - Page 3 (mql5.com )
Regardez les e-News-Lucky$.mq4.
Regardez la méthode de sélection de la taille de la position à proportion fixe (R. Jones) - MQL4 et MetaTrader 4 - MQL4 Algo-Trader Forum - Page 3 (mql5.com )
Bonjour à tous, jetez un coup d'oeil à mon idée d'indicateur, afin de ne pas spammer tous les messages, voici le lien
https://www.mql5.com/ru/forum/35071/page144#comment_22289427
c'est-à-dire quesi la transaction est bénéficiaire, c'est-à-dire que l'ordre avance --- c'est-à-dire qu'en cas de mouvement inverse, le verrou sera positif.
Dans le cas de l'ouverture d'une partie du verrou, un ordre pour la différence doit être placé.
semble être tout. Encore une fois --- le conseiller expert ne devrait pas se fermer tout seulsans boutons supplémentaires sur le graphique.