[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 251

 
skyjet :
프로, 도와주세요! 하나의 터미널에 4개의 통화에 대한 어드바이저를 설치했지만 그 중 1개의 통화만 거래를 엽니다. 이유는 무엇입니까? 동시에 4개의 통화에 대한 작업을 수행하는 방법은 무엇입니까?

나는 최근에 이 문제를 직접 다루었습니다. 어드바이저에서 통화를 정렬해야 한다는 사실 외에도 포인트, 매도, 매수, 자릿수를 정확하게 지정해야 합니다. 사용되는 경우 각 통화에 대한 과거 데이터 페이징. 미리 지정된 통화 iBar, iClose 로 계산이 있는 경우 NULL 대신 통화 목록도 삽입합니다. 다음은 25개 통화 쌍의 예입니다. 제가 대단한 전문가는 아닐 수도 있지만, 전문가들로부터 명확한 답변을 받지 못해서 스스로 해결해야 했습니다.


 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 :
예 :)
너무 빨리 대답하기 때문에 어리석은 질문에 대답하십시오. 코드에서 실수 1을 하면 터미널에서 코드를 던질까요? 이 정보가 서버로 이동합니까?
 
granit77 :
너무 빨리 대답하기 때문에 어리석은 질문에 대답하십시오. 코드에서 실수 1을 하면 터미널에서 코드를 던질까요? 이 정보가 서버로 이동합니까?

질문에 참여하고 " error 130 "만 추가합니다.

 
granit77 :
너무 빨리 대답하기 때문에 어리석은 질문에 대답하십시오. 코드에서 실수 1을 하면 터미널에서 코드를 던질까요? 이 정보가 서버로 이동합니까?


나는 즉시 말할 것이다:

- 저는 세르게예프가 아닙니다 :)

- 그리고 나는 모른다 :)

하지만

- 경험을 통해 배우기 쉽습니다 :)

 
granit77 :
너무 빨리 대답하기 때문에 어리석은 질문에 대답하십시오. 코드에서 실수 1을 하면 터미널에서 코드를 던질까요? 이 정보가 서버로 이동합니까?

확인했는데 작동하지 않습니다. 수정하면 이것이 최종 응답입니다.
 
sergeev :
확인했는데 작동하지 않습니다. 수정하면 이것이 최종 응답입니다.
감사합니다. 너무 걱정하지 않으셔도 됩니다.
 
Roman. :


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() 기능을 찾아 올빼미 코드에 삽입하면 모든 것이 작동합니다... 할당을 통해서도 가능합니다 ...

Roman, 도움과 전문적인 접근에 감사드립니다 :)
 
모든 미결 주문에 대한 수수료를 결정하는 기능/명령이 있는지 알려주십시오.
 

수정을 사용하여 반복하는 데 문제가 있습니다.

가장 흥미로운 점은 표준 후행 함수가 이 두 함수를 하나씩 작동하며 잘 작동하며 손익분기점과 함께 프랙탈 수정을 사용하면 프랙탈 및 손익분기점에 대한 끝없는 수정이 시작된다는 것입니다.

수정을 기반으로 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 :
모든 미결 주문에 대한 수수료를 결정하는 기능/명령이 있는지 알려주십시오.
OrderCommission () 함수를 사용하여 금액을 직접 계산하지 않으시겠습니까?