skyjet : 프로, 도와주세요! 하나의 터미널에 4개의 통화에 대한 어드바이저를 설치했지만 그 중 1개의 통화만 거래를 엽니다. 이유는 무엇입니까? 동시에 4개의 통화에 대한 작업을 수행하는 방법은 무엇입니까?
나는 최근에 이 문제를 직접 다루었습니다. 어드바이저에서 통화를 정렬해야 한다는 사실 외에도 포인트, 매도, 매수, 자릿수를 정확하게 지정해야 합니다. 사용되는 경우 각 통화에 대한 과거 데이터 페이징. 미리 지정된 통화 iBar, iClose 로 계산이 있는 경우 NULL 대신 통화 목록도 삽입합니다. 다음은 25개 통화 쌍의 예입니다. 제가 대단한 전문가는 아닐 수도 있지만, 전문가들로부터 명확한 답변을 받지 못해서 스스로 해결해야 했습니다.
가장 흥미로운 점은 표준 후행 함수가 이 두 함수를 하나씩 작동하며 잘 작동하며 손익분기점과 함께 프랙탈 수정을 사용하면 프랙탈 및 손익분기점에 대한 끝없는 수정이 시작된다는 것입니다.
수정을 기반으로 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; // Из цикла модифи. }
프로, 도와주세요! 하나의 터미널에 4개의 통화에 대한 어드바이저를 설치했지만 그 중 1개의 통화만 거래를 엽니다. 이유는 무엇입니까? 동시에 4개의 통화에 대한 작업을 수행하는 방법은 무엇입니까?
나는 최근에 이 문제를 직접 다루었습니다. 어드바이저에서 통화를 정렬해야 한다는 사실 외에도 포인트, 매도, 매수, 자릿수를 정확하게 지정해야 합니다. 사용되는 경우 각 통화에 대한 과거 데이터 페이징. 미리 지정된 통화 iBar, iClose 로 계산이 있는 경우 NULL 대신 통화 목록도 삽입합니다. 다음은 25개 통화 쌍의 예입니다. 제가 대단한 전문가는 아닐 수도 있지만, 전문가들로부터 명확한 답변을 받지 못해서 스스로 해결해야 했습니다.
예 :)
너무 빨리 대답하기 때문에 어리석은 질문에 대답하십시오. 코드에서 실수 1을 하면 터미널에서 코드를 던질까요? 이 정보가 서버로 이동합니까?
질문에 참여하고 " error 130 "만 추가합니다.
너무 빨리 대답하기 때문에 어리석은 질문에 대답하십시오. 코드에서 실수 1을 하면 터미널에서 코드를 던질까요? 이 정보가 서버로 이동합니까?
나는 즉시 말할 것이다:
- 저는 세르게예프가 아닙니다 :)
- 그리고 나는 모른다 :)
하지만
- 경험을 통해 배우기 쉽습니다 :)
너무 빨리 대답하기 때문에 어리석은 질문에 대답하십시오. 코드에서 실수 1을 하면 터미널에서 코드를 던질까요? 이 정보가 서버로 이동합니까?
확인했는데 작동하지 않습니다. 수정하면 이것이 최종 응답입니다.
확인했는데 작동하지 않습니다. 수정하면 이것이 최종 응답입니다.
1. EURUSD 또는 GBPUSD ...등. - 명시적 으로 의미합니다... ticket=OrderSend( EURUSD , op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);
2.sy=기호(); 티켓=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen); - 즉, 할당함으로써 ...
이 유능한 기능을 사용하면 온라인용 OpenPosition() 기능을 찾아 올빼미 코드에 삽입하면 모든 것이 작동합니다... 할당을 통해서도 가능합니다 ...
수정을 사용하여 반복하는 데 문제가 있습니다.
가장 흥미로운 점은 표준 후행 함수가 이 두 함수를 하나씩 작동하며 잘 작동하며 손익분기점과 함께 프랙탈 수정을 사용하면 프랙탈 및 손익분기점에 대한 끝없는 수정이 시작된다는 것입니다.
수정을 기반으로 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; // Из цикла модифи.
}
모든 미결 주문에 대한 수수료를 결정하는 기능/명령이 있는지 알려주십시오.