From d09968b827538c4ddb37457073b430b6d1ca8a6c Mon Sep 17 00:00:00 2001 From: kate-deriv <121025168+kate-deriv@users.noreply.github.com> Date: Wed, 7 Aug 2024 07:48:28 +0300 Subject: [PATCH 01/72] DTRA / Kate / DTRA-1560 / DTRADER-V2]: Implement Notification banner for opened and closed position (#16290) * feat: add purchase notification * feat: add redirect on click to contract details * feat: add notifications for closing position * refactor: add setter for callback into a mockstore * refactor: show purchase notification only on trading page and add tests for notification * feat: show sell notifications on any page and solve the problem with double notifications * refactor: test * refactor: remobe purchase notification for other pages * refactor: extract logic with contract title into a sep function * refactor: add tests for new fun and apply suggestions * fix: test case * refactor: apply suggestions * chore: remove undefined --- packages/core/src/Stores/portfolio-store.js | 69 ++++++++++++++----- .../__tests__/dtrader-v2-helpers.spec.ts | 21 +++++- .../src/utils/helpers/dtrader-v2-helpers.ts | 18 +++++ packages/stores/src/mockStore.ts | 1 + packages/stores/types.ts | 3 + .../PurchaseButton/purchase-button.tsx | 12 +++- .../__tests__/notifications.spec.tsx | 66 ++++++++++++++++++ .../AppV2/Containers/Notifications/index.ts | 1 + .../Notifications/notifications.scss | 22 ++++++ .../Notifications/notifications.tsx | 49 +++++++++++-- .../src/Stores/Modules/Trading/trade-store.ts | 38 ++++++++-- 11 files changed, 269 insertions(+), 31 deletions(-) create mode 100644 packages/trader/src/AppV2/Containers/Notifications/__tests__/notifications.spec.tsx create mode 100644 packages/trader/src/AppV2/Containers/Notifications/notifications.scss diff --git a/packages/core/src/Stores/portfolio-store.js b/packages/core/src/Stores/portfolio-store.js index c2473d8a03fd..ebe189065b9c 100644 --- a/packages/core/src/Stores/portfolio-store.js +++ b/packages/core/src/Stores/portfolio-store.js @@ -3,22 +3,26 @@ import { action, computed, observable, reaction, makeObservable, override } from import { computedFn } from 'mobx-utils'; import { ChartBarrierStore, - isAccumulatorContract, - isEmptyObject, - isEnded, - isValidToSell, - isMultiplierContract, - getCurrentTick, - getDisplayStatus, - WS, - filterDisabledPositions, - formatPortfolioPosition, contractCancelled, contractSold, + filterDisabledPositions, + formatMoney, + formatPortfolioPosition, + getContractPath, + getCurrentTick, + getTotalProfit, + getDisplayStatus, getDurationPeriod, getDurationTime, getDurationUnitText, getEndTime, + getTradeNotificationMessage, + isAccumulatorContract, + isEmptyObject, + isEnded, + isValidToSell, + isMultiplierContract, + WS, TRADE_TYPES, removeBarrier, routes, @@ -26,7 +30,7 @@ import { } from '@deriv/shared'; import { Money } from '@deriv/components'; import { Analytics } from '@deriv-com/analytics'; - +import { localize } from '@deriv/translations'; import BaseStore from './base-store'; export default class PortfolioStore extends BaseStore { @@ -35,6 +39,8 @@ export default class PortfolioStore extends BaseStore { positions_map = {}; is_loading = true; error = ''; + addNotificationBannerCallback; + sell_notifications = []; //accumulators open_accu_contract = null; @@ -85,6 +91,8 @@ export default class PortfolioStore extends BaseStore { onUnmount: override, totals: computed, setActivePositions: action.bound, + setAddNotificationBannerCallback: action.bound, + sell_notifications: observable, is_active_empty: computed, active_positions_count: computed, is_empty: computed, @@ -123,6 +131,10 @@ export default class PortfolioStore extends BaseStore { this.has_subscribed_to_poc_and_transaction = false; } + setAddNotificationBannerCallback(callback) { + this.addNotificationBannerCallback = callback; + } + portfolioHandler(response) { this.is_loading = false; if ('error' in response) { @@ -408,12 +420,35 @@ export default class PortfolioStore extends BaseStore { this.positions[i].is_loading = false; - if ( - this.root_store.ui.is_mobile && - getEndTime(contract_response) && - window.location.pathname === routes.trade - ) { - this.root_store.notifications.addTradeNotification(this.positions[i].contract_info); + if (this.root_store.ui.is_mobile && getEndTime(contract_response)) { + const contract_info = this.positions[i].contract_info; + + if (window.location.pathname === routes.trade) + this.root_store.notifications.addTradeNotification(contract_info); + + const { contract_id, contract_type: trade_type, currency, profit, shortcode, status } = contract_info; + + const new_notification_id = `${contract_id}_${status}`; + if (this.sell_notifications.some(({ id }) => id === new_notification_id)) return; + + this.sell_notifications.push({ id: new_notification_id }); + + const calculated_profit = + isMultiplierContract(trade_type) && !isNaN(profit) ? getTotalProfit(contract_info) : profit; + const is_won = status === 'won' || calculated_profit >= 0; + const formatted_profit = `${is_won ? localize('Profit') : localize('Loss')}: ${ + is_won ? '+' : '' + }${formatMoney(currency, calculated_profit, true, 0, 0)} ${currency}`; + + this.addNotificationBannerCallback?.( + { + message: getTradeNotificationMessage(shortcode), + redirectTo: getContractPath(contract_id), + title: formatted_profit, + type: is_won ? 'success' : 'error', + }, + is_won ? 'success' : 'error' + ); } }; diff --git a/packages/shared/src/utils/helpers/__tests__/dtrader-v2-helpers.spec.ts b/packages/shared/src/utils/helpers/__tests__/dtrader-v2-helpers.spec.ts index 93e36b2759b5..0513c7eef754 100644 --- a/packages/shared/src/utils/helpers/__tests__/dtrader-v2-helpers.spec.ts +++ b/packages/shared/src/utils/helpers/__tests__/dtrader-v2-helpers.spec.ts @@ -1,5 +1,10 @@ import { routes } from '../../routes'; -import { getPositionsV2TabIndexFromURL, isDTraderV2, POSITIONS_V2_TAB_NAME } from '../dtrader-v2-helpers'; +import { + getPositionsV2TabIndexFromURL, + getTradeNotificationMessage, + isDTraderV2, + POSITIONS_V2_TAB_NAME, +} from '../dtrader-v2-helpers'; describe('getPositionsV2TabIndexFromURL', () => { const originalWindowLocation = window.location; @@ -71,3 +76,17 @@ describe('isDTraderV2', () => { expect(isDTraderV2()).toBe(false); }); }); + +describe('getTradeNotificationMessage', () => { + it('should return correct trade notification message based on passed shortcode', () => { + expect(getTradeNotificationMessage('ACCU_1HZ100V_10.00_0_0.03_1_0.000379665263_1722518733_0')).toBe( + 'Accumulators - Volatility 100 (1s) Index' + ); + expect(getTradeNotificationMessage('PUT_1HZ100V_19.51_1722518877_1722519177_S0P_0')).toBe( + 'Fall - Volatility 100 (1s) Index' + ); + expect(getTradeNotificationMessage('CALL_FRXAUDUSD_26.62_1722518945_1722988799_658680_0')).toBe( + 'Higher - AUD/USD' + ); + }); +}); diff --git a/packages/shared/src/utils/helpers/dtrader-v2-helpers.ts b/packages/shared/src/utils/helpers/dtrader-v2-helpers.ts index dd4b63449843..de7fa18dd85b 100644 --- a/packages/shared/src/utils/helpers/dtrader-v2-helpers.ts +++ b/packages/shared/src/utils/helpers/dtrader-v2-helpers.ts @@ -1,6 +1,9 @@ /* TODO: remove this component after /trader package is separated into its own repo. It's used to keep dtrader_v2 utils that are currently shared between various packages. */ +import { extractInfoFromShortcode, isHighLow } from '../shortcode'; +import { getMarketName, getTradeTypeName } from './market-underlying'; + export const POSITIONS_V2_TAB_NAME = { OPEN: 'Open', CLOSED: 'Closed', @@ -17,3 +20,18 @@ export const getPositionsV2TabIndexFromURL = () => { export const isDTraderV2 = () => !!JSON.parse(localStorage.getItem('FeatureFlagsStore') ?? '{}')?.data?.dtrader_v2 && window.innerWidth < 600; + +export const getTradeNotificationMessage = (shortcode: string) => { + const extracted_info_from_shortcode = extractInfoFromShortcode(shortcode); + const symbol = getMarketName(extracted_info_from_shortcode.underlying); + const trade_type = extracted_info_from_shortcode.category; + const contract_type = getTradeTypeName(trade_type, { + isHighLow: isHighLow({ shortcode }), + showMainTitle: true, + }); + const contract_type_with_subtype = `${contract_type} ${getTradeTypeName(trade_type, { + isHighLow: isHighLow({ shortcode }), + })}`.trim(); + + return `${contract_type_with_subtype} - ${symbol}`; +}; diff --git a/packages/stores/src/mockStore.ts b/packages/stores/src/mockStore.ts index 78a499fee62f..2d83ad0f5a3c 100644 --- a/packages/stores/src/mockStore.ts +++ b/packages/stores/src/mockStore.ts @@ -608,6 +608,7 @@ const mock = (): TStores & { is_mock: boolean } => { positions: [], removePositionById: jest.fn(), setContractType: jest.fn(), + setAddNotificationBannerCallback: jest.fn(), }, contract_trade: { accountSwitchListener: jest.fn(), diff --git a/packages/stores/types.ts b/packages/stores/types.ts index e75284c8204c..668c855ea421 100644 --- a/packages/stores/types.ts +++ b/packages/stores/types.ts @@ -848,6 +848,9 @@ type TPortfolioStore = { positions: TPortfolioPosition[]; removePositionById: (contract_id?: number) => void; setContractType: (contract_type: string) => void; + setAddNotificationBannerCallback: ( + cb?: (params: { message: string; redirectTo: string; timestamp: number; title: string }, status: string) => void + ) => void; }; type TAccumulatorBarriersData = { diff --git a/packages/trader/src/AppV2/Components/PurchaseButton/purchase-button.tsx b/packages/trader/src/AppV2/Components/PurchaseButton/purchase-button.tsx index 4352bcb1aa30..7f14f3f8e582 100644 --- a/packages/trader/src/AppV2/Components/PurchaseButton/purchase-button.tsx +++ b/packages/trader/src/AppV2/Components/PurchaseButton/purchase-button.tsx @@ -3,7 +3,7 @@ import clsx from 'clsx'; import { observer } from 'mobx-react'; import { useStore } from '@deriv/stores'; import { useTraderStore } from 'Stores/useTraderStores'; -import { Button } from '@deriv-com/quill-ui'; +import { Button, useNotifications } from '@deriv-com/quill-ui'; import { useDevice } from '@deriv-com/ui'; import { getContractTypeDisplay, @@ -17,10 +17,12 @@ import { import { Localize } from '@deriv/translations'; import PurchaseButtonContent from './purchase-button-content'; import { getTradeTypeTabsList } from 'AppV2/Utils/trade-params-utils'; +import { StandaloneStopwatchRegularIcon } from '@deriv/quill-icons'; const PurchaseButton = observer(() => { const [loading_button_index, setLoadingButtonIndex] = React.useState(null); const { isMobile } = useDevice(); + const { addBanner } = useNotifications(); const { portfolio: { all_positions, onClickSell }, @@ -82,6 +84,12 @@ const PurchaseButton = observer(() => { return button_index ? 'sell' : 'purchase'; }; + const addNotificationBannerCallback = (params: Parameters[0]) => + addBanner({ + icon: , + ...params, + }); + React.useEffect(() => { if (is_purchase_enabled) setLoadingButtonIndex(null); }, [is_purchase_enabled]); @@ -134,7 +142,7 @@ const PurchaseButton = observer(() => { disabled={is_disabled && !is_loading} onClick={() => { setLoadingButtonIndex(index); - onPurchase(info.id, info.stake, trade_type, isMobile); + onPurchase(info.id, info.stake, trade_type, isMobile, addNotificationBannerCallback); }} > {!is_loading && ( diff --git a/packages/trader/src/AppV2/Containers/Notifications/__tests__/notifications.spec.tsx b/packages/trader/src/AppV2/Containers/Notifications/__tests__/notifications.spec.tsx new file mode 100644 index 000000000000..e51c1fe5d7a7 --- /dev/null +++ b/packages/trader/src/AppV2/Containers/Notifications/__tests__/notifications.spec.tsx @@ -0,0 +1,66 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { mockStore } from '@deriv/stores'; +import ModulesProvider from 'Stores/Providers/modules-providers'; +import TraderProviders from '../../../../trader-providers'; +import { ReportsStoreProvider } from '../../../../../../reports/src/Stores/useReportsStores'; +import Notifications from '../notifications'; + +const notification_banners = 'NotificationBanners'; +const banner_content = 'Accumulators - Volatility 100 (1s) Index'; + +jest.mock('@deriv-com/quill-ui', () => ({ + ...jest.requireActual('@deriv-com/quill-ui'), + useNotifications: jest.fn(() => ({ + addBanner: jest.fn(), + banners: [ + { + message: banner_content, + redirectTo: '/contract/11111', + title: 'Stake: 10.00 USD', + id: 'mock_id', + }, + ], + removeBanner: jest.fn(), + })), + NotificationBanners: jest.fn(({ banners }) => ( +
+

{notification_banners}

+

{banners[0].message}

+
+ )), +})); + +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useLocation: jest.fn(() => ({ + pathname: '/dtrader', + })), +})); + +describe('Notifications', () => { + let default_mock_store: ReturnType; + + beforeEach(() => { + default_mock_store = mockStore({}); + }); + + const mockNotifications = () => { + render( + + + + + + + + ); + }; + + it('should render notifications if useNotifications returns array with notifications', () => { + mockNotifications(); + + expect(screen.getByText(notification_banners)).toBeInTheDocument(); + expect(screen.getByText(banner_content)).toBeInTheDocument(); + }); +}); diff --git a/packages/trader/src/AppV2/Containers/Notifications/index.ts b/packages/trader/src/AppV2/Containers/Notifications/index.ts index fc7cecf0dbe6..9d78de986226 100644 --- a/packages/trader/src/AppV2/Containers/Notifications/index.ts +++ b/packages/trader/src/AppV2/Containers/Notifications/index.ts @@ -1,3 +1,4 @@ +import './notifications.scss'; import Notifications from './notifications'; export default Notifications; diff --git a/packages/trader/src/AppV2/Containers/Notifications/notifications.scss b/packages/trader/src/AppV2/Containers/Notifications/notifications.scss new file mode 100644 index 000000000000..c2be96b125ab --- /dev/null +++ b/packages/trader/src/AppV2/Containers/Notifications/notifications.scss @@ -0,0 +1,22 @@ +.trade-notification { + .details { + p { + color: var(--component-textIcon-normal-default); + &.title { + color: var(--component-textIcon-normal-prominent); + } + } + } + + &--purchase { + fill: var(--component-textIcon-statusNormal-information); + } + + &--success { + fill: var(--core-color-solid-green-900); + } + + &--error { + fill: var(--core-color-solid-red-900); + } +} diff --git a/packages/trader/src/AppV2/Containers/Notifications/notifications.tsx b/packages/trader/src/AppV2/Containers/Notifications/notifications.tsx index 0e6de1057c1c..2c469ac254c0 100644 --- a/packages/trader/src/AppV2/Containers/Notifications/notifications.tsx +++ b/packages/trader/src/AppV2/Containers/Notifications/notifications.tsx @@ -1,14 +1,49 @@ -import { useNotifications, NotificationBanners } from '@deriv-com/quill-ui'; import React from 'react'; +import { observer, useStore } from '@deriv/stores'; +import { useNotifications, NotificationBanners } from '@deriv-com/quill-ui'; +import { StandaloneFlagCheckeredFillIcon } from '@deriv/quill-icons'; +import { routes } from '@deriv/shared'; +import { useLocation } from 'react-router-dom'; + +const Notifications = observer(() => { + const { addBanner, banners, removeBanner } = useNotifications(); + const { portfolio } = useStore(); + const { setAddNotificationBannerCallback } = portfolio; + const { pathname } = useLocation(); + + React.useEffect(() => { + if (pathname === routes.trade) return; + banners.forEach(({ type, id }) => { + if (!type) { + // Sell notifications have type and Purchase ones do not. + removeBanner(id); + } + }); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [banners, pathname]); + + React.useEffect(() => { + const addNotificationBannerCallback = (params: Parameters[0], result: string) => + addBanner({ + icon: , + ...params, + }); + + setAddNotificationBannerCallback(addNotificationBannerCallback); -const Notifications = () => { - const { banners, removeBanner } = useNotifications(); + return () => setAddNotificationBannerCallback(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); return ( - <> - - + ); -}; +}); export default Notifications; diff --git a/packages/trader/src/Stores/Modules/Trading/trade-store.ts b/packages/trader/src/Stores/Modules/Trading/trade-store.ts index 54f546cb8216..6e5d556f4096 100644 --- a/packages/trader/src/Stores/Modules/Trading/trade-store.ts +++ b/packages/trader/src/Stores/Modules/Trading/trade-store.ts @@ -11,6 +11,7 @@ import { getPlatformSettings, getPropertyValue, getContractSubtype, + getTradeNotificationMessage, isBarrierSupported, isAccumulatorContract, isCryptocurrency, @@ -35,6 +36,10 @@ import { getContractTypesConfig, setTradeURLParams, getTradeURLParams, + getCardLabelsV2, + formatMoney, + getContractPath, + routes, } from '@deriv/shared'; import { Analytics } from '@deriv-com/analytics'; import type { TEvents } from '@deriv-com/analytics'; @@ -925,7 +930,13 @@ export default class TradeStore extends BaseStore { onPurchase = debounce(this.processPurchase, 300); - processPurchase(proposal_id: string, price: string | number, type: string, isMobile: boolean) { + processPurchase( + proposal_id: string, + price: string | number, + type: string, + isMobile: boolean, + callback?: (params: { message: string; redirectTo: string; title: string }) => void + ) { if (!this.is_purchase_enabled) return; if (proposal_id) { runInAction(() => { @@ -1025,11 +1036,30 @@ export default class TradeStore extends BaseStore { this.pushPurchaseDataToGtm(contract_data); if (this.root_store.ui.is_mobile) { const shortcode = response.buy.shortcode; + const extracted_info_from_shortcode = extractInfoFromShortcode(shortcode); + const contract_id = response.buy.contract_id; + const currency = getCurrencyDisplayCode(this.root_store.client.currency); + const formatted_stake = `${getCardLabelsV2().STAKE}: ${formatMoney( + currency, + response.buy.buy_price, + true, + 0, + 0 + )} ${currency}`; + const trade_type = extracted_info_from_shortcode.category; + + if (window.location.pathname === routes.trade) + callback?.({ + message: getTradeNotificationMessage(shortcode), + redirectTo: getContractPath(contract_id), + title: formatted_stake, + }); + this.root_store.notifications.addTradeNotification({ buy_price: is_multiplier ? this.amount : response.buy.buy_price, - contract_id: response.buy.contract_id, - contract_type: extractInfoFromShortcode(shortcode).category, - currency: getCurrencyDisplayCode(this.root_store.client.currency), + contract_id, + contract_type: trade_type, + currency, purchase_time: response.buy.purchase_time, shortcode, status: 'open', From f122c46a67496c911885e2c8c204ee21f0f7e073 Mon Sep 17 00:00:00 2001 From: ahmadtaimoor-deriv <129935294+ahmadtaimoor-deriv@users.noreply.github.com> Date: Wed, 7 Aug 2024 12:50:58 +0800 Subject: [PATCH 02/72] [DTRA]/Ahmad/DTRA-1439/Barrier Trade Params Dtrader V2 (#16315) * chore: barrier action sheet with description carousel * chore: barrier completed * fix: fix * fix: small fix * fix: fix * chore: final fixes * fix: fix * chore: fix * fix: fix test * fix: fix test * chore: small fix * fix: review fix --- package-lock.json | 8 +- packages/account/package.json | 2 +- packages/core/package.json | 2 +- packages/trader/package.json | 2 +- .../Carousel/__tests__/carousel.spec.tsx | 62 +++++-- .../AppV2/Components/Carousel/carousel.tsx | 32 ++-- .../Barrier/__tests__/barrier-input.spec.tsx | 152 ++++++++++++++++++ .../Barrier/__tests__/barrier.spec.tsx | 86 ++++++++++ .../Barrier/barrier-description.tsx | 44 +++++ .../Barrier/barrier-header.tsx | 21 +++ .../TradeParameters/Barrier/barrier-input.tsx | 121 ++++++++++++++ .../TradeParameters/Barrier/barrier.scss | 38 +++++ .../TradeParameters/Barrier/barrier.tsx | 81 ++++++++-- .../TradeParameters/Barrier/index.ts | 1 + 14 files changed, 615 insertions(+), 37 deletions(-) create mode 100644 packages/trader/src/AppV2/Components/TradeParameters/Barrier/__tests__/barrier-input.spec.tsx create mode 100644 packages/trader/src/AppV2/Components/TradeParameters/Barrier/__tests__/barrier.spec.tsx create mode 100644 packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-description.tsx create mode 100644 packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-header.tsx create mode 100644 packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-input.tsx create mode 100644 packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier.scss diff --git a/package-lock.json b/package-lock.json index 5815c204a35a..50d7afd5f6b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@datadog/browser-rum": "^5.11.0", "@deriv-com/analytics": "1.11.0", "@deriv-com/quill-tokens": "^2.0.4", - "@deriv-com/quill-ui": "1.13.23", + "@deriv-com/quill-ui": "1.13.27", "@deriv-com/translations": "1.3.4", "@deriv-com/ui": "1.29.9", "@deriv-com/utils": "^0.0.25", @@ -2959,9 +2959,9 @@ } }, "node_modules/@deriv-com/quill-ui": { - "version": "1.13.23", - "resolved": "https://registry.npmjs.org/@deriv-com/quill-ui/-/quill-ui-1.13.23.tgz", - "integrity": "sha512-jzg2z/3u0A7mLcEbrw8EZBpyE005x1xAyeIccER8xKY8ejmu9cMIFl8pe6UlQGUNBHpL2GFowTXY0kO4CZn+/Q==", + "version": "1.13.27", + "resolved": "https://registry.npmjs.org/@deriv-com/quill-ui/-/quill-ui-1.13.27.tgz", + "integrity": "sha512-+6MUwKuTIL4vRXFVyLT9dZP9TTSeN9PFERr7jpn9BpAW43P4b7/ELEuQtgOwcVvmsksNrvZScGCQAKBgja7tAQ==", "dependencies": { "@deriv-com/quill-tokens": "^2.0.8", "@deriv/quill-icons": "^1.22.10", diff --git a/packages/account/package.json b/packages/account/package.json index fe56643046cf..b416ed3696d5 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -35,7 +35,7 @@ "@deriv-com/utils": "^0.0.25", "@deriv-com/ui": "1.29.9", "@deriv/api": "^1.0.0", - "@deriv-com/quill-ui": "1.13.23", + "@deriv-com/quill-ui": "1.13.27", "@deriv/components": "^1.0.0", "@deriv/hooks": "^1.0.0", "@deriv/integration": "1.0.0", diff --git a/packages/core/package.json b/packages/core/package.json index 01555c5a3e84..ff9ba05db6df 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -98,7 +98,7 @@ "@datadog/browser-rum": "^5.11.0", "@deriv-com/analytics": "1.11.0", "@deriv-com/quill-tokens": "^2.0.4", - "@deriv-com/quill-ui": "1.13.23", + "@deriv-com/quill-ui": "1.13.27", "@deriv-com/translations": "1.3.4", "@deriv-com/ui": "1.29.9", "@deriv-com/utils": "^0.0.25", diff --git a/packages/trader/package.json b/packages/trader/package.json index df435d5b6831..024e45e3adb8 100644 --- a/packages/trader/package.json +++ b/packages/trader/package.json @@ -90,7 +90,7 @@ "@cloudflare/stream-react": "^1.9.1", "@deriv-com/analytics": "1.11.0", "@deriv-com/quill-tokens": "^2.0.4", - "@deriv-com/quill-ui": "1.13.23", + "@deriv-com/quill-ui": "1.13.27", "@deriv-com/utils": "^0.0.25", "@deriv-com/ui": "1.29.9", "@deriv/api-types": "1.0.172", diff --git a/packages/trader/src/AppV2/Components/Carousel/__tests__/carousel.spec.tsx b/packages/trader/src/AppV2/Components/Carousel/__tests__/carousel.spec.tsx index 8fc8bc655ad3..28a69cd1684d 100644 --- a/packages/trader/src/AppV2/Components/Carousel/__tests__/carousel.spec.tsx +++ b/packages/trader/src/AppV2/Components/Carousel/__tests__/carousel.spec.tsx @@ -31,26 +31,70 @@ const mock_props = { describe('Carousel', () => { it('should render all passed pages', () => { render(); - expect(screen.getAllByTestId(data_test_id)).toHaveLength(mock_pages.length); }); - it('should set index to 1 if user clicks on "Next"', () => { - const mockSetCurrentIndex = jest.fn(); - jest.spyOn(React, 'useState').mockImplementationOnce(() => [0, mockSetCurrentIndex]); + it('should set index to 1 if user clicks on "Next"', async () => { render(); + userEvent.click(screen.getByText('Next')); + await screen.findByText('Current Index: 1'); + }); + it('should set index to 0 if user clicks on "Previous"', async () => { + render(); userEvent.click(screen.getByText('Next')); - expect(mockSetCurrentIndex).toBeCalledWith(1); + userEvent.click(screen.getByText('Previous')); + await screen.findByText('Current Index: 0'); }); - it('should set index to 0 if user clicks on "Previous"', () => { - const mockSetCurrentIndex = jest.fn(); - jest.spyOn(React, 'useState').mockImplementationOnce(() => [1, mockSetCurrentIndex]); + it('should handle controlled component behavior', () => { + const setCurrentIndex = jest.fn(); + render(); + + userEvent.click(screen.getByText('Next')); + expect(setCurrentIndex).toHaveBeenCalledWith(1); + + userEvent.click(screen.getByText('Previous')); + expect(setCurrentIndex).toHaveBeenCalledWith(mock_pages.length - 1); + }); + + it('should cycle through pages correctly', async () => { render(); + userEvent.click(screen.getByText('Next')); + await screen.findByText('Current Index: 1'); + + userEvent.click(screen.getByText('Next')); + await screen.findByText('Current Index: 0'); + userEvent.click(screen.getByText('Previous')); + await screen.findByText('Current Index: 1'); + }); + + it('should call setCurrentIndex if provided on next click', () => { + const setCurrentIndex = jest.fn(); + render(); + userEvent.click(screen.getByText('Next')); + expect(setCurrentIndex).toHaveBeenCalledWith(1); + }); + + it('should call setCurrentIndex if provided on previous click', () => { + const setCurrentIndex = jest.fn(); + render(); + userEvent.click(screen.getByText('Previous')); + expect(setCurrentIndex).toHaveBeenCalledWith(0); + }); - expect(mockSetCurrentIndex).toBeCalledWith(0); + it('should wrap around to the first page when clicking next on the last page', async () => { + render(); + userEvent.click(screen.getByText('Next')); + userEvent.click(screen.getByText('Next')); + expect(screen.getByText('Current Index: 0')).toBeInTheDocument(); + }); + + it('should wrap around to the last page when clicking previous on the first page', async () => { + render(); + userEvent.click(screen.getByText('Previous')); + expect(screen.getByText('Current Index: 1')).toBeInTheDocument(); }); }); diff --git a/packages/trader/src/AppV2/Components/Carousel/carousel.tsx b/packages/trader/src/AppV2/Components/Carousel/carousel.tsx index 2f6bc4fb8d1c..c19ab887159e 100644 --- a/packages/trader/src/AppV2/Components/Carousel/carousel.tsx +++ b/packages/trader/src/AppV2/Components/Carousel/carousel.tsx @@ -5,31 +5,39 @@ type TCarousel = { header: typeof CarouselHeader; pages: { id: number; component: JSX.Element }[]; title?: React.ReactNode; + current_index?: number; + setCurrentIndex?: (arg: number) => void; }; -const Carousel = ({ header, pages, title }: TCarousel) => { - const [current_index, setCurrentIndex] = React.useState(0); +const Carousel = ({ header, pages, current_index, setCurrentIndex, title }: TCarousel) => { + const [internalIndex, setInternalIndex] = React.useState(0); const HeaderComponent = header; - const onNextClick = () => setCurrentIndex((current_index + 1) % pages.length); - const onPrevClick = () => setCurrentIndex((current_index - 1 + pages.length) % pages.length); + const isControlled = current_index !== undefined && setCurrentIndex !== undefined; + const index = isControlled ? current_index : internalIndex; + + const handleNextClick = () => { + const newIndex = (index + 1) % pages.length; + isControlled ? setCurrentIndex?.(newIndex) : setInternalIndex(newIndex); + }; + + const handlePrevClick = () => { + const newIndex = (index - 1 + pages.length) % pages.length; + isControlled ? setCurrentIndex?.(newIndex) : setInternalIndex(newIndex); + }; return (
    {pages.map(({ component, id }) => ( -
  • +
  • {component}
  • ))} diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Barrier/__tests__/barrier-input.spec.tsx b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/__tests__/barrier-input.spec.tsx new file mode 100644 index 000000000000..ca8e511471ec --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/__tests__/barrier-input.spec.tsx @@ -0,0 +1,152 @@ +import React from 'react'; +import { fireEvent, render, screen } from '@testing-library/react'; +import '@testing-library/jest-dom/extend-expect'; +import BarrierInput from '../barrier-input'; +import userEvent from '@testing-library/user-event'; +import TraderProviders from '../../../../../trader-providers'; +import { mockStore } from '@deriv/stores'; +import ModulesProvider from 'Stores/Providers/modules-providers'; +import { TCoreStores } from '@deriv/stores/types'; + +describe('BarrierInput', () => { + const setInitialBarrierValue = jest.fn(); + const onChange = jest.fn(); + const default_trade_store = { + modules: { + trade: { + barrier_1: '+10', + onChange, + validation_errors: { barrier_1: [] }, + duration: 10, + proposal_info: { CALL: { id: '123', message: 'test_message', has_error: true, spot: 12345 } }, + }, + }, + }; + + const mockBarrierInput = (mocked_store: TCoreStores) => { + render( + + + + + + ); + }; + + it('renders BarrierInput component correctly', () => { + mockBarrierInput(mockStore(default_trade_store)); + expect(screen.getByText('Above spot')).toBeInTheDocument(); + expect(screen.getByText('Below spot')).toBeInTheDocument(); + expect(screen.getByText('Fixed price')).toBeInTheDocument(); + expect(screen.getByPlaceholderText('Distance to spot')).toBeInTheDocument(); + expect(screen.getByText('Current spot')).toBeInTheDocument(); + expect(screen.getByText('12345')).toBeInTheDocument(); + }); + + it('calls setInitialBarrierValue and onChange on component mount', () => { + mockBarrierInput(mockStore(default_trade_store)); + expect(setInitialBarrierValue).toHaveBeenCalledWith('+10'); + }); + + it('handles chip selection correctly', () => { + mockBarrierInput(mockStore(default_trade_store)); + const aboveSpotChip = screen.getByText('Above spot'); + const belowSpotChip = screen.getByText('Below spot'); + const fixedPriceChip = screen.getByText('Fixed price'); + + userEvent.click(belowSpotChip); + expect(onChange).toHaveBeenCalledWith({ target: { name: 'barrier_1', value: '-10' } }); + + userEvent.click(fixedPriceChip); + expect(onChange).toHaveBeenCalledWith({ target: { name: 'barrier_1', value: '10' } }); + + userEvent.click(aboveSpotChip); + expect(onChange).toHaveBeenCalledWith({ target: { name: 'barrier_1', value: '+10' } }); + }); + + it('handles input change correctly', () => { + mockBarrierInput(mockStore(default_trade_store)); + const input = screen.getByPlaceholderText('Distance to spot'); + + fireEvent.change(input, { target: { value: '20' } }); + expect(onChange).toHaveBeenCalledWith({ target: { name: 'barrier_1', value: '+20' } }); + + const belowSpotChip = screen.getByText('Below spot'); + userEvent.click(belowSpotChip); + fireEvent.change(input, { target: { value: '15' } }); + expect(onChange).toHaveBeenCalledWith({ target: { name: 'barrier_1', value: '-15' } }); + }); + + it('sets initial barrier value and option correctly for a positive barrier', () => { + mockBarrierInput(mockStore(default_trade_store)); + expect(setInitialBarrierValue).toHaveBeenCalledWith('+10'); + expect(screen.getAllByRole('button')[0]).toHaveAttribute('data-state', 'selected'); + }); + + it('sets initial barrier value and option correctly for a negative barrier', () => { + default_trade_store.modules.trade.barrier_1 = '-10'; + mockBarrierInput(mockStore(default_trade_store)); + expect(setInitialBarrierValue).toHaveBeenCalledWith('-10'); + expect(screen.getAllByRole('button')[1]).toHaveAttribute('data-state', 'selected'); + }); + + it('sets initial barrier value and option correctly for a fixed price barrier', () => { + default_trade_store.modules.trade.barrier_1 = '30'; + mockBarrierInput(mockStore(default_trade_store)); + expect(setInitialBarrierValue).toHaveBeenCalledWith('30'); + expect(screen.getAllByRole('button')[2]).toHaveAttribute('data-state', 'selected'); + }); + + it('shows error when a validation error comes', () => { + default_trade_store.modules.trade.validation_errors.barrier_1 = ['Something went wrong'] as never; + mockBarrierInput(mockStore(default_trade_store)); + expect(screen.getByText('Something went wrong')).toBeInTheDocument(); + }); + + it('shows error when a validation error comes for fixed price as well', () => { + default_trade_store.modules.trade.validation_errors.barrier_1 = ['Something went wrong'] as never; + default_trade_store.modules.trade.barrier_1 = '10'; + mockBarrierInput(mockStore(default_trade_store)); + expect(screen.getByText('Something went wrong')).toBeInTheDocument(); + }); + + it('handles chip selection correctly for Above spot when initial barrier is negative', () => { + default_trade_store.modules.trade.barrier_1 = '-10'; + mockBarrierInput(mockStore(default_trade_store)); + + const aboveSpotChip = screen.getByText('Above spot'); + userEvent.click(aboveSpotChip); + + expect(onChange).toHaveBeenCalledWith({ target: { name: 'barrier_1', value: '+10' } }); + }); + + it('handles chip selection correctly for Below spot when initial barrier is positive', () => { + default_trade_store.modules.trade.barrier_1 = '+.6'; + mockBarrierInput(mockStore(default_trade_store)); + + const belowSpotChip = screen.getByText('Below spot'); + userEvent.click(belowSpotChip); + + expect(onChange).toHaveBeenCalledWith({ target: { name: 'barrier_1', value: '-0.6' } }); + }); + + it('handles chip selection correctly for Fixed price', () => { + default_trade_store.modules.trade.barrier_1 = '+.6'; + mockBarrierInput(mockStore(default_trade_store)); + + const fixedPriceChip = screen.getByText('Fixed price'); + userEvent.click(fixedPriceChip); + + expect(onChange).toHaveBeenCalledWith({ target: { name: 'barrier_1', value: '0.6' } }); + }); + + it('handles chip selection correctly for Above spot when initial barrier is fixed price', () => { + default_trade_store.modules.trade.barrier_1 = '.6'; + mockBarrierInput(mockStore(default_trade_store)); + + const aboveSpotChip = screen.getByText('Above spot'); + userEvent.click(aboveSpotChip); + + expect(onChange).toHaveBeenCalledWith({ target: { name: 'barrier_1', value: '+0.6' } }); + }); +}); diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Barrier/__tests__/barrier.spec.tsx b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/__tests__/barrier.spec.tsx new file mode 100644 index 000000000000..b076a80056ab --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/__tests__/barrier.spec.tsx @@ -0,0 +1,86 @@ +import React from 'react'; +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import Barrier from '../barrier'; +import TraderProviders from '../../../../../trader-providers'; +import { mockStore } from '@deriv/stores'; + +jest.mock('AppV2/Components/TradeParameters/Barrier/barrier-input', () => jest.fn(() =>
    Barrier Input
    )); + +jest.mock('@deriv/quill-icons', () => ({ + ...jest.requireActual('@deriv/quill-icons'), +})); + +describe('Barrier Component', () => { + let default_mock_store: ReturnType; + + beforeEach(() => { + default_mock_store = mockStore({ + modules: { + trade: { + onChange: jest.fn(), + validation_errors: { barrier_1: [] }, + duration: 10, + }, + }, + }); + }); + const mockBarriers = () => { + render( + + + + ); + }; + it('renders the Barrier component with initial state', () => { + mockBarriers(); + expect(screen.getByLabelText(/Barrier/i)).toBeInTheDocument(); + expect(screen.getByRole('textbox')).toBeInTheDocument(); + }); + + it('opens ActionSheet when clicking the TextField', () => { + mockBarriers(); + userEvent.click(screen.getByRole('textbox')); + expect(screen.getByText('Barrier Input')).toBeInTheDocument(); + }); + + it('displays BarrierDescription on the second carousel page', async () => { + mockBarriers(); + userEvent.click(screen.getByRole('textbox')); + await userEvent.click(screen.getByTestId('info-icon')); + expect(screen.getByText('Above spot:')).toBeInTheDocument(); + }); + + it('closes ActionSheet on pressing primary action when on first page', async () => { + mockBarriers(); + userEvent.click(screen.getByRole('textbox')); + expect(screen.getByText('Barrier Input')).toBeInTheDocument(); + userEvent.click(screen.getByText(/Save/)); + await waitFor(() => expect(screen.queryByText('Barrier Input')).not.toBeInTheDocument()); + }); + + it('shows got it button on going to the description page', async () => { + mockBarriers(); + userEvent.click(screen.getByRole('textbox')); + await userEvent.click(screen.getByTestId('info-icon')); + expect(screen.queryByText('Save')).not.toBeInTheDocument(); + expect(screen.queryByText('Got it')).toBeInTheDocument(); + }); + + it('should come back to main page on clicking got it button', async () => { + mockBarriers(); + userEvent.click(screen.getByRole('textbox')); + await userEvent.click(screen.getByTestId('info-icon')); + expect(screen.queryByText('Got it')).toBeInTheDocument(); + await userEvent.click(screen.getByText('Got it')); + expect(screen.queryByText('Save')).toBeInTheDocument(); + }); + + it('detects clicking outside the ActionSheet and closes it', async () => { + mockBarriers(); + userEvent.click(screen.getByRole('textbox')); + expect(screen.getByText('Barrier Input')).toBeInTheDocument(); + userEvent.click(screen.getByTestId('dt-actionsheet-overlay')); + await waitFor(() => expect(screen.queryByText('Barrier Input')).not.toBeInTheDocument()); + }); +}); diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-description.tsx b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-description.tsx new file mode 100644 index 000000000000..a9adc787f1dd --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-description.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { ActionSheet, Text } from '@deriv-com/quill-ui'; +import { Localize } from '@deriv/translations'; + +const BarrierDescription = ({ isDays }: { isDays: boolean }) => { + return ( + + {isDays ? ( + + + + ) : ( + <> +
    + + + + + + +
    +
    + + + + + + +
    +
    + + + + + + +
    + + )} +
    + ); +}; + +export default BarrierDescription; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-header.tsx b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-header.tsx new file mode 100644 index 000000000000..8aded318ca3e --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-header.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { ActionSheet } from '@deriv-com/quill-ui'; +import { LabelPairedCircleInfoMdRegularIcon } from '@deriv/quill-icons'; + +export type TBarrierHeader = { + current_index: number; + onPrevClick?: () => void; + onNextClick?: () => void; + title?: React.ReactNode; +}; + +const BarrierHeader = ({ current_index, onPrevClick, title }: TBarrierHeader) => ( + } + iconPosition='right' + /> +); + +export default BarrierHeader; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-input.tsx b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-input.tsx new file mode 100644 index 000000000000..994360abc725 --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier-input.tsx @@ -0,0 +1,121 @@ +import React from 'react'; +import { ActionSheet, Chip, Text, TextField, TextFieldAddon } from '@deriv-com/quill-ui'; + +import { localize, Localize } from '@deriv/translations'; +import { observer } from 'mobx-react'; +import { useTraderStore } from 'Stores/useTraderStores'; + +const chips_options = [ + { + name: , + }, + { + name: , + }, + { + name: , + }, +]; +const BarrierInput = observer( + ({ setInitialBarrierValue, isDays }: { setInitialBarrierValue: (val: string) => void; isDays: boolean }) => { + const { barrier_1, onChange, validation_errors, proposal_info } = useTraderStore(); + const [option, setOption] = React.useState(0); + + const proposal = Object.values(proposal_info); + const spotPrice = proposal[0]?.spot ?? ''; + + React.useEffect(() => { + setInitialBarrierValue(barrier_1); + if (barrier_1.includes('-')) { + setOption(1); + } else if (barrier_1.includes('+')) { + setOption(0); + } else { + setOption(2); + } + }, []); + + const handleChipSelect = (index: number) => { + setOption(index); + let newValue = barrier_1.replace(/^[+-]/, ''); + + if (index === 0) { + newValue = `+${newValue}`; + } else if (index === 1) { + newValue = `-${newValue}`; + } + + if ((newValue.startsWith('+') || newValue.startsWith('-')) && newValue.charAt(1) === '.') { + newValue = `${newValue.charAt(0)}0${newValue.slice(1)}`; + } else if (newValue.startsWith('.')) { + newValue = `0${newValue}`; + } + + onChange({ target: { name: 'barrier_1', value: newValue } }); + }; + + const handleOnChange = (e: { target: { name: string; value: unknown } }) => { + let value = e.target.value; + if (option === 0) value = `+${value}`; + if (option === 1) value = `-${value}`; + onChange({ target: { name: 'barrier_1', value } }); + }; + + return ( + +
    + {!isDays && ( +
    + {chips_options.map((item, index) => ( + handleChipSelect(index)} + selected={index == option} + > + {item.name} + + ))} +
    + )} + {option === 2 || isDays ? ( + 0 ? 'error' : 'neutral'} + value={barrier_1} + allowDecimals + allowSign={false} + onChange={handleOnChange} + placeholder={localize('Distance to spot')} + variant='fill' + message={validation_errors?.barrier_1[0]} + /> + ) : ( + 0 ? 'error' : 'neutral'} + onChange={handleOnChange} + placeholder={localize('Distance to spot')} + variant='fill' + message={validation_errors?.barrier_1[0]} + /> + )} +
    + + + + {spotPrice} +
    +
    +
    + ); + } +); + +export default BarrierInput; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier.scss b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier.scss new file mode 100644 index 000000000000..552c601a30d7 --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier.scss @@ -0,0 +1,38 @@ +.barrier-params { + margin-bottom: var(--core-spacing-2800); + + &__description { + &-header { + display: flex; + flex-direction: row; + padding-left: var(--core-spacing-400); + height: var(--core-size-1800); + div { + margin: 0px var(--core-spacing-800); + } + } + &-content { + padding: var(--core-spacing-1200); + .content-section { + margin-bottom: var(--core-spacing-400); + } + } + } + + &__chips { + background-color: var(--core-color-solid-slate-50); + display: flex; + gap: var(--core-spacing-400); + margin-bottom: var(--core-spacing-800); + + button { + background-color: transparent; + } + } + + &__current-spot-wrapper { + margin-top: var(--core-spacing-1100); + display: flex; + justify-content: space-between; + } +} diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier.tsx b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier.tsx index 8f9b96c40bba..abca638cc10b 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/barrier.tsx @@ -1,24 +1,87 @@ import React from 'react'; import clsx from 'clsx'; import { observer } from 'mobx-react'; -import { TextField } from '@deriv-com/quill-ui'; +import { ActionSheet, TextField } from '@deriv-com/quill-ui'; import { Localize } from '@deriv/translations'; import { useTraderStore } from 'Stores/useTraderStores'; +import Carousel from 'AppV2/Components/Carousel'; +import BarrierHeader from './barrier-header'; +import BarrierDescription from './barrier-description'; +import BarrierInput from './barrier-input'; type TDurationProps = { is_minimized?: boolean; }; const Barrier = observer(({ is_minimized }: TDurationProps) => { - const { barrier_1 } = useTraderStore(); + const { barrier_1, onChange, validation_errors, duration } = useTraderStore(); + const [is_open, setIsOpen] = React.useState(false); + const [currentPage, setCurrentPage] = React.useState(0); + const [initialBarrierValue, setInitialBarrierValue] = React.useState(''); + const isDays = duration > 1440; + + const barrier_carousel_pages = [ + { + id: 1, + component: , + }, + { + id: 2, + component: , + }, + ]; + + const onClose = (is_saved = false) => { + if (is_open) { + if (!is_saved) { + onChange({ target: { name: 'barrier_1', value: initialBarrierValue } }); + } + setCurrentPage(0); + setIsOpen(false); + } + }; + return ( - } - value={barrier_1} - className={clsx('trade-params__option', is_minimized && 'trade-params__option--minimized')} - /> + <> + } + value={barrier_1} + onClick={() => setIsOpen(true)} + className={clsx('trade-params__option', is_minimized && 'trade-params__option--minimized')} + /> + onClose(false)} position='left' expandable={false}> + + } + pages={barrier_carousel_pages} + /> + , + onAction: () => { + if (validation_errors.barrier_1.length === 0) { + onClose(true); + } + }, + } + : { + content: , + onAction: () => setCurrentPage(0), + } + } + /> + + + ); }); diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Barrier/index.ts b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/index.ts index dae0fa68c1c8..fcb99a49168b 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/Barrier/index.ts +++ b/packages/trader/src/AppV2/Components/TradeParameters/Barrier/index.ts @@ -1,3 +1,4 @@ import Barrier from './barrier'; +import './barrier.scss'; export default Barrier; From b35906315b4696b38599ba51ea4aa61cc09acacc Mon Sep 17 00:00:00 2001 From: Hasan Mobarak <126637868+hasan-deriv@users.noreply.github.com> Date: Wed, 7 Aug 2024 12:56:14 +0800 Subject: [PATCH 03/72] [CFDS]/Hasan/CFDS-4260/tnc design update (#16108) * feat: updated tnc design * feat: updated tnc text case * fix: updated tnc text alginment --- .../jurisdiction-modal/jurisdiction-modal-checkbox.tsx | 7 +++---- packages/cfd/src/sass/cfd.scss | 8 -------- packages/core/src/sass/app/_common/base/common.scss | 5 +++++ 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-modal-checkbox.tsx b/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-modal-checkbox.tsx index 150665d2efa8..71d6afc29260 100644 --- a/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-modal-checkbox.tsx +++ b/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-modal-checkbox.tsx @@ -17,7 +17,6 @@ const JurisdictionCheckBox = observer( }: TJurisdictionCheckBoxProps) => { const { ui } = useStore(); const { is_mobile } = ui; - const shouldShowCheckBox = () => { if ( !jurisdiction_selected_shortcode || @@ -31,14 +30,14 @@ const JurisdictionCheckBox = observer( }; const getCheckboxLabel = () => ( - + , diff --git a/packages/cfd/src/sass/cfd.scss b/packages/cfd/src/sass/cfd.scss index 15d96c0510c2..7f0837523c19 100644 --- a/packages/cfd/src/sass/cfd.scss +++ b/packages/cfd/src/sass/cfd.scss @@ -205,14 +205,6 @@ display: flex; align-self: baseline; margin-inline-start: -0.8rem; - .dc-text { - font-size: var(--text-size-xxs); - text-align: var(--text-align-left); - & > a { - font-weight: bold; - text-transform: lowercase; - } - } } &-info, &__checkbox { diff --git a/packages/core/src/sass/app/_common/base/common.scss b/packages/core/src/sass/app/_common/base/common.scss index 0378d33fda85..680eb8a51353 100644 --- a/packages/core/src/sass/app/_common/base/common.scss +++ b/packages/core/src/sass/app/_common/base/common.scss @@ -139,6 +139,11 @@ html, &--prominent { color: var(--text-prominent); } + &--no-underline { + &:hover { + text-decoration: none; + } + } } .link--no-bold { From c347d819df71b4d3891b8921ca66d4a500c16118 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 10:00:44 +0300 Subject: [PATCH 04/72] =?UTF-8?q?translations:=20=F0=9F=93=9A=20sync=20tra?= =?UTF-8?q?nslations=20with=20crowdin=20(#16386)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: DerivFE --- packages/translations/crowdin/messages.json | 2 +- .../translations/src/translations/ach.json | 21 +- .../translations/src/translations/ar.json | 31 +- .../translations/src/translations/bn.json | 21 +- .../translations/src/translations/de.json | 21 +- .../translations/src/translations/es.json | 21 +- .../translations/src/translations/fr.json | 21 +- .../translations/src/translations/it.json | 21 +- .../translations/src/translations/km.json | 83 +-- .../translations/src/translations/ko.json | 21 +- .../translations/src/translations/mn.json | 21 +- .../translations/src/translations/pl.json | 21 +- .../translations/src/translations/pt.json | 21 +- .../translations/src/translations/ru.json | 33 +- .../translations/src/translations/si.json | 21 +- .../translations/src/translations/sw.json | 21 +- .../translations/src/translations/th.json | 21 +- .../translations/src/translations/tr.json | 21 +- .../translations/src/translations/uz.json | 649 +++++++++--------- .../translations/src/translations/vi.json | 21 +- .../translations/src/translations/zh_cn.json | 27 +- .../translations/src/translations/zh_tw.json | 25 +- 22 files changed, 635 insertions(+), 530 deletions(-) diff --git a/packages/translations/crowdin/messages.json b/packages/translations/crowdin/messages.json index 347108c70e28..85698cb97b5d 100644 --- a/packages/translations/crowdin/messages.json +++ b/packages/translations/crowdin/messages.json @@ -1 +1 @@ -{"0":"","1485191":"1:1000","2082741":"additional document number","2091451":"Deriv Bot - your automated trading partner","3125515":"Your Deriv MT5 password is for logging in to your Deriv MT5 accounts on the desktop, web, and mobile apps.","3215342":"Last 30 days","3420069":"To avoid delays, enter your <0>name and <0>date of birth exactly as they appear on your identity document.","4547840":"<0>Verify your account to transfer funds. <1>Verify now","5149403":"Learn more about trade types","7100308":"Hour must be between 0 and 23.","9488203":"Deriv Bot is a web-based strategy builder for trading digital options. It’s a platform where you can build your own automated trading bot using drag-and-drop 'blocks'.","9757544":"Please submit your proof of address","11533428":"Trade bigger positions with less capital on a wide range of global markets. <0>Learn more","11539750":"set {{ variable }} to Relative Strength Index Array {{ dummy }}","11706633":"Loss threshold: The bot will stop trading if your total loss exceeds this amount.","11872052":"Yes, I'll come back later","14365404":"Request failed for: {{ message_type }}, retrying in {{ delay }}s","15377251":"Profit amount: {{profit}}","17843034":"Check proof of identity document verification status","19424289":"Username","19552684":"USD Basket","21035405":"Please tell us why you’re leaving. (Select up to {{ allowed_reasons }} reasons.)","23745193":"Take me to demo","24900606":"Gold Basket","25854018":"This block displays messages in the developer’s console with an input that can be either a string of text, a number, boolean, or an array of data.","26566655":"Summary","26596220":"Finance","27582393":"Example :","27582767":"{{amount}} {{currency}}","27731356":"Your account is temporarily disabled. Please contact us via <0>live chat to enable deposits and withdrawals again.","27830635":"Deriv (V) Ltd","28581045":"Add a real MT5 account","33433576":"Please use an e-wallet to withdraw your funds.","35089987":"Upload the front and back of your driving licence.","40632954":"Why is my card/e-wallet not working?","41737927":"Thank you","44877997":"Residence permit","45453595":"Binary Coin","45821474":"Proof of income","46523711":"Your proof of identity is verified","49404821":"If you buy a \"<0>{{trade_type}}\" option, you receive a payout at expiry if the final price is {{payout_status}} the strike price. Otherwise, your “<0>{{trade_type}}” option will expire worthless.","53801223":"Hong Kong 50","53964766":"5. Hit Save to download your bot. You can choose to download your bot to your device or your Google Drive.","54185751":"Less than $100,000","55340304":"Keep your current contract?","55916349":"All","57362642":"Closed","58254854":"Scopes","59169515":"If you select \"Asian Rise\", you will win the payout if the last tick is higher than the average of the ticks.","59341501":"Unrecognized file format","59662816":"Stated limits are subject to change without prior notice.","62748351":"List Length","62910715":"You already have an open position for this contract type, retrying in {{ delay }}s","63869411":"This block tests a given number according to the selection","64402604":"Check transfer information","65185694":"Fiat onramp","65982042":"Total","66519591":"Investor password","66610627":"We were unable to verify your selfie because it’s not clear. Please take a clearer photo and try again. Ensure that there’s enough light where you are and that your entire face is in the frame.","67923436":"No, Deriv Bot will stop running when your web browser is closed.","68885999":"Repeats the previous trade when an error is encountered.","69005593":"The example below restarts trading after 30 or more seconds after 1 minute candle was started.","71016232":"OMG/USD","71232823":"Manage funds","71445658":"Open","71563326":"A fast and secure fiat-to-crypto payment service. Deposit cryptocurrencies from anywhere in the world using your credit/debit cards and bank transfers.","71853457":"$100,001 - $500,000","72500774":"Please fill in Tax residence.","73086872":"You have self-excluded from trading","73326375":"The low is the lowest point ever reached by the market during the contract period.","74963864":"Under","76635112":"To proceed, resubmit these documents","76916358":"You have reached the withdrawal limit.<0/>Please upload your proof of identity and address to lift the limit to continue your withdrawal.","76925355":"Check your bot’s performance","77982950":"Vanilla options allow you to predict an upward (bullish) or downward (bearish) direction of the underlying asset by purchasing a \"Call\" or a \"Put\".","81009535":"Potential profit/loss","81091424":"To complete the upgrade, please log out and log in again to add more accounts and make transactions with your Wallets.","81450871":"We couldn’t find that page","82839270":"Upload the page of your passport that contains your photo.","83202647":"Collapse Block","84402478":"Where do I find the blocks I need?","84924586":"To trade options and multipliers, get a Deriv Apps account first.","85343079":"Financial assessment","85359122":"40 or more","85389154":"Steps required to continue verification on your mobile","90266322":"2. Start a chat with your newly created Telegram bot and make sure to send it some messages before proceeding to the next step. (e.g. Hello Bot!)","91993812":"The Martingale Strategy is a classic trading technique that has been used for more than a hundred years, popularised by the French mathematician Paul Pierre Levy in the 18th century.","93154671":"1. Hit Reset at the bottom of stats panel.","96381225":"ID verification failed","98473502":"We’re not obliged to conduct an appropriateness test, nor provide you with any risk warnings.","98972777":"random item","100239694":"Upload front of card from your computer","102226908":"Field cannot be empty","105871033":"Your age in the document you provided appears to be below 18 years. We’re only allowed to offer our services to clients above 18 years old, so we’ll need to close your account. If you have a balance in your account, contact us via live chat and we’ll help to withdraw your funds before your account is closed.","107537692":"These limits apply to your options trades only. For example, <0>maximum total loss refers to the losses on all your trades on options trading platforms.","108916570":"Duration: {{duration}} days","109073671":"Please use an e-wallet that you have used for deposits previously. Ensure the e-wallet supports withdrawal. See the list of e-wallets that support withdrawals <0>here.","111215238":"Move away from direct light","111718006":"End date","111931529":"Max. total stake over 7 days","113378532":"ETH/USD","115032488":"Buy price and P/L","116005488":"Indicators","117056711":"We’re updating our site","117318539":"Password should have lower and uppercase English letters with numbers.","117366356":"Turbo options allow you to predict the direction of the underlying asset’s movements.","118727646":"{{new_account_title}}","119261701":"Prediction:","119446122":"Contract type is not selected","120340777":"Complete your personal details","122617359":"View tutorial","122993457":"This is to confirm that it's you making the withdrawal request.","123454801":"{{withdraw_amount}} {{currency_symbol}}","124723298":"Upload a proof of address to verify your address","125354367":"An example of D’Alembert's Grind strategy","125443840":"6. Restart last trade on error","125842960":"{{name}} is required.","127307725":"A politically exposed person (PEP) is someone appointed with a prominent public position. Close associates and family members of a PEP are also considered to be PEPs.","129005644":"The idea is that successful trades may recoup previous losses. However, it is crucial to exercise caution as the risk can quickly increase with this strategy. With Deriv Bot, you can minimise your risk by setting a maximum stake. This is an optional risk management feature. Let’s say a maximum stake of 3 USD. If your stake for the next trade is set to exceed 3 USD, your stake will reset to the initial stake of 1 USD. If you didn't set a maximum stake, it would have increased beyond 3 USD.","129137937":"You decide how much and how long to trade. You can take a break from trading whenever you want. This break can be from 6 weeks to 5 years. When it’s over, you can extend it or resume trading after a 24-hour cooling-off period. If you don’t want to set a specific limit, leave the field empty.","129171545":"This feature is unavailable for Real account.","129729742":"Tax Identification Number*","130567238":"THEN","132596476":"In providing our services to you, we are required to ask you for some information to assess if a given product or service is appropriate for you and whether you have the experience and knowledge to understand the risks involved.<0/><0/>","132689841":"Trade on web terminal","133523018":"Please go to the Deposit page to get an address.","133536621":"and","133655768":"Note: If you wish to learn more about the Bot Builder, you can proceed to the <0>Tutorials tab.","134126193":"Try searching for markets or keywords","136790425":"Try changing or removing filters to view available positions.","137589354":"To assess your trading experience and if our products are suitable for you. Please provide accurate and complete answers, as they may affect the outcome of this assessment.","138055021":"Synthetic indices","139454343":"Confirm my limits","141265840":"Funds transfer information","141626595":"Make sure your device has a working camera","142050447":"set {{ variable }} to create text with","142390699":"Connected to your mobile","143970826":"Payment problems?","145511192":"s is the initial stake.","145633981":"Unavailable as your documents are still under review","145736466":"Take a selfie","147327552":"No favourites","150156106":"Save changes","150486954":"Token name","151279367":"2. Set the Purchase conditions. In this example, your bot will purchase a Rise contract when it starts and after a contract closes.","151646545":"Unable to read file {{name}}","152415091":"Math","152524253":"Trade the world’s markets with our popular user-friendly platform.","153485708":"Zero Spread - BVI","154274415":"The payout at expiry is equal to the payout per point multiplied by the distance between the final price and the barrier.","157593038":"random integer from {{ start_number }} to {{ end_number }}","157871994":"Link expired","158355408":"Some services may be temporarily unavailable.","160746023":"Tether as an Omni token (USDT) is a version of Tether that is hosted on the Omni layer on the Bitcoin blockchain.","160863687":"Camera not detected","164112826":"This block allows you to load blocks from a URL if you have them stored on a remote server, and they will be loaded only when your bot runs.","164564432":"Deposits are temporarily unavailable due to system maintenance. You can make your deposits when the maintenance is complete.","165294347":"Please set your country of residence in your account settings to access the cashier.","165312615":"Continue on phone","165682516":"If you don’t mind sharing, which other trading platforms do you use?","167094229":"• Current stake: Use this variable to store the stake amount. You can assign any amount you want, but it must be a positive number.","170185684":"Ignore","170244199":"I’m closing my account for other reasons.","171307423":"Recovery","171579918":"Go to Self-exclusion","171638706":"Variables","173991459":"We’re sending your request to the blockchain.","174793462":"Strike","176078831":"Added","176319758":"Max. total stake over 30 days","176654019":"$100,000 - $250,000","177099483":"Your address verification is pending, and we’ve placed some restrictions on your account. The restrictions will be lifted once your address is verified.","177467242":"Define your trade options such as accumulator and stake. This block can only be used with the accumulator trade type. If you select another trade type, this block will be replaced with the Trade options block.","179083332":"Date","181107754":"Your new <0>{{platform}} {{eligible_account_to_migrate}} account(s) are ready for trading.","181346014":"Notes ","181881956":"Contract Type: {{ contract_type }}","182630355":"Thank you for submitting your information.","184024288":"lower case","189705706":"This block uses the variable \"i\" to control the iterations. With each iteration, the value of \"i\" is determined by the items in a given list.","189759358":"Creates a list by repeating a given item","190834737":"Guide","191372501":"Accumulation of Income/Savings","192436105":"No need for symbols, digits, or uppercase letters","192573933":"Verification complete","195136585":"Trading View Chart","195972178":"Get character","196810983":"If the duration is more than 24 hours, the Cut-off time and Expiry date will apply instead.","196998347":"We hold customer funds in bank accounts separate from our operational accounts which would not, in the event of insolvency, form part of the company's assets. This meets the <0>Gambling Commission's requirements for the segregation of customer funds at the level: <1>medium protection.","197190401":"Expiry date","201016731":"<0>View more","201091938":"30 days","203179929":"<0>You can open this account once your submitted documents have been verified.","203271702":"Try again","203297887":"The Quick Strategy you just created will be loaded to the workspace.","203924654":"Hit the <0>Start button to begin and follow the tutorial.","204797764":"Transfer to client","204863103":"Exit time","207521645":"Reset Time","207824122":"Please withdraw your funds from the following Deriv account(s):","209533725":"You’ve transferred {{amount}} {{currency}}","210385770":"If you have an active account, please log in to continue. Otherwise, please sign up.","210872733":"The verification status is not available, provider says: Malformed JSON.","211224838":"Investment","211461880":"Common names and surnames are easy to guess","211487193":"Document number (e.g. identity card, passport, driver's license)","211847965":"Your <0>personal details are incomplete. Please go to your account settings and complete your personal details to enable withdrawals.","216114973":"Stocks & indices","216650710":"You are using a demo account","217377529":"5. If the next trades are profitable, the stake for the following trade will be reduced by 2 USD. This can be shown above where the stake of 3 USD is reduced to 1 USD. See A3.","217403651":"St. Vincent & Grenadines","217504255":"Financial assessment submitted successfully","218441288":"Identity card number","220014242":"Upload a selfie from your computer","220186645":"Text Is empty","221261209":"A Deriv account will allow you to fund (and withdraw from) your CFDs account(s).","223120514":"In this example, each point of the SMA line is an arithmetic average of close prices for the last 50 days.","223607908":"Last digit stats for latest 1000 ticks for {{underlying_name}}","224650827":"IOT/USD","225887649":"This block is mandatory. It's added to your strategy by default when you create new strategy. You can not add more than one copy of this block to the canvas.","227591929":"To timestamp {{ input_datetime }} {{ dummy }}","227903202":"We’ll charge a 1% transfer fee for transfers in different currencies between your Deriv fiat and {{platform_name_mt5}} accounts.","228521812":"Tests whether a string of text is empty. Returns a boolean value (true or false).","233500222":"- High: the highest price","235244966":"Return to Trader's Hub","235583807":"SMA is a frequently used indicator in technical analysis. It calculates the average market price over a specified period, and is usually used to identify market trend direction: up or down. For example, if the SMA is moving upwards, it means the market trend is up. ","235994721":"Forex (standard/exotic) and cryptocurrencies","236642001":"Journal","238496287":"Leverage trading is high-risk, so it's a good idea to use risk management features such as stop loss. Stop loss allows you to","242028165":"Pay a small fee to prioritise your withdrawal, this fee will be deducted from the withdrawal amount.","243537306":"1. Under the Blocks menu, go to Utility > Variables.","243614144":"This is only available for existing clients.","245005091":"lower","245187862":"The DRC will make a <0>decision on the complaint (please note that the DRC mentions no timeframe for announcing its decision).","245812353":"if {{ condition }} return {{ value }}","246428134":"Step-by-step guides","248153700":"Reset your password","248565468":"Check your {{ identifier_title }} account email and click the link in the email to proceed.","248909149":"Send a secure link to your phone","251134918":"Account Information","251445658":"Dark theme","251882697":"Thank you! Your response has been recorded into our system.<0/><0/>Please click ‘OK’ to continue.","254912581":"This block is similar to EMA, except that it gives you the entire EMA line based on the input list and the given period.","256031314":"Cash Business","256602726":"If you close your account:","258448370":"MT5","258912192":"Trading assessment","260069181":"An error occured while trying to load the URL","260086036":"Place blocks here to perform tasks once when your bot starts running.","260361841":"Tax Identification Number can't be longer than 25 characters.","260393332":"You cannot make further deposits as your documents are still under review. We will notify you by email within 3 days once your verification is approved.","261074187":"4. Once the blocks are loaded onto the workspace, tweak the parameters if you want, or hit Run to start trading.","261250441":"Drag the <0>Trade again block and add it into the <0>do part of the <0>Repeat until block.","262095250":"If you select <0>\"Put\", you’ll earn a payout if the final price is below the strike price at expiry. Otherwise, you won’t receive a payout.","264976398":"3. 'Error' displays a message in red to highlight something that needs to be resolved immediately.","265644304":"Trade types","266455247":"Standard Vanuatu","267992618":"The platforms lack key features or functionality.","268254263":"Open a real account now","268940240":"Your balance ({{format_balance}} {{currency}}) is less than the current minimum withdrawal allowed ({{format_min_withdraw_amount}} {{currency}}). Please top up your account to continue with your withdrawal.","269322978":"Deposit with your local currency via peer-to-peer exchange with fellow traders in your country.","269607721":"Upload","270339490":"If you select \"Over\", you will win the payout if the last digit of the last tick is greater than your prediction.","270396691":"<0>Your Wallets are ready!","270610771":"In this example, the open price of a candle is assigned to the variable \"candle_open_price\".","270712176":"descending","270780527":"You've reached the limit for uploading your documents.","271637055":"Download is unavailable while your bot is running.","272179372":"This block is commonly used to adjust the parameters of your next trade and to implement stop loss/take profit logic.","273350342":"Copy and paste the token into the app.","273728315":"Should not be 0 or empty","274268819":"Volatility 100 Index","275116637":"Deriv X","276770377":"New MT5 account(s) under the {{to_account}} jurisdiction will be created for new trades.","277469417":"Exclude time cannot be for more than five years.","278684544":"get sub-list from # from end","280021988":"Use these shortcuts","281110034":"Effective trading with the D'Alembert system requires careful consideration of its stake progression and risk management. Traders can automate this approach using Deriv Bot, setting profit and loss thresholds to ensure balanced and controlled trading. However, it is crucial for traders to assess their risk appetite, test strategies on a demo account, and align with their own trading style before transitioning to real money trading. This optimization process helps strike a balance between potential gains and losses while managing risk prudently.","282319001":"Check your image","282564053":"Next, we'll need your proof of address.","283830551":"Your address doesn’t match your profile","284527272":"antimode","284772879":"Contract","284809500":"Financial Demo","287934290":"Are you sure you want to cancel this transaction?","289731075":"Get Started","291344459":"The table illustrates this principle in the second session. After a trade resulting in loss in round 4 followed by a successful trade in round 5, the stake will increase to 2 USD for round 6. This is in line with the strategy's rule of raising the stake only after a loss is followed by a successful trade.","291744889":"<0>1. Trade parameters:<0>","291817757":"Go to our Deriv community and learn about APIs, API tokens, ways to use Deriv APIs, and more.","292526130":"Tick and candle analysis","292589175":"This will display the SMA for the specified period, using a candle list.","292887559":"Transfer to {{selected_value}} is not allowed, Please choose another account from dropdown","293250845":"Are you sure you want to continue?","294043810":"I confirm that my tax information is accurate and complete.","294305803":"Manage account settings","294335229":"Sell at market price","296017162":"Back to Bot","301441673":"Select your citizenship/nationality as it appears on your passport or other government-issued ID.","304309961":"We're reviewing your withdrawal request. You may still cancel this transaction if you wish. Once we start processing, you won't be able to cancel.","304506198":"Total balance:","310234308":"Close all your positions.","312142140":"Save new limits?","312300092":"Trims the spaces within a given string or text.","313741895":"This block returns “True” if the last candle is black. It can be placed anywhere on the canvas except within the Trade parameters root block.","315306603":"You have an account that do not have currency assigned. Please choose a currency to trade with this account.","316694303":"Is candle black?","318705408":"Demo Zero Spread","318865860":"close","318984807":"This block repeats the instructions contained within for a specific number of times.","321457615":"Oops, something went wrong!","323179846":"The time interval for each candle can be set from one minute to one day.","323209316":"Select a Deriv Bot Strategy","323360883":"Baskets","325662004":"Expand Block","325763347":"result","326770937":"Withdraw {{currency}} ({{currency_symbol}}) to your wallet","327534692":"Duration value is not allowed. To run the bot, please enter {{min}}.","328539132":"Repeats inside instructions specified number of times","329353047":"Malta Financial Services Authority (MFSA) (licence no. IS/70156)","329404045":"<0>Switch to your real account<1> to create a {{platform}} {{account_title}} account.","330384187":"Enable trading with your first transfer.","333456603":"Withdrawal limits","333807745":"Click on the block you want to remove and press Delete on your keyboard.","334942497":"Buy time","337023006":"Start time cannot be in the past.","339449279":"Remaining time","339610914":"Spread Up/Spread Down","339879944":"GBP/USD","340807218":"Description not found.","342181776":"Cancel transaction","343873723":"This block displays a message. You can specify the color of the message and choose from 6 different sound options.","344418897":"These trading limits and self-exclusion help you control the amount of money and time you spend on {{brand_website_name}} and exercise <0>responsible trading.","345320063":"Invalid timestamp","345818851":"Sorry, an internal error occurred. Hit the above checkbox to try again.","346070861":"Zero Spread","346843343":"CFDs on financial and derived instruments with copy trading.","347029309":"Forex: standard/micro","347039138":"Iterate (2)","348951052":"Your cashier is currently locked","349047911":"Over","349110642":"<0>{{payment_agent}}<1>'s contact details","350602311":"Stats show the history of consecutive tick counts, i.e. the number of ticks the price remained within range continuously.","351744408":"Tests if a given text string is empty","353731490":"Job done","354945172":"Submit document","357477280":"No face found","357672069":"Income verification failed","359053005":"Please enter a token name.","359649435":"Given candle list is not valid","359809970":"This block gives you the selected candle value from a list of candles within the selected time interval. You can choose from open price, close price, high price, low price, and open time.","360224937":"Logic","360773403":"Bot Builder","363576009":"- High price: the highest price","363738790":"Browser","363990763":"Sell price:","367801124":"Total assets in your Deriv accounts.","368160866":"in list","368397799":"+ Create bot","369035361":"<0>•Your account number","371151609":"Last used","371710104":"This scope will allow third-party apps to buy and sell contracts for you, renew your expired purchases, and top up your demo accounts.","372291654":"Exclude time must be after today.","372645383":"True if the market direction matches the selection","372805409":"You should enter 9-35 characters.","373021397":"random","373306660":"{{label}} is required.","373495360":"This block returns the entire SMA line, containing a list of all values for a given period.","374537470":"No results for \"{{text}}\"","375714803":"Deal Cancellation Error","377225569":"<0>Do not honour: Please contact your bank for further assistance.","377538732":"Key parameters","379523479":"To avoid loss of funds, do not share tokens with the Admin scope with unauthorised parties.","380606668":"tick","380694312":"Maximum consecutive trades","381972464":"Your document has expired.","384303768":"This block returns \"True\" if the last candle is black. It can be placed anywhere on the canvas except within the Trade parameters root block.","384707870":"CRS confirmation","386278304":"Install the {{platform_name_trader}} web app","386502387":"Bot is not running","389923099":"Zoom in","390890891":"Last quarter","391685252":"Revoke","391915203":"Hedging","392582370":"Fall Equals","393789743":"Letters, spaces, periods, hyphens, apostrophes only.","396418990":"Offline","398816980":"Launch {{platform_name_trader}} in seconds the next time you want to trade.","401339495":"Verify address","401345454":"Head to the Tutorials tab to do so.","403456289":"The formula for SMA is:","403936913":"An introduction to Deriv Bot","406359555":"Contract details","406497323":"Sell your active contract if needed (optional)","411482865":"Add {{deriv_account}} account","412433839":"I agree to the <0>terms and conditions.","413594348":"Only letters, numbers, space, hyphen, period, and forward slash are allowed.","417864079":"You’ll not be able to change currency once you have made a deposit.","419485005":"Spot","419496000":"Your contract is closed automatically when your profit is more than or equals to this amount. This block can only be used with the multipliers trade type.","420072489":"CFD trading frequency","422055502":"From","423682863":"When your loss reaches or exceeds the set amount, your trade will be closed automatically.","424101652":"Quick strategy guides >","424272085":"We take your financial well-being seriously and want to ensure you are fully aware of the risks before trading.<0/><0/>","424897068":"Do you understand that you could potentially lose 100% of the money you use to trade?","426031496":"Stop","427134581":"Try using another file type.","427617266":"Bitcoin","428380816":"If you select “<0>Matches”, you will win the payout if the last digit of the last tick is the same as your prediction.","429505586":"If you select \"<0>Fall\", you win the payout if the exit spot is strictly lower than the entry spot.","429970999":"To avoid delays, enter your <0>name exactly as it appears on your {{document_name}}.","431267979":"Here’s a quick guide on how to use Deriv Bot on the go.","432273174":"1:100","432508385":"Take Profit: {{ currency }} {{ take_profit }}","432519573":"Document uploaded","433237511":"Notify Telegram %1 Access Token: %2 Chat ID: %3 Message: %4","433348384":"Real accounts are not available to politically exposed persons (PEPs).","433616983":"2. Investigation phase","434548438":"Highlight function definition","434896834":"Custom functions","436364528":"Your account will be opened with {{legal_entity_name}}, and will be subject to the laws of Saint Vincent and the Grenadines.","436534334":"<0>We've sent you an email.","437138731":"Create a new {{platform}} password","437453244":"Choose your preferred cryptocurrency","437485293":"File type not supported","437904704":"Maximum open positions","438067535":"Over $500,000","439398769":"This strategy is currently not compatible with Deriv Bot.","442281706":"You’ve just deleted a block.","442520703":"$250,001 - $500,000","443559872":"Financial SVG","444484637":"Logic negation","445419365":"1 - 2 years","447548846":"SSNIT number","447907000":"If you select \"<0>Allow equals\", you win the payout if exit spot is higher than or equal to entry spot for \"Rise\". Similarly, you win the payout if exit spot is lower than or equal to entry spot for \"Fall\".","450983288":"Your deposit is unsuccessful due to an error on the blockchain. Please contact your crypto wallet service provider for more info.","451852761":"Continue on your phone","452054360":"Similar to RSI, this block gives you a list of values for each entry in the input list.","452949978":"The 1-3-2-6 strategy is designed to capitalise on consecutive successful trades while minimising losses during losing streaks. The rationale behind this strategy lies in statistical probabilities, with adjustments to stake sizes based on the perceived likelihood of success. There is a higher likelihood of success in the second trade after one successful trade. Hence the stake adjusts to 3 in the second trade. In the third trade, the stake adjusts to 2 units due to a lower probability of a successful trade. If the third trade is also successful, the strategy then allocates all the previous gains (a total of 6 units of initial stake) into the fourth trade with the aim of doubling the potential profits. If the fourth trade results in a positive outcome, the strategy helps achieve a total gain of 12 units. However, it is crucial to exercise caution, as the risk can escalate quickly with this strategy, and any loss in the fourth trade forfeits all previous gains.","453175851":"Your MT5 Financial STP account will be opened through {{legal_entity_name}}. All trading in this account is subject to the regulations and guidelines of the Labuan Financial Service Authority (LFSA). None of your other accounts, including your Deriv account, is subject to the regulations and guidelines of the Labuan Financial Service Authority (LFSA).","454196938":"Regulation:","456746157":"Grant access to your camera from your browser settings","457020083":"It’ll take longer to verify you if we can’t read it","457494524":"1. From the block library, enter a name for the new variable and click Create.","459612953":"Select account","459817765":"Pending","460070238":"Congratulations","460975214":"Complete your Appropriateness Test","461795838":"Please contact us via live chat to unlock it.","462079779":"Resale not offered","463361726":"Select an item","465993338":"Oscar's Grind","466424460":"Oscar’s Grind","466837068":"Yes, increase my limits","467839232":"I trade forex CFDs and other complex financial instruments regularly on other platforms.","471402292":"Your bot uses a single trade type for each run.","471667879":"Cut off time:","471994882":"Your {{ currency }} account is ready.","473154195":"Settings","474306498":"We’re sorry to see you leave. Your account is now closed.","475492878":"Try Synthetic Indices","476023405":"Didn't receive the email?","477557241":"Remote blocks to load must be a collection.","478280278":"This block displays a dialog box that uses a customised message to prompt for an input. The input can be either a string of text or a number and can be assigned to a variable. When the dialog box is displayed, your strategy is paused and will only resume after you enter a response and click \"OK\".","478827886":"We calculate this based on the barrier you’ve selected.","479420576":"Tertiary","480356486":"*Boom 300 and Crash 300 Index","481276888":"Goes Outside","481564514":"If you select “<0>Up”, you’ll earn a payout if the spot price never drops below the barrier.","483279638":"Assessment Completed<0/><0/>","485379166":"View transactions","487239607":"Converts a given True or False to the opposite value","488150742":"Resend email","489768502":"Change investor password","490053735":"If you select this feature, your trade will be closed automatically at the nearest available asset price when your loss reaches or exceeds the stop loss amount. Your loss may be more than the amount you entered depending on the market price at closing.","491603904":"Unsupported browser","492198410":"Make sure everything is clear","492566838":"Taxpayer identification number","497518317":"Function that returns a value","498562439":"or","499522484":"1. for \"string\": 1325.68 USD","500855527":"Chief Executives, Senior Officials and Legislators","500920471":"This block performs arithmetic operations between two numbers.","501284861":"Watch this video to learn how to build a trading bot on Deriv Bot. Also, check out this blog post on building a trading bot.","501401157":"You are only allowed to make deposits","501537611":"*Maximum number of open positions","502007051":"Demo Swap-Free SVG","502041595":"This block gives you a specific candle from within the selected time interval.","505793554":"last letter","508390614":"Demo Financial STP","511679687":"Accumulators allow you to express a view on the range of movement of an index and grow your stake exponentially at a fixed <0>growth rate.","514031715":"list {{ input_list }} is empty","514776243":"Your {{account_type}} password has been changed.","514948272":"Copy link","517631043":"We’ve sent your e-book. Check your email to download it.","517833647":"Volatility 50 (1s) Index","518955798":"7. Run Once at Start","519205761":"You can no longer open new positions with this account.","520136698":"Boom 500 Index","520458365":"Last used: ","521872670":"item","522703281":"divisible by","523123321":"- 10 to the power of a given number","524459540":"How do I create variables?","527329988":"This is a top-100 common password","529056539":"Options","531114081":"3. Contract Type","531675669":"Euro","532724086":"Employment contract","533403953":"Your existing <0>{{platform}} {{type}} {{from_account}} account(s) will remain accessible.","535041346":"Max. total stake per day","536277802":"TP & SL history","537788407":"Other CFDs Platform","538017420":"0.5 pips","538042340":"Principle 2: The stake only increases when a loss trade is followed by a successful trade","538228086":"Close-Low","539352212":"Tick {{current_tick}}","541650045":"Manage {{platform}} password","541700024":"First, enter your driving licence number and the expiry date.","542038694":"Only letters, numbers, space, underscore, and hyphen are allowed for {{label}}.","542305026":"You must also submit a proof of identity.","543413346":"You have no open positions for this asset. To view other open positions, click Go to Reports","545323805":"Filter by trade types","547029855":"If you select this feature, you can cancel your trade within a chosen time frame if the asset price moves against your favour. You will get your stake back without profit/loss. We charge a small fee for this. Take profit and stop loss are disabled when deal cancellation is active.","549479175":"Deriv Multipliers","549799607":"Go to LiveChat","551569133":"Learn more about trading limits","551958626":"Excellent","554135844":"Edit","554410233":"This is a top-10 common password","555351771":"After defining trade parameters and trade options, you may want to instruct your bot to purchase contracts when specific conditions are met. To do that you can use conditional blocks and indicators blocks to help your bot to make decisions.","555881991":"National Identity Number Slip","558866810":"Run your bot","559224320":"Our classic “drag-and-drop” tool for creating trading bots, featuring pop-up trading charts, for advanced users.","560759471":"You'll see these details once the contract starts.","561982839":"Change your currency","562599414":"This block returns the purchase price for the selected trade type. This block can be used only in the \"Purchase conditions\" root block.","563034502":"We shall try to resolve your complaint within 15 business days. We will inform you of the outcome together with an explanation of our position and propose any remedial measures we intend to take.","563166122":"We shall acknowledge receiving your complaint, review it carefully, and keep you updated on the handling process. We might request further information or clarifications to facilitate the resolution of the complaint.","563652273":"Go to block","565356380":"Added to favorites","565410797":"The below image illustrates how Simple Moving Average Array block works:","566274201":"1. Market","567019968":"A variable is among the most important and powerful components in creating a bot. It is a way to store information, either as text or numbers. The information stored as a variable can be used and changed according to the given instructions. Variables can be given any name, but usually they are given useful, symbolic names so that it is easier to call them during the execution of instructions.","567163880":"Create a {{platform}} password","567755787":"Tax Identification Number is required.","569057236":"In which country was your document issued?","571921777":"Funds protection level","572576218":"Languages","573173477":"Is candle {{ input_candle }} black?","575668969":"3. For trades that result in a profit, the stake for the next trade will be increased by 2 USD. Deriv Bot will continue to add 2 USD for every successful trade. See A1.","575702000":"Remember, selfies, pictures of houses, or non-related images will be rejected.","576355707":"Select your country and citizenship:","577215477":"count with {{ variable }} from {{ start_number }} to {{ end_number }} by {{ step_size }}","577779861":"Withdrawal","577883523":"4. Awards and orders","578640761":"Call Spread","579529868":"Show all details — including the bottom 2 lines","580431127":"Restart buy/sell on error (disable for better performance): {{ checkbox }}","580665362":"Stays In/Goes Out","580774080":"insert at","581168980":"Legal","582808668":"Loss amount: ","582945649":"2 minutes","584028307":"Allow equals","587577347":"Take Profit (Accumulator)","587577425":"Secure my account","587856857":"Want to know more about APIs?","592087722":"Employment status is required.","592964176":"Join over 2.5 million traders","593459109":"Try a different currency","595080994":"Example: CR123456789","596165833":"Your withdrawal will be processed internally in one business day. After that, for debit/credit cards, it takes 1-15 working days, and for e-wallets, it's 1-3 working days. If there's a delay beyond these periods, please contact us via live chat.","597089493":"Here is where you can decide to sell your contract before it expires. Only one copy of this block is allowed.","597481571":"DISCLAIMER","597707115":"Tell us about your trading experience.","599469202":"{{secondPast}}s ago","602278674":"Verify identity","603849445":"Strike price","603849863":"Look for the <0>Repeat While/Until, and click the + icon to add the block to the workspace area.","603899222":"Distance to current spot","606240547":"- Natural log","606877840":"Back to today","607807243":"Get candle","609519227":"This is the email address associated with your Deriv account.","609650241":"Infinite loop detected","610537973":"Any information you provide is confidential and will be used for verification purposes only.","611020126":"View address on Blockchain","613418320":"<0>Setup unsuccessful","613877038":"Chart","615156635":"Your selfie does not match your document.","617345387":"If you select \"Reset-Up”, you win the payout if the exit spot is strictly higher than either the entry spot or the spot at reset time.","618520466":"Example of a cut-off document","619268911":"<0>a.The Financial Commission will investigate the validity of the complaint within 5 business days.","619407328":"Are you sure you want to unlink from {{identifier_title}}?","621829484":"{{days_passed}}d ago","623192233":"Please complete the <0>Appropriateness Test to access your cashier.","623316736":"{{ message }}, retrying in {{ delay }}s","623542160":"Exponential Moving Average Array (EMAA)","625571750":"Entry spot:","626175020":"Standard Deviation Up Multiplier {{ input_number }}","626809456":"Resubmit","627292452":"<0>Your Proof of Identity or Proof of Address did not meet our requirements. Please check your email for further instructions.","627814558":"This block returns a value when a condition is true. Use this block within either of the function blocks above.","628193133":"Account ID","629003252":"If your current password doesn't match these requirements, you'll need to create a new one in the next step.","629145209":"In case if the \"AND\" operation is selected, the block returns \"True\" only if both given values are \"True\"","629395043":"All growth rates","632398049":"This block assigns a null value to an item or statement.","632897893":"If any of the above applies to you, select <0>Yes. Otherwise, select <0>No.","634219491":"You have not provided your tax identification number. This information is necessary for legal and regulatory requirements. Please go to <0>Personal details in your account settings, and fill in your latest tax identification number.","634274250":"How long each trade takes to expire.","636219628":"<0>c.If no settlement opportunity can be found, the complaint will proceed to the determination phase to be handled by the DRC.","636427296":"Need help with tax info? Let us know via <0>live chat.","636579615":"Number of unit(s) to be added to the next trade after a losing trade. One unit is equivalent to the amount of initial stake.","639382772":"Please upload supported file type.","640249298":"Normal","640596349":"You have yet to receive any notifications","640730141":"Refresh this page to restart the identity verification process","641420532":"We've sent you an email","642210189":"Please check your email for the verification link to complete the process.","642393128":"Enter amount","642546661":"Upload back of license from your computer","644150241":"The number of contracts you have won since you last cleared your stats.","645902266":"EUR/NZD","646773081":"Profit threshold: The bot will stop trading if your total profit exceeds this amount.","647039329":"Proof of address required","647745382":"Input List {{ input_list }}","649317411":"On the basis of the information provided in relation to your knowledge and experience, we consider that the investments available via this website are not appropriate for you.<0/><1/>","649923867":"Adds a sign to a number to create a barrier offset. (deprecated)","650836587":"This article explores the Martingale strategy integrated into Deriv Bot, a versatile trading bot designed to trade assets such as forex, commodities, and derived indices. We will delve into the strategy's core parameters, its application, and provide essential takeaways for traders looking to use the bot effectively.","651284052":"Low Tick","651684094":"Notify","652298946":"Date of birth","654422099":"CRS confirmation is required.","654507872":"True-False","654924603":"Martingale","655937299":"We’ll update your limits. Click <0>Accept to acknowledge that you are fully responsible for your actions, and we are not liable for any addiction or loss.","656893085":"Timestamp","657325150":"This block is used to define trade options within the Trade parameters root block. Some options are only applicable for certain trade types. Parameters such as duration and stake are common among most trade types. Prediction is used for trade types such as Digits, while barrier offsets are for trade types that involve barriers such as Touch/No Touch, Ends In/Out, etc.","658745169":"You may sell the contract up to 60 seconds before expiry. If you do, we’ll pay you the <0>contract value.","659482342":"Please remember that it is your responsibility to keep your answers accurate and up to date. You can update your personal details at any time in your account settings.","660481941":"To access your mobile apps and other third-party apps, you'll first need to generate an API token.","660991534":"Finish","661759508":"On the basis of the information provided in relation to your knowledge and experience, we consider that the investments available via this website are not appropriate for you.<0/><0/>","662953503":"Your contract will be closed when the <0>stop out level is reached.","664779910":"3. If the first trade results in profit, the stake for the following trade will not reduce but remain at the initial stake. The strategy minimally trades at the initial stake of 1 USD. See A1.","665089217":"Please submit your <0>proof of identity to authenticate your account and access your Cashier.","665777772":"XLM/USD","665872465":"In the example below, the opening price is selected, which is then assigned to a variable called \"op\".","666158951":"Your contract will be closed when the <0>stop out level is reached.","666724936":"Please enter a valid ID number.","671630762":"We accept only these types of documents as proof of your address. The document must be recent (issued within last {{expiry_in_months}} months) and include your name and address:","672008428":"ZEC/USD","673915530":"Jurisdiction and choice of law","674973192":"Use this password to log in to your Deriv MT5 accounts on the desktop, web, and mobile apps.","676159329":"Could not switch to default account.","676675313":"Authy","677918431":"Market: {{ input_market }} > {{ input_submarket }} > {{ input_symbol }}","678031950":"Candles List with interval here 2: {{ candle_interval_type }}","679199080":"Why passkeys?","680334348":"This block was required to correctly convert your old strategy.","681108680":"Additional information required for {{platform}} account(s)","681808253":"Previous spot price","681926004":"Example of a blurry document","682056402":"Standard Deviation Down Multiplier {{ input_number }}","686387939":"How do I clear my transaction log?","687193018":"Slippage risk","687212287":"Amount is a required field.","688510664":"You've {{two_fa_status}} 2FA on this device. You'll be logged out of your account on other devices (if any). Use your password and a 2FA code to log back in.","689137215":"Purchase price","691956534":"<0>You have added a {{currency}} account.<0> Make a deposit now to start trading.","692354762":"Please enter your {{document_name}}. {{example_format}}","693396140":"Deal cancellation (expired)","693933036":"Exploring the Oscar’s Grind strategy in Deriv Bot","694035561":"Trade options multipliers","696157141":"Low spot","696735942":"Enter your National Identification Number (NIN)","696870196":"- Open time: the opening time stamp","698037001":"National Identity Number","699159918":"1. Filing complaints","699646180":"A minimum deposit value of <0>{{minimum_deposit}} {{currency}} is required. Otherwise, the funds will be lost and cannot be recovered.","700259824":"Account currency","701034660":"We are still processing your withdrawal request.<0 />Please wait for the transaction to be completed before deactivating your account.","701462190":"Entry spot","701647434":"Search for string","702451070":"National ID (No Photo)","702561961":"Change theme","705262734":"Your Wallets are ready","705299518":"Next, upload the page of your passport that contains your photo.","705697927":"2. Set your preferred unit. In this example, it is 2 units or 2 USD.","705821926":"Learn about this trade type","706727320":"Binary options trading frequency","706755289":"This block performs trigonometric functions.","706960383":"We’ll offer to buy your contract at this price should you choose to sell it before its expiry. This is based on several factors, such as the current spot price, duration, etc. However, we won’t offer a contract value if the remaining duration is below 60 seconds.","707189572":"Your email address has changed.<0/>Now, log in with your new email address.","707662672":"{{unblock_date}} at {{unblock_time}}","708055868":"Driving licence number","710123510":"repeat {{ while_or_until }} {{ boolean }}","711580196":"Why can't I use a payment agent to withdraw my funds?","711999057":"Successful","712101776":"Take a photo of your passport photo page","712635681":"This block gives you the selected candle value from a list of candles. You can choose from open price, close price, high price, low price, and open time.","713054648":"Sending","714080194":"Submit proof","714746816":"MetaTrader 5 Windows app","715841616":"Please enter a valid phone number (e.g. +15417541234).","716428965":"(Closed)","718504300":"Postal/ZIP code","718509613":"Maximum duration: {{ value }}","720293140":"Log out","720519019":"Reset my password","721011817":"- Raise the first number to the power of the second number","723045653":"You'll log in to your Deriv account with this email address.","723961296":"Manage password","724526379":"Learn more with our tutorials","728042840":"To continue trading with us, please confirm where you live.","728824018":"Spanish Index","729251105":"Range: {{min}} - {{max}} {{duration_unit_text}} ","729651741":"Choose a photo","730473724":"This block performs the \"AND\" or the \"OR\" logic operation with the given values.","731382582":"BNB/USD","732828463":"Standing instructions to transfer funds to an account maintained in the United States, or directions regularly received from a US address","734298230":"Just a reminder","734390964":"Insufficient balance","734881840":"false","735907651":"A US residence address or a US correspondence address (including a US PO box)","737751617":"<0>Explore our website to see what’s available.","739126643":"Indicative high spot","742469109":"Reset Balance","743623600":"Reference","744110277":"Bollinger Bands Array (BBA)","745656178":"Use this block to sell your contract at the market price.","745674059":"Returns the specific character from a given string of text according to the selected option. ","746112978":"Your computer may take a few seconds to update","749336930":"Secure alternative to passwords.","750886728":"Switch to your real account to submit your documents","751468800":"Start now","751692023":"We <0>do not guarantee a refund if you make a wrong transfer.","752024971":"Reached maximum number of digits","752992217":"This block gives you the selected constant values.","753088835":"Default","753184969":"In providing our services to you, we are required to obtain information from you in order to assess whether a given product or service is appropriate for you (that is, whether you possess the experience and knowledge to understand the risks involved).<0/><1/>","753727511":"Type","755138488":"We’re unable to verify the document you provided because it contains markings or text that should not be on your document. Please provide a clear photo or a scan of your original identity document.","756152377":"SMA places equal weight to the entire distribution of values.","758003269":"make list from text","758492962":"210+","760528514":"Please note that changing the value of \"i\" won't change the value of the original item in the list","761576760":"Fund your account to start trading.","762926186":"A quick strategy is a ready-made strategy that you can use in Deriv Bot. There are 3 quick strategies you can choose from: Martingale, D'Alembert, and Oscar's Grind.","764366329":"Trading limits","766317539":"Language","768301339":"Delete Blocks","772520934":"You may sell the contract up to 24 hours before expiry. If you do, we’ll pay you the <0>contract value.","773091074":"Stake:","773309981":"Oil/USD","773336410":"Tether is a blockchain-enabled platform designed to facilitate the use of fiat currencies in a digital manner.","775679302":"{{pending_withdrawals}} pending withdrawal(s)","775706054":"Do you sell trading bots?","776085955":"Strategies","776432808":"Select the country where you currently live.","778172770":"Deriv CFDs","780009485":"About D'Alembert","781924436":"Call Spread/Put Spread","783974693":"Avoid recent years","784311461":"Exponential Moving Average (EMA)","784583814":"Linked to your computer","785969488":"Jump 75 Index","787727156":"Barrier","788005234":"NA","789013690":"This is the corresponding price level based on the payout per point you’ve selected. If this barrier is ever breached, your contract would be terminated.","792164271":"This is when your contract will expire based on the Duration or End time you’ve selected.","792622364":"Negative balance protection","793526589":"To file a complaint about our service, send an email to <0>complaints@deriv.com and state your complaint in detail. Please submit any relevant screenshots of your trading or system for our better understanding.","793531921":"Our company is one of the oldest and most reputable online trading companies in the world. We are committed to treat our clients fairly and provide them with excellent service.<0/><1/>Please provide us with feedback on how we can improve our services to you. Rest assured that you will be heard, valued, and treated fairly at all times.","794682658":"Copy the link to your phone","794778483":"Deposit later","795859446":"Password saved","795992899":"The amount you choose to receive at expiry for every point of change between the final price and the barrier. ","797007873":"Follow these steps to recover camera access:","797500286":"negative","800228448":"This complaints policy, which may change from time to time, applies to your account(s) registered with {{legal_entity_name_svg}} and {{legal_entity_name_fx}}.","800521289":"Your personal details are incomplete","802436811":"View transaction details","802438383":"New proof of address is needed","802556390":"seconds","802989607":"Drag your XML file here","803500173":"Initial stake","806165583":"Australia 200","807499069":"Financial commission complaints procedure","808323704":"You can also use \"Compare\" and \"Logic operation\" blocks to make test variables.","812430133":"Spot price on the previous tick.","815925952":"This block is mandatory. Only one copy of this block is allowed. It is added to the canvas by default when you open Deriv Bot.","816580787":"Welcome back! Your messages have been restored.","816738009":"<0/><1/>You may also raise your unresolved dispute to the <2>Office of the Arbiter for Financial Services.","818447476":"Switch account?","820877027":"Please verify your proof of identity","821163626":"Server maintenance occurs every first Saturday of the month from 7 to 10 GMT time. You may experience service disruption during this time.","823186089":"A block that can contain text.","823279888":"The {{block_type}} block is missing.","824797920":"Is list empty?","825042307":"Let’s try again","825179913":"This document number was already submitted for a different account. It seems you have an account with us that doesn't need further verification. Please contact us via <0>live chat if you need help.","826511719":"USD/SEK","827688195":"Disable Block","828219890":"then","828602451":"Returns the list of tick values in string format","829970143":"If you've hit the deposit limit, please wait 1-2 hours before trying again. Check that your browser is up to date and use incognito mode. If you still have problems, please contact us via <0>live chat.","830164967":"Last name","830703311":"My profile","830993327":"No current transactions available","831344594":"If you select “<0>Lower”, you win the payout if the exit spot is strictly lower than the barrier.","832053636":"Document submission","832217983":"40 transactions or more in the past 12 months","832398317":"Sell Error","832721563":"If you select \"Low Tick\", you win the payout if the selected tick is the lowest among the next five ticks.","834966953":"1551661986 seconds since Jan 01 1970 (UTC) translates to 03/04/2019 @ 1:13am (UTC).","835336137":"View Detail","835350845":"Add another word or two. Uncommon words are better.","836097457":"I am interested in trading but have very little experience.","837063385":"Do not send other currencies to this address.","837066896":"Your document is being reviewed, please check back in 1-3 days.","839158849":"4. If the second trade results in a loss, the Deriv Bot will automatically increase your stake for the next trade by 2 USD. Deriv Bot will continue to add 2 USD to the previous round’s stake after every losing trade. See A2.","839805709":"To smoothly verify you, we need a better photo","841543189":"View transaction on Blockchain","843333337":"You can only make deposits. Please complete the <0>financial assessment to unlock withdrawals.","845106422":"Last digit prediction","845304111":"Slow EMA Period {{ input_number }}","847209411":"{{formatted_opening_time}} (GMT), {{opening_date}}","848083350":"Your payout is equal to the <0>payout per point multiplied by the difference between the final price and the strike price. You will only earn a profit if your payout is higher than your initial stake.","850582774":"Please update your personal info","851054273":"If you select \"Higher\", you win the payout if the exit spot is strictly higher than the barrier.","851264055":"Creates a list with a given item repeated for a specific number of times.","851508288":"This block constrains a given number within a set range.","852527030":"Step 2","852583045":"Tick List String","852627184":"document number","854399751":"Digit code must only contain numbers.","854630522":"Choose a cryptocurrency account","857363137":"Volatility 300 (1s) Index","857445204":"Deriv currently supports withdrawals of Tether eUSDT to Ethereum wallet. To ensure a successful transaction, enter a wallet address compatible with the tokens you wish to withdraw. <0>Learn more","857986403":"do something","858663703":"For new trades, please transfer your funds into the new <0>{{platform}} {{eligible_account_to_migrate}} account(s).","860319618":"Tourism","862283602":"Phone number*","863023016":"For instance, if a trader has a loss threshold (B) of 100 USD, with an initial stake (s) of 1 USD and 2 units of increment (f), the calculation would be as follows:","863328851":"Proof of identity","864610268":"First, enter your {{label}} and the expiry date.","864655280":"You can continue to hold your current open positions in your existing MT5 account(s).","864957760":"Math Number Positive","865424952":"High-to-Low","865642450":"2. Logged in from a different browser","866496238":"Make sure your license details are clear to read, with no blur or glare","868826608":"Excluded from {{brand_website_name}} until","869068127":"The cashier is temporarily down due to maintenance. It will be available as soon as the maintenance is complete.","869823595":"Function","872050196":"Acceptable range: {{min_take_profit}} to {{max_take_profit}} {{currency}}","872661442":"Are you sure you want to update email <0>{{prev_email}} to <1>{{changed_email}}?","872721776":"2. Select your XML file and hit Select.","872817404":"Entry Spot Time","873166343":"1. 'Log' displays a regular message.","873387641":"If you have open positions","874461655":"Scan the QR code with your phone","874472715":"Your funds will remain in your existing MT5 account(s).","874484887":"Take profit must be a positive number.","875101277":"If I close my web browser, will Deriv Bot continue to run?","875532284":"Restart process on a different device","876086855":"Complete the financial assessment form","876292912":"Exit","879014472":"Reached maximum number of decimals","879647892":"You may sell the contract up until 60 seconds before expiry. If you do, we’ll pay you the <0>contract value.","881963105":"(XAUUSD, XAGUSD)","882423592":"The amount that you stake for the first trade. Note that this is the minimum stake amount.","885065431":"Get a Deriv account","887423525":"This is Beta version of server bot.","888274063":"Town/City","888924866":"We don’t accept the following inputs for:","890299833":"Go to Reports","891337947":"Select country","893963781":"Close-to-Low","893975500":"You do not have any recent bots","894191608":"<0>c.We must award the settlement within 28 days of when the decision is reached.","896790627":"A US birthplace","897597439":"Changes saved.","898457777":"You have added a Deriv Financial account.","898904393":"Barrier:","899342595":"NIN","900646972":"page.","902045490":"3 minutes","903429103":"In candles list read {{ candle_property }} # from end {{ input_number }}","904696726":"API token","905227556":"Strong passwords contain at least 8 characters, combine uppercase and lowercase letters and numbers.","905564365":"MT5 CFDs","906049814":"We’ll review your documents and notify you of its status within 5 minutes.","906789729":"Your verification documents were already used for another account.","907680782":"Proof of ownership verification failed","909272635":"Financial - SVG","910888293":"Too many attempts","911048905":"(BTCUSD, ETHUSD)","912257733":"The workspace will be reset to the default strategy and any unsaved changes will be lost. <0>Note: This will not affect your running bot.","912406629":"Follow these steps:","912967164":"Import from your computer","915735109":"Back to {{platform_name}}","918447723":"Real","920125517":"Add demo account","921857297":"Enter a value from 0 to {{ value }}.","921901739":"- your account details of the bank linked to your account","922313275":"You're back online","924046954":"Upload a document showing your name and bank account number or account details.","924912760":"Your document appears to be a digital document.","929608744":"You are unable to make withdrawals","930255747":"Please enter your {{document_name}}. ","930346117":"Capitalization doesn't help very much","930546422":"Touch","933126306":"Enter some text here","933193610":"Only letters, periods, hyphens, apostrophes, and spaces, please.","936393760":"You receive a <0>payout at <1>expiry if the spot price never touches or breaches the <2>barrier during the contract period. If it does, your contract will be terminated early.","937237342":"Strategy name cannot be empty","937682366":"Upload both of these documents to prove your identity.","937831119":"Last name*","937992258":"Table","938500877":"{{ text }}. <0>You can view the summary of this transaction in your email.","938947787":"Withdrawal {{currency}}","938988777":"High barrier","942015028":"Step 500 Index","944499219":"Max. open positions","945532698":"Contract sold","945753712":"Back to Trader’s Hub","946204249":"Read","946841802":"A white (or green) candle indicates that the open price is lower than the close price. This represents an upward movement of the market price.","947046137":"Your withdrawal will be processed within 24 hours","947363256":"Create list","947602200":"Save this strategy as an XML file from Deriv Bot for faster re-imports.","947704973":"Reverse D’Alembert","947758334":"City is required","947914894":"Top up  <0>","948156236":"Create {{type}} password","949859957":"Submit","952927527":"Regulated by the Malta Financial Services Authority (MFSA) (licence no. IS/70156)","956448295":"Cut-off image detected","957182756":"Trigonometric functions","958430760":"In/Out","958503488":"Search markets on ","959031082":"set {{ variable }} to MACD Array {{ dropdown }} {{ dummy }}","960201789":"3. Sell conditions","961266215":"140+","961327418":"My computer","961692401":"Bot","962251615":"If you want to adjust your self-exclusion limits, <0>contact us via live chat.","966457287":"set {{ variable }} to Exponential Moving Average {{ dummy }}","968576099":"Up/Down","969858761":"Principle 1: Strategy aims to potentially make one unit of profit per session","969987233":"Win up to maximum payout if exit spot is between lower and upper barrier, in proportion to the difference between exit spot and lower barrier.","970915884":"AN","974888153":"High-Low","975608902":"To trade CFDs, get a Deriv Apps account first.","975668699":"I confirm and accept {{company}} 's <0>Terms and Conditions","975747761":"Ongoing","975950139":"Country of Residence","977647549":"Note: You can use this password for all your {{platform}} accounts.","977929335":"Go to my account settings","979713491":"Zero Spread BVI","980050614":"Update now","981138557":"Redirect","981568830":"You have chosen to exclude yourself from trading on our website until {{exclude_until}}. If you are unable to place a trade or deposit after your self-exclusion period, please contact us via <0>live chat.","981965437":"Scan the QR code below with your 2FA app. We recommend <0>Authy or <1>Google Authenticator.","982146443":"WhatsApp","982402892":"First line of address","982829181":"Barriers","983295075":"Why can't I see the funds on my card/e-wallet balance after I've made a withdrawal?","983451828":"2. Select the asset and trade type.","984175243":"Expand Blocks","986565137":"We've received your proof of income","987053672":"You can continue with the open positions on your current <0>{{platform}} {{existing_account}} account(s).","987224688":"How many trades have you placed with other financial instruments in the past 12 months?","988064913":"4. Come back to Deriv Bot and add the Notify Telegram block to the workspace. Paste the Telegram API token and chat ID into the block fields accordingly.","988361781":"You have no trading activity yet.","988934465":"When prompted, you must enable camera access to continue","989840364":"You’re under legal age.","990739582":"170+","992294492":"Your postal code is invalid","992677950":"Logging out on other devices","993827052":"Choosing this jurisdiction will give you a Financial STP account. Your trades will go directly to the market and have tighter spreads.","995563717":"not {{ boolean }}","997276809":"I confirm that the name and date of birth above match my chosen identity document","997311089":"Change my password","999008199":"text","1001160515":"Sell","1002989598":"iOS: iCloud keychain.","1003876411":"Should start with letter or number and may contain a hyphen, period and slash.","1004127734":"Send email","1006069082":"The objective of Martingale strategy is to take advantage of consecutive successful trades and maximise potential profits from them. This strategy is beneficial only if there are consecutive successful trades. Therefore, it is important to set a maximum stake to secure all the potential profits gained from a number of consecutive successful trades, or you could lose all the profits you have accumulated, including your initial stake. For example, if your goal is to maximise profits within 2 consecutive successful trades, you set a maximum stake of 2 USD, given your initial stake is 1 USD. Similarly, if your goal is to maximise profits within 3 consecutive successful trades, you set a maximum stake of 4 USD, given your initial stake is 1 USD.","1006458411":"Errors","1006664890":"Silent","1008151470":"Unit: The number of units that are added in the event of successful trades or the number of units removed in the event of losing trades. For example, if the unit is set at 2, the stake increases or decreases by two times the initial stake of 1 USD, meaning it changes by 2 USD.","1009032439":"All time","1010198306":"This block creates a list with strings and numbers.","1010337648":"We were unable to verify your proof of ownership.","1011424042":"{{text}}. stake<0/>","1012102263":"You will not be able to log in to your account until this date (up to 6 weeks from today).","1015201500":"Define your trade options such as duration and stake.","1016220824":"You need to switch to a real money account to use this feature.<0/>You can do this by selecting a real account from the <1>Account Switcher.","1017081936":"If you select “<0>Put”, you’ll earn a payout if the final price is below the strike price at expiry. Otherwise, you won’t receive a payout.","1018803177":"standard deviation","1019265663":"You have no transactions yet.","1019508841":"Barrier 1","1021090237":"Upgrade your <0>{{account_1}} <1/>and <0>{{account_2}} {{platform}} account(s)","1021679446":"Multipliers only","1022934784":"1 minute","1022971288":"Payout per pip","1023237947":"1. In the example below, the instructions are repeated as long as the value of x is less than or equal to 10. Once the value of x exceeds 10, the loop is terminated.","1023643811":"This block purchases contract of a specified type.","1023795011":"Even/Odd","1024205076":"Logic operation","1024740916":"0.2 pips","1026046972":"Please enter a payout amount that's lower than {{max_payout}}.","1026289179":"Trade on the go","1028211549":"All fields are required","1028758659":"Citizenship*","1029164365":"We presume that you possess the experience, knowledge, and expertise to make your own investment decisions and properly assess the risk involved.","1029641567":"{{label}} must be less than 30 characters.","1030021206":"change {{ variable }} by {{ number }}","1031602624":"We've sent a secure link to %{number}","1031731167":"Pound Sterling","1032173180":"Deriv","1032907147":"AUD/NZD","1033253221":"Confirm your identity to make a withdrawal.","1035893169":"Delete","1036116144":"Speculate on the price movement of an asset without actually owning it.","1036867749":"The desired duration, stake, prediction, and/or barrier(s) for the contract is defined here.","1038575777":"Change password","1039428638":"EU regulation","1039476188":"The size used to multiply the stake after a losing trade for the next trade.","1039755542":"Use a few words, avoid common phrases","1040472990":"1. Go to Bot Builder.","1040677897":"To continue trading, you must also submit a proof of address.","1041001318":"This block performs the following operations on a given list: sum, minimum, maximum, average, median, mode, antimode, standard deviation, random item.","1041620447":"If you are unable to scan the QR code, you can manually enter this code instead:","1042659819":"You have an account that needs action","1043790274":"There was an error","1044599642":"<0> has been credited into your {{platform}} {{title}} account.","1045704971":"Jump 150 Index","1045782294":"Click the <0>Change password button to change your Deriv password.","1047389068":"Food Services","1047644783":"Enable screen lock on your device.","1047881477":"Unfortunately, your browser does not support the video.","1048687543":"Labuan Financial Services Authority","1048947317":"Sorry, this app is unavailable in {{clients_country}}.","1049384824":"Rise","1050063303":"Videos on Deriv Bot","1050128247":"I confirm that I have verified the payment agent’s transfer information.","1050844889":"Reports","1052779010":"You are on your demo account","1052921318":"{{currency}} Wallet","1053153674":"Jump 50 Index","1053159279":"Level of education","1053556481":"Once you submit your complaint, we will send you an acknowledgement email to confirm that we have received it.","1055313820":"No document detected","1056381071":"Return to trade","1056821534":"Are you sure?","1057216772":"text {{ input_text }} is empty","1057519018":"4. If a trade ends in a profit, the stake for the following trade will be reset to the initial stake amount of 1 USD.","1057749183":"Two-factor authentication (2FA)","1057765448":"Stop out level","1057904606":"The concept of the D’Alembert Strategy is said to be similar to the Martingale Strategy where you will increase your contract size after a loss. With the D’Alembert Strategy, you will also decrease your contract size after a successful trade.","1058804653":"Expiry","1058905535":"Tutorial","1060231263":"When are you required to pay an initial margin?","1061308507":"Purchase {{ contract_type }}","1062423382":"Explore the video guides and FAQs to build your bot in the tutorials tab.","1062536855":"Equals","1062569830":"The <0>name on your identity document doesn't match your profile.","1065498209":"Iterate (1)","1065766135":"You have {{remaining_transfers}} {{transfer_text}} remaining for today.","1066235879":"Transferring funds will require you to create a second account.","1066459293":"4.3. Acknowledging your complaint","1069347258":"The verification link you used is invalid or expired. Please request for a new one.","1070323991":"6. If consecutive successful trades were to happen, the stake would follow a sequence of adjustment from 1 to 3, then 2, and 6 units of initial stake. After 4 consecutive successful trades, it completes one cycle and then the strategy will repeat itself for another cycle. If any trade results in a loss, your stake will reset back to the initial stake for the next trade.","1070624871":"Check proof of address document verification status","1073261747":"Verifications","1073611269":"A copy of your identity document (e.g. identity card, passport, driver's license)","1073711308":"Trade closed","1076006913":"Profit/loss on the last {{item_count}} contracts","1077515534":"Date to","1078189922":"You can make a new deposit once the verification of your account is complete.","1078221772":"Leverage prevents you from opening large positions.","1078303105":"Stop out","1080068516":"Action","1080990424":"Confirm","1082158368":"*Maximum account cash balance","1082406746":"Please enter a stake amount that's at least {{min_stake}}.","1083781009":"Tax identification number*","1083826534":"Enable Block","1087112394":"You must select the strike price before entering the contract.","1088031284":"Strike:","1088138125":"Tick {{current_tick}} - ","1089085289":"Mobile number","1089436811":"Tutorials","1089687322":"Stop your current bot?","1090041864":"The {{block_type}} block is mandatory and cannot be deleted/disabled.","1090802140":"Additional Information","1095295626":"<0>•The Arbiter for Financial Services will determine whether the complaint can be accepted and is in accordance with the law.","1096078516":"We’ll review your documents and notify you of its status within 3 days.","1096175323":"You’ll need a Deriv account","1098147569":"Purchase commodities or shares of a company.","1098622295":"\"i\" starts with the value of 1, and it will be increased by 2 at every iteration. The loop will repeat until \"i\" reaches the value of 12, and then the loop is terminated.","1100133959":"National ID","1100870148":"To learn more about account limits and how they apply, please go to the <0>Help Centre.","1101712085":"Buy Price","1102420931":"Next, upload the front and back of your driving licence.","1102995654":"Calculates Exponential Moving Average (EMA) list from a list of values with a period","1103309514":"Target","1103452171":"Cookies help us to give you a better experience and personalised content on our site.","1104912023":"Pending verification","1107474660":"Submit proof of address","1107555942":"To","1109182113":"Note: Deal cancellation is only available for Volatility Indices on Multipliers.","1109217274":"Success!","1110102997":"Statement","1111743543":"Stop loss (Multiplier)","1112582372":"Interval duration","1113119682":"This block gives you the selected candle value from a list of candles.","1113227831":"Yes, you can. However, there are limits on your account, such as maximum number of open positions and maximum aggregate payouts on open positions. So, just keep these limits in mind when opening multiple positions. You can find more info about these limits at Settings > Account limits.","1113292761":"Less than 8MB","1113390200":"Your open trades will appear here.","1114679006":"You have successfully created your bot using a simple strategy.","1117281935":"Sell conditions (optional)","1117863275":"Security and safety","1118294625":"You have chosen to exclude yourself from trading on our website until {{exclusion_end}}. If you are unable to place a trade or deposit after your self-exclusion period, please contact us via live chat.","1119887091":"Verification","1119986999":"Your proof of address was submitted successfully","1120985361":"Terms & conditions updated","1121050010":"Transaction fee: {{amount}} {{currency}}","1122910860":"Please complete your <0>financial assessment.","1123927492":"You have not selected your account currency","1124382808":"Please enter the expiry time in the format \"HH:MM\".","1125090693":"Must be a number","1126075317":"Add your Deriv MT5 <0>{{account_type_name}} STP account under Deriv (FX) Ltd regulated by Labuan Financial Services Authority (Licence no. MB/18/0024).","1126934455":"Length of token name must be between 2 and 32 characters.","1127224297":"Sorry for the interruption","1127884488":"cTrader MacOS app","1128139358":"How many CFD trades have you placed in the past 12 months?","1128321947":"Clear All","1128404172":"Undo","1129124569":"If you select \"Under\", you will win the payout if the last digit of the last tick is less than your prediction.","1129842439":"Please enter a take profit amount.","1133651559":"Live chat","1134879544":"Example of a document with glare","1134883120":"Use your Deriv account email and password to log in to cTrader.","1138126442":"Forex: standard","1143730031":"Direction is {{ direction_type }}","1144028300":"Relative Strength Index Array (RSIA)","1145927365":"Run the blocks inside after a given number of seconds","1146064568":"Go to Deposit page","1147269948":"Barrier cannot be zero.","1150637063":"*Volatility 150 Index and Volatility 250 Index","1151964318":"both sides","1152294962":"Upload the front of your driving licence.","1154021400":"list","1154239195":"Title and name","1155011317":"This block converts the date and time to the number of seconds since the Unix Epoch (1970-01-01 00:00:00).","1155143434":"By clicking on <0>Next you agree to move your {{platform}} {{type}} {{from_account}} account(s) under <2/>Deriv {{account_to_migrate}} Ltd’s <1>terms and conditions.","1155626418":"below","1158678321":"<0>b.The Head of the Dispute Resolution Committee (DRC) will contact both you and us within 5 business days to obtain all necessary information and see if there is a chance to settle the complaint during the investigation phase.","1160761178":"No payout if exit spot is below or equal to the lower barrier.","1161924555":"Please select an option","1163771266":"The third block is <0>optional. You may use this block if you want to sell your contract before it expires. For now, leave the block as it is. ","1163836811":"Real Estate","1164773983":"Take profit and/or stop loss are not available while deal cancellation is active.","1166023941":"New password","1166128807":"Choose one of your accounts or add a new cryptocurrency account","1166377304":"Increment value","1166916934":"Demo Standard SVG","1168029733":"Win payout if exit spot is also equal to entry spot.","1169201692":"Create {{platform}} password","1170228717":"Stay on {{platform_name_trader}}","1171765024":"Step 3","1171961126":"trade parameters","1172230903":"• Stop loss threshold: Use this variable to store your loss limit. You can assign any amount you want. Your bot will stop when your losses hits or exceeds this amount.","1172524677":"CFDs Demo","1173957529":"Go to ‘Account Settings’ on Deriv.","1174542625":"- Find the chat ID property in the response, and copy the value of the id property","1174689133":"3. Set your trade parameters and hit Run.","1174748431":"Payment channel","1175183064":"Vanuatu","1177396776":"If you select \"Asian Fall\", you will win the payout if the last tick is lower than the average of the ticks.","1177723589":"There are no transactions to display","1178582280":"The number of contracts you have lost since you last cleared your stats.","1178800778":"Take a photo of the back of your license","1178942276":"Please try again in a minute.","1179704370":"Please enter a take profit amount that's higher than the current potential profit.","1181396316":"This block gives you a random number from within a set range","1181770592":"Profit/loss from selling","1183007646":"- Contract type: the name of the contract type such as Rise, Fall, Touch, No Touch, etс.","1183448523":"<0>We're setting up your Wallets","1184968647":"Close your contract now or keep it running. If you decide to keep it running, you can check and close it later on the ","1186687280":"Question {{ current }} of {{ total }}","1188316409":"To receive your funds, contact the payment agent with the details below","1188980408":"5 minutes","1189249001":"4.1. What is considered a complaint?","1189368976":"Please complete your personal details before you verify your identity.","1190226567":"Standard - Vanuatu","1191429031":"Please click on the link in the email to change your <0>{{platform_name_dxtrade}} password.","1195393249":"Notify {{ notification_type }} with sound: {{ notification_sound }} {{ input_message }}","1196006480":"Profit threshold","1197649109":"No results for {{searchTerm}}","1198368641":"Relative Strength Index (RSI)","1199281499":"Last Digits List","1201299746":"Bot list","1201533528":"Contracts won","1201773643":"numeric","1203297580":"This block sends a message to a Telegram channel.","1203380736":"The D’Alembert strategy is less risky than Martingale, but you can still determine how long your funds will last with this strategy before trading. Simply use this formula.","1204223111":"In this example, the open prices from a list of candles are assigned to a variable called \"candle_list\".","1204459171":"Your existing <0>{{platform}} {{type_1}} <1/>and <0>{{type_2}} {{from_account}} account(s) will remain accessible.","1206227936":"How to mask your card?","1206821331":"Armed Forces","1208729868":"Ticks","1208903663":"Invalid token","1211912982":"Bot is starting","1214893428":"Account creation is currently unavailable for mobile. Please log in with your computer to create a new account.","1216408337":"Self-Employed","1217159705":"Bank account number","1217481729":"Tether as an ERC20 token (eUSDT) is a version of Tether that is hosted on Ethereum.","1218546232":"What is Fiat onramp?","1219844088":"do %1","1221250438":"To enable withdrawals, please submit your <0>Proof of Identity (POI) and <1>Proof of Address (POA) and also complete the <2>financial assessment in your account settings.","1222096166":"Deposit via bank wire, credit card, and e-wallet","1222521778":"Making deposits and withdrawals is difficult.","1222544232":"We’ve sent you an email","1223993374":"For entry spot, we use current-tick-execution mechanism, which is the latest asset price when the trade opening is processed by our servers.","1225874865":"The stake adjustment: target session profit (1 USD) - current session profit (0 USD) = 1 USD","1227074958":"random fraction","1227132397":"4. For trades that result in a loss, there are two outcomes. If it was traded at the initial stake, the next trade will remain at the same amount as the strategy trades minimally at the initial stake, see A2. If it was traded with a higher amount, the stake for the next trade would be reduced by 2 USD, see A3.","1227240509":"Trim spaces","1228534821":"Some currencies may not be supported by payment agents in your country.","1229883366":"Tax identification number","1230884443":"State/Province (optional)","1231282282":"Use only the following special characters: {{permitted_characters}}","1232291311":"Maximum withdrawal remaining","1232353969":"0-5 transactions in the past 12 months","1233178579":"Our customers say","1233300532":"Payout","1233910495":"If you select \"<0>Down\", your total profit/loss will be the percentage decrease in the underlying asset price, times the multiplier and stake, minus commissions.","1234292259":"Source of wealth","1234764730":"Upload a screenshot of your name and email address from the personal details section.","1236527126":"(Transaction fee: {{transaction_fee}} {{currency_symbol}})","1237330017":"Pensioner","1238311538":"Admin","1239752061":"In your cryptocurrency wallet, make sure to select the <0>{{network_name}} network when you transfer funds to Deriv.","1239760289":"Complete your trading assessment","1239940690":"Restarts the bot when an error is encountered.","1240027773":"Please Log in","1240688917":"Glossary","1241238585":"You may transfer between your Deriv fiat, cryptocurrency, and {{platform_name_mt5}} accounts.","1242288838":"Hit the checkbox above to choose your document.","1242994921":"Click here to start building your Deriv Bot.","1243064300":"Local","1243287470":"Transaction status","1246207976":"Enter the authentication code generated by your 2FA app:","1246880072":"Select issuing country","1247280835":"Our cryptocurrency cashier is temporarily down due to system maintenance. You can make cryptocurrency deposits and withdrawals in a few minutes when the maintenance is complete.","1248018350":"Source of income","1248940117":"<0>a.The decisions made by the DRC are binding on us. DRC decisions are binding on you only if you accept them.","1250113042":"This device doesn't support passkeys.","1250495155":"Token copied!","1252669321":"Import from your Google Drive","1253531007":"Confirmed","1253636052":"MetaTrader5 web terminal","1254565203":"set {{ variable }} to create list with","1255827200":"You can also import or build your bot using any of these shortcuts.","1255909792":"last","1255963623":"To date/time {{ input_timestamp }} {{ dummy }}","1258097139":"What could we do to improve?","1258198117":"positive","1259145708":"Let’s try again. Choose another document and enter the corresponding details.","1259598687":"GBP/JPY","1260259925":"Phone is not in a proper format.","1264096613":"Search for a given string","1265317149":"A recent utility bill (e.g. electricity, water or gas) or recent bank statement or government-issued letter with your name and address.","1265704976":"","1266728508":"Proof of income verification passed","1269296089":"Let's build a Bot!","1270581106":"If you select \"No Touch\", you win the payout if the market never touches the barrier at any time during the contract period.","1272012156":"GBP/CHF","1272337240":"Days","1272681097":"Hours","1274380814":"Your payout is equal to the <0>payout per pip multiplied by the difference, <1>in pips, between the final price and the strike price. You will only earn a profit if your payout is higher than your initial stake.","1274819385":"3. Complaints and Disputes","1276660852":"Submit your proof of identity","1281045211":"Sorts the items in a given list, by their numeric or alphabetical value, in either ascending or descending order.","1281290230":"Select","1282951921":"Only Downs","1283418744":"Additional features are available to manage your positions: “<0>Take profit”, “<1>Stop loss” and “<2>Deal cancellation” allow you to adjust your level of risk aversion.","1284522768":"If \"Loss\" is selected, it will return \"True\" if your last trade was unsuccessful. Otherwise, it will return an empty string.","1286094280":"Withdraw","1286384690":"If you select “<0>Even”, you will win the payout if the last digit of the last tick is an even number (i.e. 2, 4, 6, 8, or 0).","1286507651":"Close identity verification screen","1288965214":"Passport","1289146554":"British Virgin Islands Financial Services Commission","1289650867":"The Oscar’s Grind strategy is designed to potentially gain a modest yet steady profit in each trading session. This strategy splits trades into sessions and has three principles.","1290525720":"Example: ","1290627672":"You can only run one bot at a time.","1291997417":"Contracts will expire at exactly 23:59:59 GMT on your selected expiry date.","1292179259":"No open trades","1292188546":"Reset Deriv MT5 investor password","1292891860":"Notify Telegram","1293660048":"Max. total loss per day","1294553728":"We’re unable to verify the document you provided because it appears to be a blank image. Please try again or upload another document.","1294756261":"This block creates a function, which is a group of instructions that can be executed at any time. Place other blocks in here to perform any kind of action that you need in your strategy. When all the instructions in a function have been carried out, your bot will continue with the remaining blocks in your strategy. Click the “do something” field to give it a name of your choice. Click the plus icon to send a value (as a named variable) to your function.","1295053602":"You cannot delete a running bot.","1295284664":"Please accept our <0>updated Terms and Conditions to proceed.","1296380713":"Close my contract","1298254025":"Standard - BVI","1299479533":"8 hours","1300576911":"Please resubmit your proof of address or we may restrict your account.","1302691457":"Occupation","1303016265":"Yes","1303530014":"We’re processing your withdrawal.","1304083330":"copy","1304272843":"Please submit your proof of address.","1304620236":"Enable camera","1305217290":"Upload the back of your identity card.","1306976251":"Standard SVG","1308625834":"Sets the default time interval for blocks that read list of candles.","1309017029":"Enabling this allows you to save your blocks as one collection which can be easily integrated into other bots.","1309044871":"Returns the value of the latest tick in string format","1310483610":"Results for \"{{ search_term }}\"","1311680770":"payout","1313167179":"Please log in","1313302450":"The bot will stop trading if your total loss exceeds this amount.","1314572331":"Your document failed our verification checks.","1316216284":"You can use this password for all your {{platform}} accounts.","1319217849":"Check your mobile","1320715220":"<0>Account closed","1320750775":"Front and back","1322804930":"Restart the process on the latest version of Google Chrome","1323327633":"Our complaints process comprises the following 4 steps:","1323476617":"Changes the capitalisation of a string of text to Upper case, Lower case, Title case.","1323996051":"Profile","1324922837":"2. The new variable will appear as a block under Set variable.","1325514262":"(licence no. MB/18/0024)","1327181172":"Financial Vanuatu","1327494533":"{{sell_value}} (Sell)","1329136554":"Jump 200 Index","1329325646":"The content of this block is called on every tick","1331199417":"Please enter the correct format. ","1331367811":"Client account number","1332168410":"Learn more","1332168769":"Disconnect","1333576137":"Please update your {{details}} to continue.","1333839457":"Submit identity card (front)","1334326985":"It may take a few minutes to arrive","1335967988":"Notice","1337846406":"This block gives you the selected candle value from a list of candles within the selected time interval.","1337864666":"Photo of your document","1338496204":"Ref. ID","1339565304":"Deposit now to start trading","1339613797":"Regulator/External dispute resolution","1340286510":"The bot has stopped, but your trade may still be running. You can check it on the Reports page.","1341840346":"View in Journal","1341921544":"Trading accounts and funds","1344696151":"Forex, stocks, stock indices, commodities, cryptocurrencies and synthetic indices.","1346038489":"Should be less than 70.","1346204508":"Take profit","1346339408":"Managers","1346947293":"We were unable to verify your selfie because it’s not clear. Please take a clearer photo and try again. Ensure that there's enough light where you are and that your entire face is in the frame.","1347071802":"{{minutePast}}m ago","1349133669":"Try changing your search criteria.","1349289354":"Great, that's everything we need","1349295677":"in text {{ input_text }} get substring from {{ position1 }} {{ index1 }} to {{ position2 }} {{ index2 }}","1351906264":"This feature is not available for payment agents.","1352234202":"Last {{positionsCount}} contracts:","1352413406":"Define your trade options, such as accumulator and stake.","1353197182":"Please select","1354288636":"Based on your answers, it looks like you have insufficient knowledge and experience in trading CFDs. CFD trading is risky and you could potentially lose all of your capital.<0/><0/>","1355250245":"{{ calculation }} of list {{ input_list }}","1356574493":"Returns a specific portion of a given string of text.","1356607862":"Deriv password","1357213116":"Identity card","1358543466":"Not available","1358543748":"enabled","1360929368":"Add a Deriv account","1362029761":"Exploring the Reverse Martingale strategy in Deriv Bot","1362578283":"High","1363645836":"Derived FX","1363675688":"Duration is a required field.","1364879837":"The verification is passed but the personal info is not available to compare.","1364958515":"Stocks","1366244749":"Limits","1367488817":"4. Restart trading conditions","1367990698":"Volatility 10 Index","1370647009":"Enjoy higher daily limits","1371193412":"Cancel","1371555192":"Choose your preferred payment agent and enter your withdrawal amount. If your payment agent is not listed, <0>search for them using their account number.","1371641641":"Open the link on your mobile","1371911731":"Financial products in the EU are offered by {{legal_entity_name}}, licensed as a Category 3 Investment Services provider by the Malta Financial Services Authority (<0>Licence no. IS/70156).","1373949314":"The Reverse Martingale strategy involves increasing your stake after each successful trade and resets to the initial stake for every losing trade as it aims to secure potential profits from consecutive wins.","1374627690":"Max. account balance","1374902304":"Your document appears to be damaged or cropped.","1375884086":"Financial, legal, or government document: recent bank statement, affidavit, or government-issued letter.","1376329801":"Last 60 days","1378419333":"Ether","1380349261":"Range","1383017005":"You have switched accounts.","1384127719":"You should enter {{min}}-{{max}} numbers.","1384222389":"Please submit valid identity documents to unlock the cashier.","1385418910":"Please set a currency for your existing real account before creating another account.","1387503299":"Log in","1388770399":"Proof of identity required","1389197139":"Import error","1390792283":"Trade parameters","1391174838":"Potential payout:","1392985917":"This is similar to a commonly used password","1393559748":"Invalid date/time: {{ datetime_string }}","1393901361":"There’s an app for that","1393903598":"if true {{ return_value }}","1396179592":"Commission","1396217283":"{{transaction_amount}} {{currency_symbol}}","1396417530":"Bear Market Index","1397628594":"Insufficient funds","1400341216":"We’ll review your documents and notify you of its status within 1 to 3 days.","1400732866":"View from camera","1400962248":"High-Close","1402208292":"Change text case","1402224124":"Hit the button below, and we'll email you a verification link.","1402300547":"Lets get your address verified","1403376207":"Update my details","1405584799":"with interval: {{ candle_interval_type }}","1407191858":"DTrader","1408844944":"Click the plus icon to extend the functionality of this block.","1411373212":"Strong passwords contain at least 8 characters. combine uppercase and lowercase letters, numbers, and symbols.","1411419173":"Growth Rate: {{ accumulator }}","1412405902":"See important notes","1412535872":"You can check the result of the last trade with this block. It can only be placed within the \"Restart trading conditions\" root block.","1413047745":"Assigns a given value to a variable","1413359359":"Make a new transfer","1414205271":"prime","1414366321":"An uppercase letter","1414918420":"We'll review your proof of identity again and will give you an update as soon as possible.","1415006332":"get sub-list from first","1415513655":"Download cTrader on your phone to trade with the Deriv cTrader account","1415974522":"If you select \"Differs\", you will win the payout if the last digit of the last tick is not the same as your prediction.","1416521695":"Positions","1417558007":"Max. total loss over 7 days","1417907460":"No problem! Your passkey still works.","1417914636":"Login ID","1418115525":"This block repeats instructions as long as a given condition is true.","1419330165":"Forex, stocks, stock indices, commodities, cryptocurrencies, ETFs and synthetic indices","1421046084":"Setup your account","1421749665":"Simple Moving Average (SMA)","1422060302":"This block replaces a specific item in a list with another given item. It can also insert the new item in the list at a specific position.","1422129582":"All details must be clear — nothing blurry","1423082412":"Last Digit","1423296980":"Enter your SSNIT number","1424741507":"See more","1424763981":"1-3-2-6","1424779296":"If you've recently used bots but don't see them in this list, it may be because you:","1428135876":"Summary/Journal","1428657171":"You can only make deposits. Please contact us via <0>live chat for more information.","1430221139":"Verify now","1430396558":"5. Restart buy/sell on error","1430632931":"To get trading, please confirm who you are, and where you live.","1433367863":"Sorry, an error occured while processing your request.","1434382099":"Displays a dialog window with a message","1434767075":"Get started on Deriv Bot","1434976996":"Announcement","1435363248":"This block converts the number of seconds since the Unix Epoch to a date and time format such as 2019-08-01 00:00:00.","1437529196":"Payslip","1438247001":"A professional client receives a lower degree of client protection due to the following.","1438340491":"else","1439168633":"Stop loss:","1441208301":"Total<0 />profit/loss","1442747050":"Loss amount: <0>{{profit}}","1442840749":"Random integer","1443478428":"Selected proposal does not exist","1444066971":"It seems you’ve submitted this document before. Upload a new document.","1444843056":"Corporate Affairs Commission","1445592224":"You accidentally gave us another email address (Usually a work or a personal one instead of the one you meant).","1447698999":"Withdrawals can be cancelled if they're still in the 'Requested' status (you can check your status under Pending payout). Once the status changes to 'Authorised', in 'Progress', or 'Processed', cancellation isn't possible.","1449462402":"In review","1452260922":"Too many failed attempts","1452941569":"This block delays execution for a given number of seconds. You can place any blocks within this block. The execution of other blocks in your strategy will be paused until the instructions in this block are carried out.","1453317405":"This block gives you the balance of your account either as a number or a string of text.","1454406889":"Choose <0>until as the repeat option.","1454648764":"deal reference id","1455741083":"Upload the back of your driving licence.","1457341530":"Your proof of identity verification has failed","1457603571":"No notifications","1458160370":"Enter your {{platform}} password to add a {{platform_name}} {{account}} {{jurisdiction_shortcode}} account.","1459761348":"Submit proof of identity","1461323093":"Display messages in the developer’s console.","1462238858":"By purchasing the \"High-to-Close\" contract, you'll win the multiplier times the difference between the high and close over the duration of the contract.","1464190305":"This block will transfer the control back to the Purchase conditions block, enabling you to purchase another contract without manually stopping and restarting your bot.","1464253511":"You already have an account for each of the cryptocurrencies available on {{deriv}}.","1465084972":"How much experience do you have with other financial instruments?","1465919899":"Pick an end date","1466430429":"Should be between {{min_value}} and {{max_value}}","1466900145":"Doe","1467017903":"This market is not yet available on {{platform_name_trader}}, but it is on {{platform_name_smarttrader}}.","1467421920":"with interval: %1","1467880277":"3. General queries","1468308734":"This block repeats instructions as long as a given condition is true","1468419186":"Deriv currently supports withdrawals of Tether USDT to Omni wallet. To ensure a successful transaction, enter a wallet address compatible with the tokens you wish to withdraw. <0>Learn more","1468508098":"Slippage happens when the asset price changes by the time it reaches our servers.","1469133110":"cTrader Windows app","1469764234":"Cashier Error","1469814942":"- Division","1470319695":"Returns either True or False","1470565177":"Article of association","1471008053":"Deriv Bot isn't quite ready for real accounts","1471070549":"Can contract be sold?","1471741480":"Severe error","1473369747":"Synthetics only","1475513172":"Size","1476301886":"Similar to SMA, this block gives you the entire SMA line containing a list of all values for a given period.","1478030986":"Create or delete API tokens for trading and withdrawals","1480915523":"Skip","1484336612":"This block is used to either terminate or continue a loop, and can be placed anywhere within a loop block.","1487086154":"Your documents were submitted successfully","1488548367":"Upload again","1490509675":"Options accounts","1491392301":"<0>Sold for: {{sold_for}}","1492686447":"Your MT5 Financial STP account will be opened through Deriv (FX) Ltd. All trading in this account is subject to the regulations and guidelines of the Labuan Financial Service Authority (LFSA). None of your other accounts, including your Deriv account, is subject to the regulations and guidelines of the Labuan Financial Service Authority (LFSA).","1493673429":"Change email","1493866481":"Run Deriv X on your browser","1496810530":"GBP/AUD","1497773819":"Deriv MT5 accounts","1499080621":"Tried to perform an invalid operation.","1501691227":"Add Your Deriv MT5 <0>{{account_type_name}} account under Deriv (V) Ltd, regulated by the Vanuatu Financial Services Commission.","1502039206":"Over {{barrier}}","1502325741":"Your password cannot be the same as your email address.","1503419760":"Swap-free CFDs on selected financial and derived instruments.","1503618738":"- Deal reference ID: the reference ID of the contract","1505420815":"No payment agents found for your search","1505927599":"Our servers hit a bump. Let’s refresh to move on.","1507554225":"Submit your proof of address","1509559328":"cTrader","1509570124":"{{buy_value}} (Buy)","1509678193":"Education","1510075920":"Gold/USD","1510357015":"Tax residence is required.","1510735345":"This block gives you a list of the last digits of the last 1000 tick values.","1512469749":"In the above example it is assumed that variable candle_open_price is processed somewhere within other blocks.","1513771077":"We're processing your withdrawal.","1516559721":"Please select one file only","1516676261":"Deposit","1517503814":"Drop file or click here to upload","1520332426":"Net annual income","1521546070":"Download Block","1524636363":"Authentication failed","1526012495":"This could be because:","1526483456":"2. Enter a name for your variable, and hit Create. New blocks containing your new variable will appear below.","1527251898":"Unsuccessful","1527664853":"Your payout is equal to the payout per point multiplied by the difference between the final price and the strike price.","1527906715":"This block adds the given number to the selected variable.","1531017969":"Creates a single text string from combining the text value of each attached item, without spaces in between. The number of items can be added accordingly.","1533177906":"Fall","1534796105":"Gets variable value","1537192641":"Unable to process your request","1537711064":"You need to make a quick identity verification before you can access the Cashier. Please go to your account settings to submit your proof of identity.","1540585098":"Decline","1541508606":"Looking for CFDs? Go to Trader's Hub","1541770236":"The 1-3-2-6 strategy aims to maximise potential profits with four consecutive successful trades. One unit is equal to the amount of the initial stake. The stake will adjust from 1 unit to 3 units after the first successful trade, then to 2 units after your second successful trade, and to 6 units after the third successful trade. The stake for the next trade will reset to the initial stake if there is a losing trade or a completion of the trade cycle.","1541969455":"Both","1542742708":"Synthetics, Forex, Stocks, Stock indices, Commodities, and Cryptocurrencies","1544642951":"If you select \"Only Ups\", you win the payout if consecutive ticks rise successively after the entry spot. No payout if any tick falls or is equal to any of the previous ticks.","1547148381":"That file is too big (only up to 8MB allowed). Please upload another file.","1548185597":"Step 200 Index","1549098835":"Total withdrawn","1551172020":"AUD Basket","1551689907":"Enhance your trading experience by upgrading your <0/><1>{{platform}} {{type}} {{from_account}} account(s).","1555345325":"User Guide","1556391770":"You cannot make a withdrawal as your documents are still under review. We will notify you by email within 3 days once your verification is approved.","1557682012":"Account Settings","1558972889":"set {{ variable }} to Simple Moving Average {{ dummy }}","1560302445":"Copied","1562374116":"Students","1566037033":"Bought: {{longcode}} (ID: {{transaction_id}})","1566717687":"We also provide a guide on the Tutorial tab to show you how you can build and execute a simple strategy.","1567745852":"Bot name","1569527365":"Verification failed. Resubmit your details.","1569624004":"Dismiss alert","1570484627":"Ticks list","1570495551":"For exit spot, the latest asset price when the trade closure is processed by our servers.","1571575776":"Accepted formats: pdf, jpeg, jpg, and png. Max file size: 8MB","1572504270":"Rounding operation","1572982976":"Server","1573429525":"Call/Put","1575556189":"Tether on the Ethereum blockchain, as an ERC20 token, is a newer transport layer, which now makes Tether available in Ethereum smart contracts. As a standard ERC20 token, it can also be sent to any Ethereum address.","1577480486":"Your mobile link will expire in one hour","1577527507":"Account opening reason is required.","1577612026":"Select a folder","1580498808":"Multiple faces found","1584109614":"Ticks String List","1584936297":"XML file contains unsupported elements. Please check or modify file.","1587046102":"Documents from that country are not currently supported — try another document type","1589148299":"Start","1589640950":"Resale of this contract is not offered.","1589702653":"Proof of address","1589863913":"These are the trade parameters used for D’Alembert strategy in Deriv Bot.","1590400723":"Total assets in all your accounts","1591933071":"Resubmit document","1593010588":"Login now","1594147169":"Please come back in","1594322503":"Sell is available","1595295238":"3. Use a logic block to check if Total profit/loss is more than the Stop loss threshold amount. You can find the Total profit/loss variable under Analysis > Stats on the Blocks menu on the left. Your bot will continue to purchase new contracts until the Total profit/loss amount exceeds the Stop loss threshold amount.","1597672660":"Deriv MT5 Password","1598009247":"<0>a.You may file a complaint with the Financial Commission up to 45 days after the incident.","1598386296":"Town/City is required.","1598443642":"Transaction hash","1598789539":"Here are some common card/e-wallet errors and their solutions:","1599743312":"An example of Reverse Martingale strategy","1602894348":"Create a password","1604916224":"Absolute","1605222432":"I have no knowledge and experience in trading at all.","1605292429":"Max. total loss","1612105450":"Get substring","1612638396":"Cancel your trade at any time within a specified timeframe.","1615897837":"Signal EMA Period {{ input_number }}","1618652381":"For instance, if a trader has a loss threshold (B) is 1000 USD, with an initial stake (s) is 1 USD, and the Martingale multiplier (m) is 2, the calculation would be as follows:","1619070150":"You are being redirected to an external website.","1620278321":"Names and surnames by themselves are easy to guess","1620346110":"Set currency","1621024661":"Tether as a TRC20 token (tUSDT) is a version of Tether that is hosted on Tron.","1622662457":"Date from","1622944161":"Now, go to the <0>Restart trading conditions block.","1623706874":"Use this block when you want to use multipliers as your trade type.","1628981793":"Can I trade cryptocurrencies on Deriv Bot?","1630317389":"If you select “<0>No Touch”, you win the payout if the market never touches the barrier at any time during the contract period.","1630417358":"Please go to your account settings and complete your personal details to enable withdrawals.","1631281562":"GBP Basket","1633661992":"Tick {{current_tick}}/{{tick_count}}","1634016345":"2. If the trade is successful, this strategy will automatically adjust your stake to 3 units of your initial stake for the next trade. In this case, the stake adjustment is 3 units and the initial stake is 1 USD, hence the next trade will start at 3 USD.","1634594289":"Select language","1634903642":"Only your face can be in the selfie","1634969163":"Change currency","1635266650":"It seems that your name in the document is not the same as your Deriv profile. Please update your name in the <0>Personal details page to solve this issue.","1635628424":"An envelope with your name and address.","1636605481":"Platform settings","1636782601":"Multipliers","1638321777":"Your demo account balance is low. Reset your balance to continue trading from your demo account.","1639262461":"Pending withdrawal request:","1639304182":"Please click on the link in the email to reset your password.","1641395634":"Last digits list","1641635657":"New proof of identity document needed","1641980662":"Salutation is required.","1644636153":"Transaction hash: <0>{{value}}","1644703962":"Looking for CFD accounts? Go to Trader's Hub","1644864436":"You’ll need to authenticate your account before requesting to become a professional client. <0>Authenticate my account","1644908559":"Digit code is required.","1647186767":"The bot encountered an error while running.","1648938920":"Netherlands 25","1649239667":"2. Under the Blocks menu, you'll see a list of categories. Blocks are grouped within these categories. Choose the block you want and drag them to the workspace.","1650963565":"Introducing Wallets","1651513020":"Display remaining time for each interval","1651951220":"Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"","1652366857":"get and remove","1652968048":"Define your trade options such as multiplier and stake.","1652976865":"In this example, this block is used with another block to get the open prices from a list of candles. The open prices are then assigned to the variable called \"cl\".","1653136377":"copied!","1653180917":"We cannot verify you without using your camera","1653999225":"Forex: major/minor","1654365787":"Unknown","1654529197":"Purchase condition","1654721858":"Upload anyway","1655372864":"Your contract will expire on this date (in GMT), based on the end time you’ve selected.","1655627840":"UPPER CASE","1656155124":"Resend in <0 /> seconds","1658954996":"Plant and Machine Operators and Assemblers","1659074761":"Reset Put","1659327870":"How do I cancel my withdrawal?","1659352235":"Add your Deriv MT5 CFDs account under Deriv Investments (Europe) Limited, regulated by the Malta Financial Services Authority (MFSA) (licence no. IS/70156).","1661126218":"Expiry date:","1665272539":"Remember: You cannot log in to your account until the selected date.","1665718170":"The document must contain a letterhead.","1665738338":"Balance","1665756261":"Go to live chat","1668138872":"Modify account settings","1669062316":"The payout at expiry is equal to the payout per pip multiplied by the difference, <0>in pips, between the final price and the strike price.","1670016002":"Multiplier: {{ multiplier }}","1670426231":"End Time","1671232191":"You have set the following limits:","1675030608":"To create this account first we need you to resubmit your proof of address.","1676549796":"Dynamic Leverage","1677027187":"Forex","1679743486":"1. Go to Quick strategy and select the strategy you want.","1680666439":"Upload your bank statement showing your name, account number, and transaction history.","1681765749":"Martingale formula 2","1682409128":"Untitled Strategy","1682636566":"Resend email in","1682980639":"Error: ","1683383299":"Your contract is closed automatically when your profit is more than or equals to this amount. This block can only be used with the accumulator trade type.","1683963454":"Your contract will be closed automatically at the next available asset price on {{date}} at {{timestamp}}.","1684419981":"What's this?","1686800117":"{{error_msg}}","1689103988":"Second Since Epoch","1689258195":"We were unable to verify your address with the details you provided. Please check and resubmit or choose a different document type.","1690746575":"Enhance your trading experience by upgrading your <0>{{platform}} {{type_1}} <1/>and <0>{{type_2}} {{from_account}} account(s).","1691335819":"To continue trading with us, please confirm who you are.","1691536201":"If you choose your duration in number of ticks, you won’t be able to terminate your contract early.","1691765860":"- Negation","1692912479":"Deriv MT5, Deriv X","1693614409":"Start time","1694517345":"Enter a new email address","1694888104":"The products offered on our website are complex derivative products that carry a significant risk of potential loss. CFDs are complex instruments with a high risk of losing money rapidly due to leverage. 70.78% of retail investor accounts lose money when trading CFDs with this provider. You should consider whether you understand how these products work and whether you can afford to take the high risk of losing your money.","1696190747":"Trading inherently involves risks, and actual profits can fluctuate due to various factors, including market volatility and other unforeseen variables. As such, exercise caution and conduct thorough research before engaging in any trading activities.","1698624570":"2. Hit Ok to confirm.","1699606318":"You've reached the limit of uploading your documents.","1700233813":"Transfer from {{selected_value}} is not allowed, Please choose another account from dropdown","1701447705":"Please update your address","1702339739":"Common mistakes","1703091957":"We collect information about your employment as part of our due diligence obligations, as required by anti-money laundering legislation.","1703712522":"Your payout is equal to the payout per pip multiplied by the difference, <0>in pips, between the final price and the strike price.","1704656659":"How much experience do you have in CFD trading?","1707264798":"Why can't I see deposited funds in my Deriv account?","1707758392":"Step 100 Index","1708413635":"For your {{currency_name}} ({{currency}}) account","1709859601":"Exit Spot Time","1711013665":"Anticipated account turnover","1711016273":"<0>This may take up to 2 minutes. During this time, some services may be unavailable.","1711676335":"square root","1711929663":"Your funds have been transferred","1712357617":"Invalid email address.","1713633297":"3. If the second trade is also successful, your stake will adjust to 2 USD or 2 units of the initial stake for the next trade.","1714255392":"To enable withdrawals, please complete your financial assessment.","1715011380":"Jump 25 Index","1715630945":"Returns the total profit in string format","1715680813":"Your contract will expire at exactly 23:59:59 GMT +0 on your selected expiry date.","1717023554":"Resubmit documents","1717474982":"CFDs on financial and derived instruments via a customisable platform.","1720451994":"We’ll charge a 2% transfer fee or {{minimum_fee}} {{currency}}, whichever is higher, for transfers between your Deriv fiat and Deriv cryptocurrency accounts.","1720968545":"Upload passport photo page from your computer","1721295446":"Favorites","1722056905":"The document you provided is not supported for your country. Please provide a supported document for your country.","1722888575":"{{mt5_migration_error}}","1723390945":"Your demo {{deriv}} {{type}} account is ready.","1723589564":"Represents the maximum number of outstanding contracts in your portfolio. Each line in your portfolio counts for one open position. Once the maximum is reached, you will not be able to open new positions without closing an existing position first.","1724367774":"You can make a funds transfer once the verification of your account is complete.","1724696797":"You are limited to one fiat account only.","1725958461":"Account number","1726472773":"Function with no return value","1726565314":"Close my account","1728183781":"About Tether","1729145421":"Risk warning","1731747596":"The block(s) highlighted in red are missing input values. Please update them and click \"Run bot\".","1732891201":"Sell price","1733711201":"Regulators/external dispute resolution","1734185104":"Balance: %1","1734264460":"Disclaimer","1734521537":"The document you provided appears to be two different types. Please try again or provide another document.","1736292549":"Update postal code","1737352280":"Bot.init is not called","1738094481":"<0>Duration: Ticks 1","1738611950":"About Reverse Martingale","1738681493":"Remove your glasses, if necessary","1739086943":"Wall Street 30","1739384082":"Unemployed","1739668049":"Close your account","1740371444":"Underlying market is not selected","1741006997":"Yesterday","1742256256":"Please upload one of the following documents:","1743448290":"Payment agents","1743679873":"If you select <0>\"Call\", you’ll earn a <1>payout if the <1>final price is above the <1>strike price at <1>expiry. Otherwise, you won’t receive a payout.","1743902050":"Complete your financial assessment","1744509610":"Just drag the XML file from your computer onto the workspace, and your bot will be loaded accordingly. Alternatively, you can hit Import in Bot Builder, and choose to import your bot from your computer or from your Google Drive.","1745523557":"- Square root","1746051371":"Download the app","1746273643":"Moving Average Convergence Divergence","1747501260":"Sell conditions","1747652849":"If you select the take profit feature, your trade will be closed automatically at the nearest available asset price when your profit reaches or exceeds the take profit amount throughout the contract duration. Your profit may be more than the amount you entered depending on the market price at closing. You may change your take profit amount up to 15 seconds before expiry.","1747674345":"Please use `.` as a decimal separator for fractional numbers.","1747682136":"Contract was cancelled.","1748754976":"Run","1753082252":"This article explores the strategy integrated into Deriv Bot, a versatile trading bot designed to trade assets such as Forex, Commodities, and Derived Indices. We will delve into the strategy's core parameters, its application, and provide essential takeaways for traders looking to use the bot effectively.","1753183432":"We take all complaints seriously and aim to resolve them as quickly and fairly as possible. If you are unhappy with any aspect of our service, please let us know by submitting a complaint using the guidance below:","1753226544":"remove","1753975551":"Upload passport photo page","1754256229":"Each day, you can make up to {{ allowed_internal }} transfers between your Deriv accounts, up to {{ allowed_mt5 }} transfers between your Deriv and {{platform_name_mt5}} accounts, up to {{ allowed_ctrader }} transfers between your Deriv and {{platform_name_ctrader}} accounts, and up to {{ allowed_dxtrade }} transfers between your Deriv and {{platform_name_dxtrade}} accounts.","1756678453":"break out","1761038852":"Let’s continue with providing proofs of address and identity.","1761254001":"A number","1761762171":"Restart last trade on error (bot ignores the unsuccessful trade): {{ checkbox }}","1762707297":"Phone number","1763123662":"Upload your NIMC slip.","1766212789":"Server maintenance starts at 06:00 GMT every Sunday and may last up to 2 hours. You may experience service disruption during this time.","1766993323":"Only letters, numbers, and underscores are allowed.","1768293340":"Contract value","1768861315":"Minute","1768918213":"Only letters, space, hyphen, period, and apostrophe are allowed.","1769068935":"Choose any of these exchanges to buy cryptocurrencies:","1770041368":"Experience safer logins","1771037549":"Add a Deriv real account","1771592738":"Conditional block","1772396880":"The date of birth on your document doesn’t match your profile.","1777847421":"This is a very common password","1778893716":"Click here","1779144409":"Account verification required","1779519903":"Should be a valid number.","1779801832":"Please update your password accordingly.","1779872677":"Download e-book","1780442963":"Scan the QR code to download {{ platform }}.","1780770384":"This block gives you a random fraction between 0.0 to 1.0.","1782308283":"Quick strategy","1782395995":"Last Digit Prediction","1782690282":"Blocks menu","1782703044":"Sign up","1783526986":"How do I build a trading bot?","1783740125":"Upload your selfie","1785298924":"D’Alembert formula 1","1786644593":"Supported formats: JPEG, JPG, PNG, PDF, and GIF only","1787492950":"Indicators on the chart tab are for indicative purposes only and may vary slightly from the ones on the {{platform_name_dbot}} workspace.","1788515547":"<0/>For more information on submitting a complaint with the Office of the Arbiter for Financial Services, please <1>see their guidance.","1788966083":"01-07-1999","1789273878":"Payout per point","1789497185":"Make sure your passport details are clear to read, with no blur or glare","1791432284":"Search for country","1791926890":"If you select “<0>Higher”, you win the payout if the exit spot is strictly higher than the barrier.","1791971912":"Recent","1792037169":"To avoid delays, enter your <0>name and <0>date of birth exactly as they appear on your {{document_name}}.","1793913365":"To deposit money, please switch to your {{currency_symbol}} account.","1794815502":"Download your transaction history.","1796787905":"Please upload the following document(s).","1798943788":"You can only make deposits.","1801093206":"Get candle list","1801270786":"Ready to automate your trading strategy without writing any code? You’ve come to the right place.","1801927731":"{{platform_name_dxtrade}} accounts","1803338729":"Choose what type of contract you want to trade. For example, for the Rise/Fall trade type you can choose one of three options: Rise, Fall, or Both. Selected option will determine available options for the Purchase block.","1804620701":"Expiration","1804789128":"{{display_value}} Ticks","1806017862":"Max. ticks","1808058682":"Blocks are loaded successfully","1808867555":"This block uses the variable “i” to control the iterations. With each iteration, the value of “i” is determined by the items in a given list.","1810217569":"Please refresh this page to continue.","1811109068":"Jurisdiction","1811138041":"Enter a value from {{ value }} to 9.","1811343027":"2. Select your Martingale multiplier. In this example, it is 2.","1811972349":"Market","1811973475":"Returns a specific character from a given string","1812006199":"Identity verification","1812582011":"Connecting to server","1813700208":"Boom 300 Index","1815034361":"alphabetic","1815905959":"DTrader, DBot, SmartTrader, and Binary Bot","1815995250":"Buying contract","1817006592":"All trade types","1817154864":"This block gives you a random number from within a set range.","1820242322":"e.g. United States","1820332333":"Top up","1821818748":"Enter Driver License Reference number","1823177196":"Most popular","1824193700":"This block gives you the last digit of the latest tick value.","1824292864":"Call","1827607208":"File not uploaded.","1828370654":"Onboarding","1828856382":"If you select “<0>Differs”, you will win the payout if the last digit of the last tick is not the same as your prediction.","1830520348":"{{platform_name_dxtrade}} Password","1831847842":"I confirm that the name and date of birth above match my chosen identity document (see below)","1833499833":"Proof of identity documents upload failed","1836767074":"Search payment agent name","1837533589":"Stop Loss","1837762008":"Please submit your proof of identity and proof of address to verify your account in your account settings to access the cashier.","1839021527":"Please enter a valid account number. Example: CR123456789","1840721160":"Deriv MT5 latest password requirements","1840865068":"set {{ variable }} to Simple Moving Average Array {{ dummy }}","1841788070":"Palladium/USD","1841996888":"Daily loss limit","1842266423":"back","1843336754":"Select document","1843658716":"If you select \"Only Downs\", you win the payout if consecutive ticks fall successively after the entry spot. No payout if any tick rises or is equal to any of the previous ticks.","1843774866":"Starting","1845598565":"The second session concludes upon reaching the aim of one unit of potential profit per session, equivalent to 1 USD. If trading continues, a new session will commence again.","1845892898":"(min: {{min_stake}} - max: {{max_payout}})","1846266243":"This feature is not available for demo accounts.","1846587187":"You have not selected your country of residence","1846588117":"Your contract will be closed automatically when your loss reaches {{stop_out_percentage}}% of your stake.","1849484058":"Any unsaved changes will be lost.","1850031313":"- Low: the lowest price","1850132581":"Country not found","1850659345":"- Payout: the payout of the contract","1851052337":"Place of birth is required.","1851776924":"upper","1854480511":"Cashier is locked","1854874899":"Back to list","1854909245":"Multiplier:","1855566768":"List item position","1856485118":"Please <0>resubmit your proof of address to transfer funds between MT5 and Deriv accounts.","1856755117":"Pending action required","1858251701":"minute","1859308030":"Give feedback","1863053247":"Please upload your identity document.","1863731653":"To receive your funds, contact the payment agent","1865525612":"No recent transactions.","1866244589":"The entry spot is the first tick for High/Low Ticks.","1866811212":"Deposit in your local currency via an authorised, independent payment agent in your country.","1867217564":"Index must be a positive integer","1867783237":"High-to-Close","1869315006":"See how we protect your funds to unlock the cashier.","1869486036":"You receive a <0>payout at <0>expiry if the spot price never touches or breaches the <0>barrier during the contract period. If it does, your contract will be terminated early.","1869787212":"Even","1870933427":"Crypto","1871196637":"True if the result of the last trade matches the selection","1871377550":"Do you offer pre-built trading bots on Deriv Bot?","1871664426":"Note","1873376454":"This is a price level that you choose. If this barrier is ever crossed, your contract would be terminated.","1874481756":"Use this block to purchase the specific contract you want. You may add multiple Purchase blocks together with conditional blocks to define your purchase conditions. This block can only be used within the Purchase conditions block.","1874737957":"To trade multipliers, get a Deriv Apps account first.","1874756442":"BVI","1875090343":"Choose a date range","1875702561":"Load or build your bot","1876015808":"Social Security and National Insurance Trust","1876325183":"Minutes","1876333357":"Tax Identification Number is invalid.","1877225775":"Your proof of address is verified","1877832150":"# from end","1878172674":"No, we don't. However, you'll find quick strategies on Deriv Bot that'll help you build your own trading bot for free.","1878189977":"The Martingale strategy involves increasing your stake after each loss to recoup prior losses with a single successful trade.","1879042430":"Appropriateness Test, WARNING:","1879412976":"Profit amount: <0>{{profit}}","1879651964":"<0>Pending verification","1880029566":"Australian Dollar","1880097605":"prompt for {{ string_or_number }} with message {{ input_text }}","1880227067":"Submit passport photo pages","1880377568":"An example of D’Alembert strategy","1880875522":"Create \"get %1\"","1881018702":"hour","1881380263":"Total assets in your account.","1881587673":"Total stake since you last cleared your stats.","1882825238":"Restart trading conditions","1883531976":"Clerks","1885708031":"#","1887257727":"R is the number of rounds a trader can sustain given a specific loss threshold.","1887925280":"The document must be recent and include your name and address:","1889357660":"Enter a value in minutes, up to 60480 minutes (equivalent to 6 weeks).","1890171328":"By clicking Accept below and proceeding with the Account Opening you should note that you may be exposing yourself to risks (which may be significant, including the risk of loss of the entire sum invested) that you may not have the knowledge and experience to properly assess or mitigate.","1890332321":"Returns the number of characters of a given string of text, including numbers, spaces, punctuation marks, and symbols.","1893869876":"(lots)","1894667135":"Please verify your proof of address","1896269665":"CFDs on derived and financial instruments.","1899898605":"Maximum size: 8MB","1902547203":"MetaTrader 5 MacOS app","1903437648":"Blurry photo detected","1904665809":"The Reverse Martingale strategy in trading may offer substantial gains but also comes with significant risks. With your selected strategy, Deriv Bot provides automated trading with risk management measures like setting initial stake, stake size, maximum stake, profit threshold and loss threshold. It's crucial for traders to assess their risk tolerance, practice in a demo account, and understand the strategy before trading with real money.","1905032541":"We're now ready to verify your identity","1905589481":"If you want to change your account currency, please contact us via <0>live chat.","1906213000":"Our system will finish any Deriv Bot trades that are running, and Deriv Bot will not place any new trades.","1906639368":"If this is the first time you try to create a password, or you have forgotten your password, please reset it.","1907423697":"Earn more with Deriv API","1907499654":"Deriv App","1907899646":"Take profit can't be adjusted for ongoing accumulator contracts.","1908023954":"Sorry, an error occurred while processing your request.","1908239019":"Make sure all of the document is in the photo","1908686066":"Appropriateness Test Warning","1909647105":"TRX/USD","1909769048":"median","1910533633":"Get a real account to deposit money and start trading.","1913777654":"Switch account","1914014145":"Today","1914270645":"Default Candle Interval: {{ candle_interval_type }}","1914725623":"Upload the page that contains your photo.","1916129921":"Reverse Martingale","1917178459":"Bank Verification Number","1917523456":"This block sends a message to a Telegram channel. You will need to create your own Telegram bot to use this block.","1918796823":"Please enter a stop loss amount.","1918832194":"No experience","1919030163":"Tips to take a good selfie","1919296368":"2. Select your unit. In this example, it is 2 units or 2 USD.","1919594496":"{{website_name}} is not affiliated with any payment agents. Customers deal with payment agents at their sole risk. Customers are advised to check the credentials of payment agents and the accuracy of any information about payment agents (on {{website_name}} or elsewhere) before using their services.","1919694313":"To start trading, transfer funds from your Deriv account into this account.","1920217537":"Compare","1920468180":"How to use the SMA block","1921914669":"Deposit with Deriv P2P","1922529883":"Boom 1000 Index","1922955556":"Use a longer keyboard pattern with more turns","1924365090":"Maybe later","1924765698":"Place of birth*","1928930389":"GBP/NOK","1929694162":"Compare accounts","1930899934":"Tether","1931659123":"Run on every tick","1931884033":"It seems that your date of birth in the document is not the same as your Deriv profile. Please update your date of birth in the <0>Personal details page to solve this issue.","1934450653":"For <0>Contract type, set it to Both.","1938327673":"Deriv {{platform}} <0>{{is_demo}}","1939014728":"How do I remove blocks from the workspace?","1939902659":"Signal","1940408545":"Delete this token","1941915555":"Try later","1943440862":"Calculates Bollinger Bands (BB) list from a list with a period","1944204227":"This block returns current account balance.","1947527527":"1. This link was sent by you","1948092185":"GBP/CAD","1949719666":"Here are the possible reasons:","1950413928":"Submit identity documents","1955219734":"Town/City*","1957759876":"Upload identity document","1958788790":"This is the amount you’ll receive at expiry for every point of change in the underlying price, if the spot price never touches or breaches the barrier throughout the contract duration.","1958807602":"4. 'Table' takes an array of data, such as a list of candles, and displays it in a table format.","1959678342":"Highs & Lows","1960240336":"first letter","1964165648":"Connection lost","1965916759":"Asian options settle by comparing the last tick with the average spot over the period.","1966023998":"2FA enabled","1966281100":"Console {{ message_type }} value: {{ input_message }}","1966855430":"Account already exists","1968025770":"Bitcoin Cash","1968077724":"Agriculture","1968368585":"Employment status","1970060713":"You’ve successfully deleted a bot.","1971898712":"Add or manage account","1973536221":"You have no open positions yet.","1973910243":"Manage your accounts","1974273865":"This scope will allow third-party apps to view your account activity, settings, limits, balance sheets, trade purchase history, and more.","1978218112":"Google Authenticator","1981940238":"This complaints policy, which may change from time to time, applies to your account(s) registered with {{legal_entity_name_svg}} and {{legal_entity_name_v}}.","1982790875":"Upgrade your <0/><1>{{account_title}} {{platform}} account(s)","1982796981":"Declarations","1982912252":"Relative Strength Index (RSI) from a list with a period","1983001416":"Define your trade options such as multiplier and stake. This block can only be used with the multipliers trade type. If you select another trade type, this block will be replaced with the Trade options block.","1983358602":"This policy, which may change from time to time, applies to your account registered with {{legal_entity_name}}.","1983387308":"Preview","1983480826":"Sign in","1983544897":"P.O. Box is not accepted in address","1983676099":"Please check your email for details.","1984700244":"Request an input","1984742793":"Uploading documents","1985366224":"Each day, you can make up to {{ allowed_internal }} transfers between your Deriv accounts and up to {{ allowed_mt5 }} transfers between your Deriv and {{platform_name_mt5}} accounts.","1985637974":"Any blocks placed within this block will be executed at every tick. If the default candle interval is set to 1 minute in the Trade Parameters root block, the instructions in this block will be executed once every minute. Place this block outside of any root block.","1986322868":"When your loss reaches or exceeds this amount, your trade will be closed automatically.","1986498784":"BTC/LTC","1987080350":"Demo","1987447369":"Your cashier is locked","1988153223":"Email address","1988302483":"Take profit:","1990331072":"Proof of ownership","1990735316":"Rise Equals","1991055223":"View the market price of your favourite assets.","1991448657":"Don't know your tax identification number? Click <0>here to learn more.","1991524207":"Jump 100 Index","1994023526":"The email address you entered had a mistake or typo (happens to the best of us).","1994558521":"The platforms aren’t user-friendly.","1994600896":"This block requires a list of candles as an input parameter.","1995023783":"First line of address*","1996767628":"Please confirm your tax information.","1997138507":"If the last tick is equal to the average of the ticks, you don't win the payout.","1997313835":"Your stake will continue to grow as long as the current spot price remains within a specified <0>range from the <0>previous spot price. Otherwise, you lose your stake and the trade is terminated.","1999213036":"Enhanced security is just a tap away.","1999346412":"For faster verification, input the same address here as in your proof of address document (see section below)","2001222130":"Check your spam or junk folder. If it's not there, try resending the email.","2001361785":"1. Start with the initial stake. Let’s say 1 USD.","2001717886":"Demo Standard","2004052487":"Estimating the lifespan of your trades","2007028410":"market, trade type, contract type","2010759971":"Uploads successful","2010866561":"Returns the total profit/loss","2011609940":"Please input number greater than 0","2011808755":"Purchase Time","2012139674":"Android: Google password manager.","2014536501":"Card number","2014590669":"Variable '{{variable_name}}' has no value. Please set a value for variable '{{variable_name}}' to notify.","2015878683":"Need help? Contact us via <0>live chat","2017672013":"Please select the country of document issuance.","2018044371":"Multipliers let you trade with leverage and limit your risk to your stake. <0>Learn more","2019596693":"The document was rejected by the Provider.","2020545256":"Close your account?","2021037737":"Please update your details to continue.","2023546580":"Your account will be available for trading once the verification of your account is complete.","2023659183":"Student","2023762268":"I prefer another trading website.","2025339348":"Move away from direct light — no glare","2027441253":"Why do we collect this?","2027625329":"Simple Moving Average Array (SMAA)","2027638150":"Upgrade","2027696535":"Tax information","2028163119":"EOS/USD","2029237955":"Labuan","2030018735":"RSI is a technical analysis tool that helps you identify the market trend. It will give you a value from 0 to 100. An RSI value of 70 and above means that the asset is overbought and the current trend may reverse, while a value of 30 and below means that the asset is oversold.","2030045667":"Message","2033648953":"This block gives you the specified candle value for a selected time interval.","2034803607":"You must be 18 years old and above.","2035258293":"Start trading with us","2035925727":"sort {{ sort_type }} {{ sort_direction }} {{ input_list }}","2036578466":"Should be {{value}}","2037906477":"get sub-list from #","2038562422":"TIN is required.","2039198937":"Maximum stake: The maximum amount you are willing to pay to enter a single trade. The stake for your next trade will reset to the initial stake if it exceeds this value. This is an optional risk management parameter.","2042023623":"We’re reviewing your documents. This should take about 5 minutes.","2042050260":"- Purchase price: the purchase price (stake) of the contract","2042115724":"Upload a screenshot of your account and personal details page with your name, account number, phone number, and email address.","2044086432":"The close is the latest tick at or before the end time. If you selected a specific end time, the end time is the selected time.","2046273837":"Last tick","2046577663":"Import or choose your bot","2048110615":"Email address*","2048134463":"File size exceeded.","2049386104":"We need you to submit these in order to get this account:","2050170533":"Tick list","2051249190":"Add funds and start trading","2051558666":"View transaction history","2051596653":"Demo Zero Spread BVI","2052022586":"To enhance your MT5 account security we have upgraded our password policy.","2054889300":"Create \"%1\"","2055317803":"Copy the link to your mobile browser","2056369950":"<0>To complete your Wallet setup, log out and then log in again.","2056526458":"Get real account","2057082550":"Accept our updated <0>terms and conditions","2057419639":"Exit Spot","2059365224":"Yes, you can get started with a pre-built bot using the Quick strategy feature. You’ll find some of the most popular trading strategies here: Martingale, D'Alembert, and Oscar's Grind. Just select the strategy, enter your trade parameters, and your bot will be created for you. You can always tweak the parameters later.","2059753381":"Why did my verification fail?","2060873863":"Your order {{order_id}} is complete","2062912059":"function {{ function_name }} {{ function_params }}","2063812316":"Text Statement","2063890788":"Cancelled","2066978677":"{{formatted_opening_time}} (GMT) on {{opening_day}},<0 /> {{opening_date}}.","2067903936":"Driving licence","2070002739":"Don’t accept","2070345146":"When opening a leveraged CFD trade.","2070518923":"Import your bot or tap Quick Strategies to choose from the ready-to-use bot templates.","2070752475":"Regulatory Information","2070858497":"Your document appears to be a screenshot.","2071043849":"Browse","2074207096":"How to create a passkey?","2074235904":"Last name is required.","2074497711":"The Telegram notification could not be sent","2074713563":"4.2. Submission of a complaint","2079925695":"Unit: The number of units that are added in the event of a trade resulting in loss or the number of units removed in the event of a trade resulting in profit. For example, if the unit is set at 2, the stake increases or decreases by two times the initial stake of 1 USD, meaning it changes by 2 USD.","2080553498":"3. Get the chat ID using the Telegram REST API (read more: https://core.telegram.org/bots/api#getupdates)","2080829530":"Sold for: {{sold_for}}","2081622549":"Must be a number higher than {{ min }}","2082533832":"Yes, delete","2084693624":"Converts a string representing a date/time string into seconds since Epoch. Example: 2019-01-01 21:03:45 GMT+0800 will be converted to 1546347825. Time and time zone offset are optional.","2085387371":"Must be numbers, letters, and special characters . , ' -","2085602195":"- Entry value: the value of the first tick of the contract","2086048243":"Certificate of incorporation","2086383634":"You are adding your {{platform}} {{product}} account under {{company}}, regulated by the British Virgin Islands Financial Services Commission (licence no. SIBA/L/18/1114).","2086792088":"Both barriers should be relative or absolute","2088344208":"Forex (standard), stock indices, commodities, cryptocurrencies, stocks, ETFs, synthetic indices, basket indices and derived FX","2088735355":"Your session and login limits","2089087110":"Basket indices","2089395053":"Unit","2089581483":"Expires on","2090650973":"The spot price may change by the time your order reaches our servers. When this happens, your payout may be affected.","2091671594":"Status","2093675079":"- Close: the closing price","2096014107":"Apply","2096456845":"Date of birth*","2097170986":"About Tether (Omni)","2097381850":"Calculates Simple Moving Average line from a list with a period","2097815211":"Number of rounds (R) = 10","2097932389":"Upload 2 separate screenshots from the personal details page and the account page via <0>https://app.astropay.com/profile","2100713124":"account","2100912278":"4. If a trade ends in a loss, the stake for the following trade will be reset to the initial stake amount of 1 USD.","2101265432":"Something went wrong","2101972779":"This is the same as the above example, using a tick list.","2102572780":"Length of digit code must be 6 characters.","2104115663":"Last login","2104364680":"Please switch to your demo account to run your Deriv Bot.","2104397115":"Please go to your account settings and complete your personal details to enable deposits and withdrawals.","2107381257":"Scheduled cashier system maintenance","2107882050":"The back of your document appears to be missing. Please include both sides of your identity document.","2110365168":"Maximum number of trades reached","2111015970":"This block helps you check if your contract can be sold. If your contract can be sold, it returns “True”. Otherwise, it returns an empty string.","2111528352":"Creating a variable","2112119013":"Take a selfie showing your face","2112175277":"with delimiter","2113321581":"Add a Deriv Gaming account","2114766645":"Some trade types are unavailable for {{symbol}}.","2115223095":"Loss","2117165122":"1. Create a Telegram bot and get your Telegram API token. Read more on how to create bots in Telegram here: https://core.telegram.org/bots#6-botfather","2117489390":"Auto update in {{ remaining }} seconds","2118292085":"<0>Note: You’ll receive an email when your deposit starts being processed.","2119449126":"Example output of the below example will be:","2119710534":"FAQ","2121227568":"NEO/USD","2122152120":"Assets","2127564856":"Withdrawals are locked","2128919448":"We’ll offer to buy your contract at this price should you choose to sell it before its expiry. This is based on several factors, such as the current spot price. We won’t offer a contract value if the remaining duration is below 15 seconds or if the contract duration is in ticks.","2129807378":"Update profile","2133075559":"This means after 10 rounds of consecutive losses, this trader will lose 100 USD. This reaches the loss threshold of 100 USD, stopping the bot.","2133451414":"Duration","2133470627":"This block returns the potential payout for the selected trade type. This block can be used only in the \"Purchase conditions\" root block.","2135563258":"Forex trading frequency","2136246996":"Selfie uploaded","2136480755":"Some details in your document appear to be invalid, missing, or unclear.","2137645254":"If you select “<0>Call”, you’ll earn a <1>payout if the <2>final price is above the <3>strike price at <4>expiry. Otherwise, you won’t receive a payout.","2137901996":"This will clear all data in the summary, transactions, and journal panels. All counters will be reset to zero.","2137993569":"This block compares two values and is used to build a conditional structure.","2138861911":"Scans and photocopies are not accepted","2139171480":"Reset Up/Reset Down","2139362660":"left side","2141055709":"New {{type}} password","2143803283":"Purchase Error","2144609616":"If you select \"Reset-Down”, you win the payout if the exit spot is strictly lower than either the entry spot or the spot at reset time.","2145690912":"Income Earning","2145995536":"Create new account","2146336100":"in text %1 get %2","2146698770":"Pro tip: You can also click and drag out the desired block","2146751355":"We use current-tick-execution mechanism, which is the latest asset price when the trade opening is processed by our servers for Volatility Index, Basket Indices, Jump Indices and Crash/Boom Indices.","2146892766":"Binary options trading experience","2147244655":"How do I import my own trading bot into Deriv Bot?","-931052769":"Submit verification","-1004605898":"Tips","-1938142055":"Documents uploaded","-448090287":"The link only works on mobile devices","-1244287721":"Something's gone wrong","-241258681":"You'll need to restart your verification on your computer","-929254273":"Get secure link","-2021867851":"Check back here to finish the submission","-1547069149":"Open the link and complete the tasks","-1767652006":"Here's how to do it:","-277611959":"You can now return to your computer to continue","-724178625":"Make sure full document is visible","-1519380038":"Glare detected","-1895280620":"Make sure your card details are clear to read, with no blur or glare","-1464447919":"Make sure your permit details are clear to read, with no blur or glare","-1436160506":"Make sure details are clear to read, with no blur or glare","-759124288":"Close","-759118956":"Redo","-753375398":"Enlarge image","-1042933881":"Driver's license","-1503134764":"Face photo page","-1335343167":"Sorry, no mobile phone bills","-699045522":"Documents you can use to verify your identity","-543666102":"It must be an official photo ID","-903877217":"These are the documents most likely to show your current home address","-1356835948":"Choose document","-1364375936":"Select a %{country} document","-401586196":"or upload photo – no scans or photocopies","-3110517":"Take a photo with your phone","-2033894027":"Submit identity card (back)","-20684738":"Submit license (back)","-1359585500":"Submit license (front)","-106779602":"Submit residence permit (back)","-1287247476":"Submit residence permit (front)","-1954762444":"Restart the process on the latest version of Safari","-261174676":"Must be under 10MB.","-685885589":"An error occurred while loading the component","-502539866":"Your face is needed in the selfie","-1377968356":"Please try again","-1226547734":"Try using a JPG or PNG file","-849068301":"Loading...","-1730346712":"Loading","-1849371752":"Check that your number is correct","-309848900":"Copy","-1424436001":"Send link","-1093833557":"How to scan a QR code","-1408210605":"Point your phone’s camera at the QR code","-1773802163":"If it doesn’t work, download a QR code scanner from Google Play or the App Store","-109026565":"Scan QR code","-1644436882":"Get link via SMS","-1667839246":"Enter mobile number","-1533172567":"Enter your mobile number:","-1352094380":"Send this one-time link to your phone","-28974899":"Get your secure link","-359315319":"Continue","-826420669":"Make sure","-1279080293":"2. Your desktop window stays open","-102776692":"Continue with the verification","-89152891":"Take a photo of the back of your card","-1646367396":"Take a photo of the front of your card","-1350855047":"Take a photo of the front of your license","-2119367889":"Take a photo using the basic camera mode instead","-342915396":"Take a photo","-419040068":"Passport photo page","-1354983065":"Refresh","-1925063334":"Recover camera access to continue face verification","-54784207":"Camera access is denied","-1392699864":"Allow camera access","-269477401":"Provide the whole document page for best results","-864639753":"Upload back of card from your computer","-1309771027":"Upload front of license from your computer","-1722060225":"Take photo","-565732905":"Selfie","-1703181240":"Check that it is connected and functional. You can also continue verification on your phone","-2043114239":"Camera not working?","-2029238500":"It may be disconnected. Try using your phone instead.","-468928206":"Make sure your device's camera works","-466246199":"Camera not working","-698978129":"Remember to press stop when you're done. Redo video actions","-538456609":"Looks like you took too long","-781816433":"Photo of your face","-1471336265":"Make sure your selfie clearly shows your face","-1375068556":"Check selfie","-1914530170":"Face forward and make sure your eyes are clearly visible","-776541617":"We'll compare it with your document","-478752991":"Your link will expire in one hour","-1859729380":"Keep this window open while using your mobile","-1283761937":"Resend link","-629011256":"Don't refresh this page","-1005231905":"Once you've finished we'll take you to the next step","-542134805":"Upload photo","-1462975230":"Document example","-1472844935":"The photo should clearly show your document","-1120954663":"First name*","-1659980292":"First name","-962979523":"Your {{ field_name }} as in your identity document","-1416797980":"Please enter your {{ field_name }} as in your official identity documents.","-1466268810":"Please remember that it is your responsibility to keep your answers accurate and up to date. You can update your personal details at any time in your <0>account settings.","-32386760":"Name","-766265812":"first name","-1857534296":"John","-1282749116":"last name","-1485480657":"Other details","-1784741577":"date of birth","-1702919018":"Second line of address (optional)","-1315410953":"State/Province","-2040322967":"Citizenship","-344715612":"Employment status*","-1543016582":"I hereby confirm that the tax information I provided is true and complete. I will also inform {{legal_entity_name}} about any changes to this information.","-946282997":"Additional information","-1315571766":"Place of birth","-789291456":"Tax residence*","-1692219415":"Tax residence","-1903720068":"The country in which you meet the criteria for paying taxes. Usually the country in which you physically reside.","-651516152":"Tax Identification Number","-1387062433":"Account opening reason","-222283483":"Account opening reason*","-307865807":"Risk Tolerance Warning","-690100729":"Yes, I understand the risk.","-2010628430":"CFDs and other financial instruments come with a high risk of losing money rapidly due to leverage. You should consider whether you understand how CFDs and other financial instruments work and whether you can afford to take the high risk of losing your money. <0/><0/> To continue, you must confirm that you understand your capital is at risk.","-863770104":"Please note that by clicking ‘OK’, you may be exposing yourself to risks. You may not have the knowledge or experience to properly assess or mitigate these risks, which may be significant, including the risk of losing the entire sum you have invested.","-684271315":"OK","-1292808093":"Trading Experience","-153346659":"Upload your selfie.","-602131304":"Passport number","-1051213440":"Upload the front and back of your identity card.","-1600807543":"First, enter your identity card number and the expiry date.","-1139923664":"Next, upload the front and back of your identity card.","-783705755":"Upload the front of your identity card.","-566750665":"NIMC slip and proof of age","-1465944279":"NIMC slip number","-429612996":"Next, upload both of the following documents.","-376981174":"Upload your proof of age: birth certificate or age declaration document.","-612174191":"First line of address is required","-242734402":"Only {{max}} characters, please.","-378415317":"State is required","-1784470716":"State is not in a proper format","-1699820408":"Please enter a {{field_name}} under {{max_number}} characters.","-1575567374":"postal/ZIP code","-816263501":"Only letters, numbers, space and hyphen are allowed.","-755626951":"Complete your address details","-1024240099":"Address","-1534917661":"Select your preferred currency","-1027595143":"Less than $25,000","-40491332":"$25,000 - $50,000","-1139806939":"$50,001 - $100,000","-996132458":"Construction","-915003867":"Health","-1430012453":"Information & Communications Technology","-987824916":"Science & Engineering","-146630682":"Social & Cultural","-761306973":"Manufacturing","-1631552645":"Professionals","-474864470":"Personal Care, Sales and Service Workers","-1129355784":"Agricultural, Forestry and Fishery Workers","-1242914994":"Craft, Metal, Electrical and Electronics Workers","-1317824715":"Cleaners and Helpers","-1592729751":"Mining, Construction, Manufacturing and Transport Workers","-1030759620":"Government Officers","-2137323480":"Company Ownership","-1590574533":"Divorce Settlement","-1667683002":"Inheritance","-1237843731":"Investment Income","-777506574":"Sale of Property","-654781670":"Primary","-1717373258":"Secondary","-1156937070":"$500,001 - $1,000,000","-315534569":"Over $1,000,000","-2068544539":"Salaried Employee","-531314998":"Investments & Dividends","-1235114522":"Pension","-1298056749":"State Benefits","-449943381":"Savings & Inheritance","-477761028":"Voter ID","-1466346630":"CPF","-1161338910":"First name is required.","-1629185446":"Enter no more than 50 characters.","-1281693513":"Date of birth is required.","-26599672":"Citizenship is required","-912174487":"Phone is required.","-673765468":"Letters, numbers, spaces, periods, hyphens and forward slashes only.","-212167954":"Tax Identification Number is not properly formatted.","-1823540512":"Personal details","-1227878799":"Speculative","-1174064217":"Mr","-855506127":"Ms","-204765990":"Terms of use","-739367071":"Employed","-626752657":"0-1 year","-532014689":"1-2 years","-1001024004":"Over 3 years","-790513277":"6-10 transactions in the past 12 months","-580085300":"11-39 transactions in the past 12 months","-1116008222":"You should enter 9-35 numbers.","-1995979930":"First line of address is required.","-703454156":"Please enter a Postal/ZIP code under 20 characters.","-2113555886":"Only letters, numbers, space, and hyphen are allowed.","-1103497546":"Tax return","-700600899":"Business proof of address","-1073862586":"Memorandum","-1823328095":"Authorization letter","-397487797":"Enter your full card number","-1376950117":"That file format isn't supported. Please upload .pdf, .png, .jpg, or .jpeg files only.","-612752984":"These are default limits that we apply to your accounts.","-1498206510":"Account limits","-1411635770":"Learn more about account limits","-1340125291":"Done","-1101543580":"Limit","-858297154":"Represents the maximum amount of cash that you may hold in your account. If the maximum is reached, you will be asked to withdraw funds.","-976258774":"Not set","-1182362640":"Represents the maximum aggregate payouts on outstanding contracts in your portfolio. If the maximum is attained, you may not purchase additional contracts without first closing out existing positions.","-1781293089":"Maximum aggregate payouts on open positions","-1412690135":"*Any limits in your Self-exclusion settings will override these default limits.","-1598751496":"Represents the maximum volume of contracts that you may purchase in any given trading day.","-173346300":"Maximum daily turnover","-138380129":"Total withdrawal allowed","-1502578110":"Your account is fully authenticated and your withdrawal limits have been lifted.","-506122621":"Please take a moment to update your information now.","-1106259572":"Don't know your tax identification number? <1 />Click <0>here to learn more.","-252665911":"Place of birth{{required}}","-859814496":"Tax residence{{required}}","-237940902":"Tax Identification number{{required}}","-919191810":"Please fill in tax residence.","-270569590":"Intended use of account{{required}}","-2120290581":"Intended use of account is required.","-594456225":"Second line of address","-1964954030":"Postal/ZIP Code","-1541554430":"Next","-71696502":"Previous","-516397235":"Be careful who you share this token with. Anyone with this token can perform the following actions on your account behalf","-989216986":"Add accounts","-617480265":"Delete token","-316749685":"Are you sure you want to delete this token?","-955038366":"Copy this token","-1668692965":"Hide this token","-1661284324":"Show this token","-1076138910":"Trade","-1666909852":"Payments","-488597603":"Trading information","-605778668":"Never","-1628008897":"Token","-1238499897":"Last Used","-2087317410":"Oops, something went wrong.","-184202848":"Upload file","-863586176":"Drag and drop a file or click to browse your files.","-370334393":"Click here to browse your files.","-723198394":"File size should be 8MB or less","-1948369500":"File uploaded is not supported","-1040865880":"Drop files here..","-1100235269":"Industry of employment","-684388823":"Estimated net worth","-509054266":"Anticipated annual turnover","-1117345066":"Choose the document type","-1634507018":"Enter your {{document_name}}","-1237846864":"Verify again","-39187636":"{{index}}.","-337620257":"Switch to real account","-2120454054":"Add a real account","-38915613":"Unsaved changes","-2137450250":"You have unsaved changes. Are you sure you want to discard changes and leave this page?","-1067082004":"Leave Settings","-1113902570":"Details","-2142540205":"It appears that the address in your document doesn’t match the address in your Deriv profile. Please update your personal details now with the correct address.","-1451334536":"Continue trading","-251603364":"Your document for proof of address is expired. <0/>Please submit again.","-1425489838":"Proof of address verification not required","-1008641170":"Your account does not need address verification at this time. We will inform you if address verification is required in the future.","-60204971":"We could not verify your proof of address","-1944264183":"To continue trading, you must also submit a proof of identity.","-1088324715":"We’ll review your documents and notify you of its status within 1 - 3 working days.","-329713179":"Ok","-2145244263":"This field is required","-1500958859":"Verify","-839094775":"Back","-1813671961":"Your identity verification failed because:","-2097808873":"We were unable to verify your ID with the details you provided. ","-1652371224":"Your profile is updated","-504784172":"Your document has been submitted","-1391934478":"Your ID is verified. You will also need to submit proof of your address.","-118547687":"ID verification passed","-200989771":"Go to personal details","-1358357943":"Please check and update your postal code before submitting proof of identity.","-1401994581":"Your personal details are missing","-2004327866":"Please select a valid country of document issuance.","-1664159494":"Country","-1044962593":"Upload Document","-749870311":"Please contact us via <0>live chat.","-1084991359":"Proof of identity verification not required","-1981334109":"Your account does not need identity verification at this time. We will inform you if identity verification is required in the future.","-182918740":"Your proof of identity submission failed because:","-155705811":"A clear colour photo or scanned image","-246893488":"JPEG, JPG, PNG, PDF, or GIF","-1454880310":"Must be valid for at least 6 months","-1949501500":"First, enter your {{label}}.","-100534371":"Before uploading, please ensure that you’re facing forward in the selfie, your face is within the frame, and your eyes are clearly visible even if you’re wearing glasses.","-1529523673":"Confirm and upload","-705047643":"Sorry, an error occured. Please select another file.","-1664309884":"Tap here to upload","-1725454783":"Failed","-841187054":"Try Again","-856213726":"You must also submit a proof of address.","-552371330":"We were unable to verify your income. <0 /> Please check the email we've sent you for further information.","-978467455":"Limit reached","-361316523":"You have reached the maximum number of allowed attempts for submitting proof of income. <0 /> Please check the email we've sent you for further information.","-1785967427":"We'll review your documents and notify you of its status within 7 working days.","-987011273":"Your proof of ownership isn't required.","-808299796":"You are not required to submit proof of ownership at this time. We will inform you if proof of ownership is required in the future.","-179726573":"We’ve received your proof of ownership.","-813779897":"Proof of ownership verification passed.","-1389323399":"You should enter {{min_number}}-{{max_number}} characters.","-47815161":"Please include at least 1 special character such as ( _ @ ? ! / # ) in your password.","-1313806160":"Please request a new password and check your email for the new token.","-1598167506":"Success","-1077809489":"You have a new {{platform}} password to log in to your {{platform}} accounts on the web and mobile apps.","-2068479232":"{{platform}} password","-507633532":"Your password must contain between 8-16 characters that include uppercase and lowercase letters, and at least one number and special character such as ( _ @ ? ! / # ).","-1861974537":"Strong passwords contain at least 8 characters, combine uppercase and lowercase letters, numbers, and symbols.","-2005211699":"Create","-1597186502":"Reset {{platform}} password","-638756912":"Black out digits 7 to 12 of the card number that’s shown on the front of your debit/credit card.⁤","-996691262":"We’ve introduced these limits to encourage <0>responsible trading. They are optional, and you can adjust them anytime.","-2079276011":"These limits apply to your multipliers trades only. For example, <0>maximum total loss refers to the losses on your multipliers trades.","-2116570030":"If you want to adjust your limits, <0>contact us via live chat. We’ll make the adjustments within 24 hours.","-1389915983":"You decide how much and how long to trade. You can take a break from trading whenever you want. This break can be from 6 weeks to 5 years. When it’s over, you can extend it or log in to resume trading. If you don’t want to set a specific limit, leave the field empty.","-1031814119":"About trading limits and self-exclusion","-183468698":"Trading limits and self-exclusion","-1088698009":"These self-exclusion limits help you control the amount of money and time you spend trading on {{platform_name_trader}}, {{platform_name_dbot}}, {{platform_name_smarttrader}} and {{platform_name_bbot}} on Deriv. The limits you set here will help you exercise <0>responsible trading.","-933963283":"No, review my limits","-1759860126":"Yes, log me out immediately","-572347855":"{{value}} mins","-313333548":"You’ll be able to adjust these limits at any time. You can reduce your limits from the <0>self-exclusion page. To increase or remove your limits, please contact our <1>Customer Support team.","-1265833982":"Accept","-2123139671":"Your stake and loss limits","-1250802290":"24 hours","-2070080356":"Max. total stake","-1545823544":"7 days","-180147209":"You will be automatically logged out from each session after this time limit.","-374553538":"Your account will be excluded from the website until this date (at least 6 months, up to 5 years).","-2105708790":"Your maximum account balance and open positions","-1960600163":"Once your account balance reaches this amount, you will not be able to deposit funds into your account.","-1073845224":"No. of open position(s)","-288196326":"Your maximum deposit limit","-568749373":"Max. deposit limit","-1617352279":"The email is in your spam folder (Sometimes things get lost there).","-547557964":"We can’t deliver the email to this address (Usually because of firewalls or filtering).","-142444667":"Please click on the link in the email to change your Deriv MT5 password.","-742748008":"Check your email and click the link in the email to proceed.","-84068414":"Still didn't get the email? Please contact us via <0>live chat.","-474419287":"FATCA declaration","-1101737402":"Please select*","-975118358":"Your account will be opened with {{legal_entity_name}}, regulated by the Malta Financial Services Authority (MFSA), and will be subject to the laws of Malta.","-2073934245":"The financial trading services offered on this site are only suitable for customers who accept the possibility of losing all the money they invest and who understand and have experience of the risk involved in the purchase of financial contracts. Transactions in financial contracts carry a high degree of risk. If the contracts you purchased expire as worthless, you will lose all your investment, which includes the contract premium.","-1035494182":"You acknowledge that, subject to the Company's discretion, applicable regulations, and internal checks being fulfilled, we will open an account for you and allow you to deposit funds during the client acceptance procedure. However, until the verification of your account is completed, you will not be able to trade, withdraw or make further deposits. If you do not provide relevant documents within 30-days, we will refund the deposited amount through the same payment method you used to deposit.","-1125193491":"Add account","-2068229627":"I am not a PEP, and I have not been a PEP in the last 12 months.","-1209644365":"I hereby confirm that my request for opening an account with Deriv Investments (Europe) Ltd is made on my own initiative.","-740157281":"Trading Experience Assessment","-1720468017":"In providing our services to you, we are required to obtain information from you in order to assess whether a given product or service is appropriate for you.","-1685104463":"* This is required","-186841084":"Change your login email","-907403572":"To change your email address, you'll first need to unlink your email address from your {{identifier_title}} account.","-1850792730":"Unlink from {{identifier_title}}","-428335668":"You will need to set a password to complete the process.","-1232613003":"<0>Verification failed. <1>Why?","-805775852":"<0>Needs verification.<1>Verify now","-1983989074":"<0>No new positions","-1196936955":"Upload a screenshot of your name and email address from the personal information section.","-1286823855":"Upload your mobile bill statement showing your name and phone number.","-1309548471":"Upload your bank statement showing your name and account details.","-1410396115":"Upload a photo showing your name and the first six and last four digits of your card number. If the card does not display your name, upload the bank statement showing your name and card number in the transaction history.","-3805155":"Upload a screenshot of either of the following to process the transaction:","-1523487566":"- your account profile section on the website","-613062596":"- the Account Information page on the app","-1718304498":"User ID","-609424336":"Upload a screenshot of your name, account number, and email address from the personal details section of the app or profile section of your account on the website.","-1954436643":"Upload a screenshot of your username on the General Information page at <0>https://onlinenaira.com/members/index.htm","-79853954":"Upload a screenshot of your account number and phone number on the Bank Account/Mobile wallet page at <0>https://onlinenaira.com/members/bank.htm","-1192882870":"Upload a screenshot of your name and account number from the personal details section.","-818898181":"Name in document doesn’t match your Deriv profile.","-310316375":"Address in document doesn’t match address you entered above.","-485368404":"Document issued more than 6-months ago.","-91160765":"Document issued more than 12-months ago.","-367016488":"Blurry document. All information must be clear and visible.","-1957076143":"Cropped document. All information must be clear and visible.","-1576856758":"An account with these details already exists. Please make sure the details you entered are correct as only one real account is allowed per client. If this is a mistake, contact us via <0>live chat.","-1792723131":"To avoid delays, enter your <0>date of birth exactly as it appears on your {{document_name}}.","-5605257":"This scope will allow third-party apps to withdraw to payment agents and make inter-account transfers for you.","-1373485333":"This scope will allow third-party apps to view your trading history.","-758221415":"This scope will allow third-party apps to open accounts for you, manage your settings and token usage, and more. ","-1629894615":"I have other financial priorities.","-844051272":"I want to stop myself from trading.","-1113965495":"I’m no longer interested in trading.","-1224285232":"Customer service was unsatisfactory.","-1231402474":"Connected apps are authorised applications associated with your account through your API token or the OAuth authorisation process. They can act on your behalf within the limitations that you have set.","-506083843":"As a user, you are responsible for sharing access and for actions that occur in your account (even if they were initiated by a third-party app on your behalf).","-831752682":"Please note that only third-party apps will be displayed on this page. Official Deriv apps will not appear here.","-915844096":"US citizenship or lawful permanent resident (green card) status","-208714573":"An “in care of” address or a “hold mail” address that is the sole address with respect to the client","-1082633433":"A power of attorney or signatory authority granted to a person with a US address.","-231863107":"No","-1858215754":"The document must be up-to-date and signed by the issuance authority.","-718917527":"Invalid or incomplete documents shall be rejected.","-1526404112":"Utility bill: electricity, water, gas, or landline phone bill.","-537552700":"Home rental agreement: valid and current agreement.","-506510414":"Date and time","-1708927037":"IP address","-189310067":"Account closed","-849320995":"Assessments","-773766766":"Email and passwords","-1144318594":"Passkeys","-1466827732":"Self exclusion","-241588481":"Login history","-966136867":"Connected apps","-213009361":"Two-factor authentication","-526636259":"Error 404","-870902742":"How much knowledge and experience do you have in relation to online trading?","-1929477717":"I have an academic degree, professional certification, and/or work experience related to financial services.","-1540148863":"I have attended seminars, training, and/or workshops related to trading.","-922751756":"Less than a year","-542986255":"None","-1337206552":"In your understanding, CFD trading allows you to","-456863190":"Place a position on the price movement of an asset where the outcome is a fixed return or nothing at all.","-1314683258":"Make a long-term investment for a guaranteed profit.","-1546090184":"How does leverage affect CFD trading?","-1636427115":"Leverage helps to mitigate risk.","-800221491":"Leverage guarantees profits.","-811839563":"Leverage lets you open large positions for a fraction of trade value, which may result in increased profit or loss.","-1185193552":"Close your trade automatically when the loss is equal to or more than a specified amount, as long as there is adequate market liquidity.","-1046354":"Close your trade automatically when the profit is equal to or more than a specified amount, as long as there is adequate market liquidity.","-1842858448":"Make a guaranteed profit on your trade.","-860053164":"When trading multipliers.","-1250327770":"When buying shares of a company.","-1222388581":"All of the above.","-1592318047":"See example","-1694758788":"Enter your document number","-1176889260":"Please select a document type.","-274764613":"Driver License Reference number","-1265050949":"identity document","-2139303636":"You may have followed a broken link, or the page has moved to a new address.","-1448368765":"Error code: {{error_code}} page not found","-254792921":"You can only make deposits at the moment. To enable withdrawals, please complete your financial assessment.","-1437017790":"Financial information","-70342544":"We’re legally obliged to ask for your financial information.","-39038029":"Trading experience","-601903492":"Forex trading experience","-1012699451":"CFD trading experience","-1894668798":"Other trading instruments experience","-1026468600":"Other trading instruments frequency","-136976514":"Country of residence*","-1124948631":"Professional Client","-259515058":"By default, all {{brand_website_name}} clients are retail clients but anyone can request to be treated as a professional client.","-1463348492":"I would like to be treated as a professional client.","-1958764604":"Email preference","-2068064150":"Get updates about Deriv products, services and events.","-1558679249":"Please make sure your information is correct or it may affect your trading experience.","-1822545742":"Ether Classic","-1334641066":"Litecoin","-1214036543":"US Dollar","-1782590355":"No currency has been set for this account","-1171226355":"Length of token name must be between {{MIN_TOKEN}} and {{MAX_TOKEN}} characters.","-1803339710":"Maximum {{MAX_TOKEN}} characters.","-408613988":"Select scopes based on the access you need.","-807767876":"Note:","-1117963487":"Name your token and click on 'Create' to generate your token.","-2116332353":"Please close your positions in the following Deriv account(s):","-2048005267":"{{number_of_positions}} position(s)","-2125635811":"Please withdraw your funds from the following {{platform_name}} account(s):","-577445413":"Please close your positions in the following {{platform_name}} account(s):","-1219849101":"Please select at least one reason","-9323953":"Remaining characters: {{remaining_characters}}","-484540402":"An error occurred","-1911549768":"Inaccessible MT5 account(s)","-1869355019":"Action required","-1030102424":"You can't trade on Deriv.","-448385353":"You can't make transactions.","-1058447223":"Before closing your account:","-912764166":"Withdraw your funds.","-60139953":"We shall delete your personal information as soon as our legal obligations are met, as mentioned in the section on Data Retention in our <0>Security and privacy policy","-2061895474":"Closing your account will automatically log you out. We shall delete your personal information as soon as our legal obligations are met.","-203298452":"Close account","-937707753":"Go Back","-771109503":"Use our powerful, flexible, and free API to build a custom trading platform for yourself or for your business.","-1815044949":"You currently don't have any third-party authorised apps associated with your account.","-1699100421":"What are connected apps?","-536187647":"Confirm revoke access?","-1357606534":"Permission","-570222048":"Revoke access","-1468863262":"{{action}}","-727433417":"{{status}}","-1814836151":"What are passkeys?","-1275937234":"Unlock your account like your phone - with biometrics, face scan or PIN.","-587750445":"Extra security layer.","-642452561":"Shields against unauthorised access and phishing.","-1654043401":"You can create one passkey per device.","-1411242065":"Where are passkeys saved?","-258752017":"What happens if my Deriv account email is changed?","-634268263":"Sign in to Deriv with your existing passkey.","-1700177761":"Create passkey","-1405679241":"Stored on: ","-567193224":"Rename","-1140319320":"Your account is now secured with a passkey.<0/>Manage your passkey through your<0/>Deriv account settings.","-592543249":"Add more passkeys","-331060101":"Passkey setup failed","-1036903080":"We’re experiencing a temporary issue in processing your request. Please try again later.","-713875531":"Enable bluetooth.","-1729774899":"Sign in to your Google or iCloud account.","-684009726":"Edit passkey","-1004529240":"Passkey name","-1728732301":"Effortless login with passkeys","-1708254107":"Enable Bluetooth.","-613368504":"Tips:","-1897886029":"Before using passkey:","-1893497054":"Only 3-30 characters allowed.","-80717068":"Apps you have linked to your <0>Deriv password:","-340060402":"Your Deriv X password is for logging in to your Deriv X accounts on the web and mobile apps.","-619126443":"Use the <0>Deriv password to log in to {{brand_website_name}} and {{platform_name_trader}}.","-623760979":"Use the <0>Deriv password to log in to {{brand_website_name}}, {{platform_name_trader}} and {{platform_name_go}}.","-459147994":"Use the <0>Deriv password to log in to {{brand_website_name}}, {{platform_name_go}}, {{platform_name_trader}}, {{platform_name_smarttrader}}, {{platform_name_dbot}} and {{platform_name_ctrader}}.","-1884902844":"Max. deposit limit per day","-545085253":"Max. deposit limit over 7 days","-1031006762":"Max. deposit limit over 30 days","-1116871438":"Max. total loss over 30 days","-2134714205":"Time limit per session","-1884271702":"Time out until","-1265825026":"Timeout time must be greater than current time.","-1332882202":"Timeout time cannot be more than 6 weeks.","-1635977118":"Exclude time cannot be less than 6 months.","-2131200819":"Disable","-200487676":"Enable","-1840392236":"That's not the right code. Please try again.","-2067796458":"Authentication code","-790444493":"Protect your account with 2FA. Each time you log in to your account, you will need to enter your password and an authentication code generated by a 2FA app on your smartphone.","-752939584":"How to set up 2FA for your Deriv account","-90649785":"Click here to copy key","-206376148":"Key copied!","-368010540":"You have enabled 2FA for your Deriv account.","-403552929":"To disable 2FA, please enter the six-digit authentication code generated by your 2FA app below:","-1043340733":"Proof of address documents upload failed","-890084320":"Save and submit","-30772747":"Your personal details have been saved successfully.","-2021135479":"This field is required.","-1002044401":"Select your document*","-1272489896":"Please complete this field.","-721346138":"The options and multipliers trading platform.","-1874136267":"The ultimate bot trading platform.","-415943890":"The legacy options trading platform.","-673722343":"The legacy bot trading platform.","-2018495421":"The mobile app for trading multipliers and accumulators.","-897826065":"The multipliers trading platform.","-2115275974":"CFDs","-1585707873":"Financial Commission","-199154602":"Vanuatu Financial Services Commission","-191165775":"Malta Financial Services Authority","-194969520":"Counterparty company","-1089385344":"Deriv (SVG) LLC","-2019617323":"Deriv (BVI) Ltd","-112814932":"Deriv (FX) Ltd","-1131400885":"Deriv Investments (Europe) Limited","-1471207907":"All assets","-781132577":"Leverage","-1591882610":"Synthetics","-543177967":"Stock indices","-362324454":"Commodities","-1959484303":"Cryptocurrencies","-1071336803":"Platform","-1879666853":"Deriv MT5","-820028470":"Options & Multipliers","-1210359945":"Transfer funds to your accounts","-1926387364":"We’ve sent your e-book to your email. You can also download it here.","-1057002564":"<0>We’re unable to upgrade you to Wallets at this time and are working to get this fixed as soon as we can. Please <1>try again<0>.","-1424352390":"<0>Wallets<1> — A smarter way to manage your funds","-1749409935":"Let's go","-145462920":"Deriv cTrader","-982095728":"Get","-1790089996":"NEW!","-1473281803":"Predict the market, profit if you’re right, risk only what you put in. <0>Learn more","-2134770229":"Total assets in your Deriv Apps and Deriv MT5 CFDs demo account.","-1277942366":"Total assets","-1255879419":"Trader's Hub","-493788773":"Non-EU","-673837884":"EU","-230566990":"The following documents you submitted did not pass our checks:","-846812148":"Proof of address.","-1146027991":"If you’d like to get the {{from_account}} account, resubmit these documents.","-710685402":"No new positions","-1445744852":"You can no longer open new positions with your {{from_account}} account. Please use your {{to_account}} account to open new positions.","-1699909965":"or ","-2127865736":"Your {{from_account}} account will be archived after 30 days of inactivity. You can still access your trade history until the account is archived.","-2055865877":"Non-EU regulation","-643108528":"Non-EU and EU regulation","-1815067117":"Start your trading journey","-1807332199":"Set up your real account","-1002556560":"We’re unable to complete with the Wallet upgrade. Please try again later or contact us via live chat.","-90090878":"Use Wallets to manage your funds across different currencies effortlessly.","-280236366":"Enable now","-1186807402":"Transfer","-744999940":"Deriv account","-766186087":"{{trustScore}} out of 5 based on {{numberOfReviews}} reviews","-1870909526":"Our server cannot retrieve an address.","-582721696":"The current allowed withdraw amount is {{format_min_withdraw_amount}} to {{format_max_withdraw_amount}} {{currency}}","-1975494965":"Cashier","-42592103":"Deposit cryptocurrencies","-60779216":"Withdrawals are temporarily unavailable due to system maintenance. You can make your withdrawals when the maintenance is complete.","-520142572":"Cashier is currently down for maintenance","-1552080215":"Please check back in a few minutes.<0>Thank you for your patience.","-215186732":"You’ve not set your country of residence. To access Cashier, please update your country of residence in the Personal details section in your account settings.","-1392897508":"The identification documents you submitted have expired. Please submit valid identity documents to unlock Cashier. ","-954082208":"Your cashier is currently locked. Please contact us via <0>live chat to find out how to unlock it.","-929148387":"Please set your account currency to enable deposits and withdrawals.","-2027907316":"You can make a withdrawal once the verification of your account is complete.","-541392118":"Your account has not been authenticated. Please submit your <0>proof of identity and <1>proof of address to authenticate your account and access your cashier.","-599998434":"You cannot make a fund transfer as your documents are still under review. We will notify you by email within 3 days once your verification is approved.","-247122507":"Your cashier is locked. Please complete the <0>financial assessment to unlock it.","-1443721737":"Your cashier is locked. See <0>how we protect your funds before you proceed.","-901712457":"Your access to Cashier has been temporarily disabled as you have not set your 30-day turnover limit. Please go to <0>Self-exclusion and set your 30-day turnover limit.","-166472881":"Your <0>personal details are incomplete. Please go to your account settings and complete your personal details to enable deposits and withdrawals.","-666905139":"Deposits are locked","-378858101":"Your <0>personal details are incomplete. Please go to your account settings and complete your personal details to enable deposits.","-1318742415":"Your account has not been authenticated. Please submit your <0>proof of identity and <1>proof of address to authenticate your account and request for withdrawals.","-1923809087":"Unfortunately, you can only make deposits. Please contact us via <0>live chat to enable withdrawals.","-172277021":"Cashier is locked for withdrawals","-1624999813":"It seems that you've no commissions to withdraw at the moment. You can make withdrawals once you receive your commissions.","-1077304626":"Amount ({{currency}})","-1559994981":"Approximate value","-1272778997":"We've sent you an email.","-89973258":"Resend email in {{seconds}}s","-1332236294":"Please verify your identity","-1675848843":"Error","-283017497":"Retry","-1294455996":"Deriv P2P unavailable","-1838982691":"UNKNOWN","-532693866":"Something went wrong. Please refresh the page and try again.","-1196049878":"First line of home address","-1326406485":"Postal Code/ZIP","-939625805":"Telephone","-442575534":"Email verification failed","-1459042184":"Update your personal details","-1603543465":"We can't validate your personal details because there is some information missing.","-614516651":"Need help? <0>Contact us.","-203002433":"Deposit now","-720315013":"You have no funds in your {{currency}} account","-2052373215":"Please make a deposit to use this feature.","-379487596":"{{selected_percentage}}% of available balance ({{format_amount}} {{currency__display_code}})","-1957498244":"more","-1059419768":"Notes","-646217148":"We process your deposits internally within 24 hours (depending on internal checks and your payment method). If you don't see your funds reflected after this time, please contact us via <0>live chat with proof of your transaction, including the amount, date, and time.","-1901728198":"What do I do if I have reached my deposit limit?","-631829734":"<0>Insufficient balance: Please ensure you have sufficient funds in your card/e-wallet. If the problem persists, please contact your bank for help.","-1072505739":"<0>3D secure invalid/redirected: Please contact your bank for an OTP.","-180339757":"<0>Restricted card: Please use a locally issued card. ","-645281699":"<0>Customer cancelled payment: Please try again after 1 hour.","-102611677":"Can I use someone else's payment method?","-951380652":"No, you cannot use someone else's payment method to deposit into Deriv. If you use another person's payment method, your account will be suspended (if they are on Deriv, their account will also be suspended). If you suspect that someone has used your payment method, let us know through <0>live chat with your proof of ownership.","-819152742":"If you have used a different payment method to make your deposit, you cannot withdraw via a payment agent. However, if you have used both a payment agent and another payment method (for example, an e-wallet) to deposit, you have to withdraw via the e-wallet first up to your original deposited amount. After that, you can use a payment agent to make a withdrawal. If your original payment method is not available for withdrawals, please let us know through <0>live chat for assistance.","-820131811":"Can I withdraw using a different method?","-1656533423":"No, withdrawals must be made using the same method you used for your deposit.","-190084602":"Transaction","-1995606668":"Amount","-2024290965":"Confirmations","-811190405":"Time","-728508487":"{{currency}} recent transactions","-1984478597":"The details of this transaction is available on CoinsPaid.","-316545835":"Please ensure <0>all details are <0>correct before making your transfer.","-949073402":"I confirm that I have verified the client’s transfer information.","-1752211105":"Transfer now","-1787304306":"Deriv P2P","-174976899":"P2P verification","-1705887186":"Your deposit is successful.","-142361708":"In process","-1582681840":"We’ve received your request and are waiting for more blockchain confirmations.","-1626218538":"You’ve cancelled your withdrawal request.","-1062841150":"Your withdrawal is unsuccessful due to an error on the blockchain. Please <0>contact us via live chat for more info.","-630780094":"We’re awaiting confirmation from the blockchain.","-1525882769":"Your withdrawal is unsuccessful. We've sent you an email with more information.","-298601922":"Your withdrawal is successful.","-922143389":"Deriv P2P is currently unavailable in this currency.","-1310327711":"Deriv P2P is currently unavailable in your country.","-1463156905":"Learn more about payment methods","-685073712":"This is your <0>{{currency}} account {{loginid}}.","-1547606079":"We accept the following cryptocurrencies:","-1517325716":"Deposit via the following payment methods:","-639677539":"Buy cryptocurrencies","-1560098002":"Buy cryptocurrencies via fiat onramp","-541870313":"Deposit via payment agents","-197251450":"Don't want to trade in {{currency_code}}? You can open another cryptocurrency account.","-917092420":"To change your account currency, contact us via <0>live chat.","-515809216":"Send only {{currency_name}} ({{currency_code}}) to this address.","-748636591":"A minimum deposit value of <0>{{minimum_deposit}} {{currency}} is required. Otherwise, a fee is applied.","-1589407981":"To avoid loss of funds:","-1042704302":"Make sure to copy your Deriv account address correctly into your crypto wallet.","-2108344100":"Looking for a way to buy cryptocurrencies? <0>Try Fiat onramp.","-598073640":"About Tether (Ethereum)","-275902914":"Tether on Ethereum (eUSDT)","-1188009792":"Tether on Omni Layer (USDT)","-1239329687":"Tether was originally created to use the bitcoin network as its transport protocol ‒ specifically, the Omni Layer ‒ to allow transactions of tokenised traditional currency.","-314177745":"Unfortunately, we couldn't get the address since our server was down. Please click Refresh to reload the address or try again later.","-91824739":"Deposit {{currency}}","-523804269":"{{amount}} {{currency}} on {{date}}","-494847428":"Address: <0>{{value}}","-1117977576":"Confirmations: <0>{{value}}","-1935946851":"View more","-1744490898":"Unfortunately, we cannot retrieve the information at this time. ","-338505133":"We do not charge a transfer fee for transfers in the same currency between your Deriv fiat and {{platform_name_mt5}} accounts, between your Deriv fiat and {{platform_name_ctrader}} accounts, and between your Deriv fiat and {{platform_name_dxtrade}} accounts.","-2056016338":"You’ll not be charged a transfer fee for transfers in the same currency between your Deriv fiat and {{platform_name_mt5}} accounts.","-599632330":"We’ll charge a 1% transfer fee for transfers in different currencies between your Deriv fiat and {{platform_name_mt5}} accounts and between your Deriv fiat and {{platform_name_dxtrade}} accounts.","-1196994774":"We’ll charge a 2% transfer fee or {{minimum_fee}} {{currency}}, whichever is higher, for transfers between your Deriv cryptocurrency accounts.","-993556039":"We’ll charge a 2% transfer fee or {{minimum_fee}} {{currency}}, whichever is higher, for transfers between your Deriv cryptocurrency and Deriv MT5 accounts and between your Deriv cryptocurrency and {{platform_name_dxtrade}} accounts.","-1382702462":"We’ll charge a 2% transfer fee or {{minimum_fee}} {{currency}}, whichever is higher, for transfers between your Deriv cryptocurrency and Deriv MT5 accounts.","-1339063554":"You may transfer between your Deriv fiat, cryptocurrency, {{platform_name_mt5}}, {{platform_name_ctrader}}, and {{platform_name_dxtrade}} accounts.","-1151983985":"Transfer limits may vary depending on the exchange rates.","-1747571263":"Please bear in mind that some transfers may not be possible.","-757062699":"Transfers may be unavailable due to high volatility or technical issues and when the exchange markets are closed.","-855721928":"Needs verification","-908402700":"Verification failed","-1866405488":"Deriv cTrader accounts","-1344870129":"Deriv accounts","-1109729546":"You will be able to transfer funds between MT5 accounts and other accounts once your address is verified.","-1593609508":"Transfer between your accounts in Deriv","-1155970854":"You have reached the maximum daily transfers. Please try again tomorrow.","-464965808":"Transfer limits: <0 /> - <1 />","-553249337":"Transfers are locked","-1638172550":"To enable this feature you must complete the following:","-1949883551":"You only have one account","-1149845849":"Back to Trader's Hub","-1232852916":"We’re switching over to your {{currency}} account to view the transaction.","-1632668764":"I accept","-544232635":"Please go to the Deposit page to generate an address. Then come back here to continue with your transaction.","-1161069724":"Please copy the crypto address you see below. You'll need it to deposit your cryptocurrency.","-1388977563":"Copied!","-1962894999":"This address can only be used ONCE. Please copy a new one for your next transaction.","-451858550":"By clicking 'Continue' you will be redirected to {{ service }}, a third-party payment service provider. Please note that {{ website_name }} is not responsible for the content or services provided by {{ service }}. If you encounter any issues related to {{ service }} services, you must contact {{ service }} directly.","-2005265642":"Fiat onramp is a cashier service that allows you to convert fiat currencies to crypto to top up your Deriv crypto accounts. Listed here are third-party crypto exchanges. You’ll need to create an account with them to use their services.","-1593063457":"Select payment channel","-1309258714":"From account number","-1247676678":"To account number","-816476007":"Account holder name","-344403983":"Description","-922432739":"Please enter a valid client login ID.","-1024241603":"Insufficient balance.","-1979554765":"Please enter a valid description.","-1254233806":"You've transferred","-953082600":"Some payment methods may not be listed here but payment agents may still offer them. If you can’t find your favourite method, contact the payment agents directly to check further.","-1491457729":"All payment methods","-142563298":"Contact your preferred payment agent for payment instructions and make your deposit.","-352134412":"Transfer limit","-1023961762":"Commission on deposits","-552873274":"Commission on withdrawal","-880645086":"Withdrawal amount","-118683067":"Withdrawal limits: <0 />-<1 />","-1125090734":"Important notice to receive your funds","-1924707324":"View transaction","-1474202916":"Make a new withdrawal","-511423158":"Enter the payment agent account number","-2059278156":"Note: {{website_name}} does not charge any transfer fees.","-1201279468":"To withdraw your funds, please choose the same payment method you used to make your deposits.","-873886836":"Do not enter an address linked to an initial coin offering (ICO) purchase or crowdsale. If you do, the initial coin offering (ICO) tokens will not be credited into your account.","-130833284":"Please note that your maximum and minimum withdrawal limits aren’t fixed. They change due to the high volatility of cryptocurrency.","-2004264970":"Your wallet address should have 25 to 64 characters.","-1707299138":"Your {{currency_symbol}} wallet address","-1430080977":"Priority withdrawal","-1046088265":"Withdrawal amount:","-694919384":"Transaction fee","-1358465817":"Fee calculated at {{ time_stamp }}","-1744540779":"Amount received:","-38063175":"{{account_text}} wallet","-652125858":"Amount received","-705272444":"Upload a proof of identity to verify your identity","-1373954791":"Should be a valid number","-1278608332":"Please enter a number between 0 and {{api_max_losses}}.","-287597204":"Enter limits to stop your bot from trading when any of these conditions are met.","-1445989611":"Limits your potential losses for the day across all Deriv platforms.","-152878438":"Maximum number of trades your bot will execute for this run.","-1490942825":"Apply and run","-2067572496":"You’ve just stopped the bot. Any open contracts can be viewed on the Reports page.","-992003496":"Changes you make will not affect your running bot.","-1778025545":"You’ve successfully imported a bot.","-222838313":"Your session has expired. Please sign in again.","-1572746946":"Asian Up","-686840306":"Asian Down","-2141198770":"Higher","-816098265":"Lower","-1646655742":"Spread Up","-668987427":"Spread Down","-912577498":"Matches","-1862940531":"Differs","-808904691":"Odd","-556230215":"Ends Outside","-1268220904":"Ends Between","-703542574":"Up","-1127399675":"Down","-768425113":"No Touch","-1163058241":"Stays Between","-1354485738":"Reset Call","-376148198":"Only Ups","-1337379177":"High Tick","-328036042":"Please enter a stop loss amount that's higher than the current potential loss.","-2127699317":"Invalid stop loss. Stop loss cannot be more than stake.","-179005984":"Save","-610059687":"Exploring the D’Alembert strategy in Deriv Bot","-1226666341":"The D'Alembert strategy involves increasing your stake after a losing trade and reducing it after a successful trade by a predetermined number of units.","-312844882":"Initial stake: The amount that you are willing to place as a stake to enter a trade. This is the starting point for any changes in stake depending on the dynamic of the strategy being used.","-1173302981":"1. Start with the initial stake. In this example, we’ll use 1 USD.","-1540106116":"Profit and loss thresholds","-894905768":"With Deriv Bot, traders can set the profit and loss thresholds to secure potential profits and limit potential losses. This means that the trading bot will automatically stop when either the profit or loss thresholds are reached. It's a form of risk management that can potentially enhance returns. For example, if a trader sets the profit threshold at 100 USD and the strategy exceeds 100 USD of profit from all trades, then the bot will stop running.","-1946134465":"Where:","-248283982":"B is the loss threshold.","-1148521416":"f is the unit increment.","-211800490":"D’Alembert formula 2","-1772692202":"This formula helps you plan your trades by considering the amount of money you have and your comfort level with risk. It involves determining your loss threshold and the initial stake you want to trade with. Then, you use this formula to calculate the number of rounds you can trade. This process provides insight into stake sizing and expectations.","-2107238266":"The D'Alembert system offers more balanced trading through controlled stake progression. With prudent risk management like stake limits, it can be effectively automated in Deriv Bot. However, traders should thoroughly assess their risk appetite, test strategies on a demo account to align with their trading style before trading with real money. This allows optimising the approach and striking a balance between potential gains and losses whilst managing risk.","-500873566":"Disclaimer:","-344769349":"Please be aware that while we may use rounded figures for illustration, a stake of a specific amount does not guarantee an exact amount in successful trades. For example, a 1 USD stake does not necessarily equate to a 1 USD profit in successful trades.","-818800551":"Exploring the Martingale strategy in Deriv Bot","-533490374":"These are the trade parameters used in Deriv Bot with Martingale strategy.","-1507161059":"Multiplier: The multiplier used to increase your stake if you're losing a trade. The value must be greater than 1.","-1333404686":"An example of Martingale strategy","-1755877136":"3. If the first trade ends in a loss, Deriv Bot will automatically double your stake for the next trade to 2 USD. Deriv Bot will continue to double the stake after every losing trade.","-1297651002":"If you're about to start trading and haven't established a Maximum Stake as part of your risk management strategy, you can determine how long your funds will last by employing the Martingale strategy. Simply use this formula.","-46865201":"Martingale formula 1","-116397598":"m is the Martingale multiplier.","-658161609":"Number of rounds, R ≈ 9.965","-288082521":"This means that after 10 rounds of consecutive losses, this trader will lose 1023 USD which exceeds the loss threshold of 1000 USD, stopping the bot.","-770387160":"The Martingale strategy in trading may offer substantial gains but also comes with significant risks. With your selected strategy, Deriv Bot provides automated trading with risk management measures like setting initial stake, stake size, maximum stake, profit threshold and loss threshold. It's crucial for traders to assess their risk tolerance, practice in a demo account, and understand the strategy before trading with real money.","-1901073152":"These are the trade parameters used for Oscar’s Grind strategy in Deriv Bot.","-1575153036":"An example of Oscar’s Grind strategy","-732418614":"The table above demonstrates this principle by showing that when a successful trade occurs and meets the target of one unit of potential profit which is 1 USD in this example, the session ends. If trading continues, a new session will begin.","-106266344":"Principle 3: The stake adjusts to the gap size between current loss and the target profit for the session","-492908094":"In round 7, the stake is adjusted downwards from 2 USD to 1 USD, to meet the target profit of 1 USD.","-90079299":"With Deriv Bot, traders can set the profit and loss thresholds to secure potential profits and limit potential losses. This means that the trading bot will automatically stop when either the profit or loss threshold is reached. This is a form of risk management that can potentially boost successful trades whilst limiting the impact of loss. For example, if a trader sets the profit threshold at 100 USD and the strategy exceeds 100 USD of profit from all trades, then the bot will stop running.","-1549673884":"The Oscar's Grind strategy provides a disciplined approach for incremental gains through systematic stake progression. When integrated into Deriv Bot with proper risk management like profit or loss thresholds, it offers traders a potentially powerful automated trading technique. However, traders should first thoroughly assess their risk tolerance and first try trading on a demo account in order to familiarise with the strategy before trading with real funds.","-655650222":"Exploring the Reverse D’Alembert strategy in Deriv Bot","-1864807973":"The Reverse D'Alembert strategy involves increasing your stake after a successful trade and reducing it after a losing trade by a predetermined number of units.","-809681645":"These are the trade parameters used in Deriv Bot with Reverse D’Alembert strategy.","-1239374257":"An example of Reverse D’Alembert strategy","-309821442":"Please be aware that while we may use rounded figures for illustration, a stake of a specific amount does not guarantee an exact amount in successful trades. For example, a 1 USD stake does not necessarily equate to a 1 USD profit in successful trades.","-1576691912":"This article explores the Reverse Martingale strategy integrated into Deriv Bot, a versatile trading bot designed to trade assets such as forex, commodities, and derived indices. We will delve into the strategy's core parameters, its application, and provide essential takeaways for traders looking to use the bot effectively.","-1934849823":"These are the trade parameters used in Deriv Bot with Reverse Martingale strategy.","-1021919630":"Multiplier: The multiplier used to increase your stake if your trade is successful. The value must be greater than 1.","-760516362":"3. If the first trade is a successful trade, Deriv Bot will automatically double your stake for the next trade to 2 USD. Deriv Bot will continue to double the stake after every successful trade.","-1410950365":"Exploring the 1-3-2-6 strategy in Deriv Bot","-1175255072":"These are the trade parameters used in Deriv Bot with 1-3-2-6 strategy.","-183884527":"An example of 1-3-2-6 strategy","-275617819":"4. However, if any trade results in a loss, your stake will reset back to the initial stake of 1 USD for the next trade. The third trade results in a loss hence the stake resets to the initial stake of 1 USD for the next trade.","-719846465":"5. Upon reaching the initial stake, if the next trade still results in a loss, your stake will remain at the initial stake of 1 USD. This strategy will minimally trade at the initial stake. Refer to the fourth and fifth trade.","-1452746011":"The 1-3-2-6 strategy in trading may offer substantial gains but also comes with significant risks. Each stake is independent, and the strategy does not increase your chances of successful trades in the long run. If you encounter a series of losses, the strategy can lead to significant losses. Therefore, it is crucial for traders to assess their risk tolerance, practice in a demo account, utilise profit and loss thresholds, and fully comprehend the strategy before engaging in real-money trading.","-1016171176":"Asset","-138833194":"The underlying market your bot will trade with this strategy.","-621128676":"Trade type","-399349239":"Your bot will use this trade type for every run","-410856998":"The bot will stop trading if your total profit exceeds this amount.","-447853970":"Loss threshold","-33106112":"The size used to multiply the stake after a successful trade for the next trade.","-1503301801":"The value must be equal or greater than {{ min }}","-1596504046":"Number of unit(s) to be added to the next trade after a successful trade. One unit is equivalent to the amount of initial stake.","-1521098535":"Max stake","-1448426542":"The stake for your next trade will reset to the initial stake if it exceeds this value.","-993953307":"Your prediction of the last digit of the asset price.","-1305281529":"D’Alembert","-1842451303":"Welcome to Deriv Bot!","-1391310674":"Check out these guides and FAQs to learn more about building your bot:","-2066779239":"FAQs","-280324365":"What is Deriv Bot?","-349714537":"Contract Duration","-65214475":"Name of your bot","-155173714":"Let’s build a bot!","-2093569327":"How to build a basic trading bot with Deriv Bot","-2072114761":"How to use Martingale strategy on Deriv Bot","-1919212468":"3. You can also search for the blocks you want using the search bar above the categories.","-1800386057":"For more info, check out this blog post on the basics of building a trading bot.","-980360663":"3. Choose the block you want and drag it to the workspace.","-1493168314":"What is a quick strategy?","-1680391945":"Using a quick strategy","-1177914473":"How do I save my strategy?","-271986909":"In Bot Builder, hit Save on the toolbar at the top to download your bot. Give your bot a name, and choose to download your bot to your device or Google Drive. Your bot will be downloaded as an XML file.","-1149045595":"1. After hitting Import, select Local and click Continue.","-288041546":"2. Select your XML file and hit Open.","-2127548288":"3. Your bot will be loaded accordingly.","-1311297611":"1. After hitting Import, select Google Drive and click Continue.","-1549564044":"How do I reset the workspace?","-1127331928":"In Bot Builder, hit Reset on the toolbar at the top. This will clear the workspace. Please note that any unsaved changes will be lost.","-1720444288":"How do I control my losses with Deriv Bot?","-1142295124":"There are several ways to control your losses with Deriv Bot. Here’s a simple example of how you can implement loss control in your strategy:","-2129119462":"1. Create the following variables and place them under Run once at start:","-1918487001":"Example:","-468926787":"This is how your trade parameters, variables, and trade options should look like:","-1565344891":"Can I run Deriv Bot on multiple tabs in my web browser?","-213872712":"No, we don't offer cryptocurrencies on Deriv Bot.","-2147346223":"In which countries is Deriv Bot available?","-792737139":"We offer our services in all countries, except for the ones mentioned in our terms and conditions.","-352345777":"What are the most popular strategies for automated trading?","-552392096":"Three of the most commonly used strategies in automated trading are Martingale, D'Alembert, and Oscar's Grind — you can find them all ready-made and waiting for you in Deriv Bot.","-1630262763":"About Martingale","-413928457":"About Oscar's Grind","-1497015866":"About Reverse D’Alembert","-437005403":"About 1-3-2-6","-590765322":"Unfortunately, this trading platform is not available for EU Deriv account. Please switch to a non-EU account to continue trading.","-2110207996":"Deriv Bot is unavailable for this account","-971295844":"Switch to another account","-746652890":"Notifications","-824109891":"System","-507620484":"Unsaved","-764102808":"Google Drive","-749186458":"Account switching is disabled while your bot is running. Please stop your bot before switching accounts.","-597939268":"Keep my contract","-1322453991":"You need to log in to run the bot.","-236548954":"Contract Update Error","-878374481":"Contract purchased ({{contract_id}})","-1481097018":"Bots loaded successfully","-1185116263":"Bot deleted successfully","-1206512736":"Bot started successfully","-1590239895":"Bot stopped successfully","-1428017300":"THE","-1450728048":"OF","-255051108":"YOU","-1845434627":"IS","-931434605":"THIS","-740712821":"A","-1223145005":"Loss amount: {{profit}}","-1206212388":"Welcome back! Your messages have been restored. You are using your {{current_currency}} account.","-1724342053":"You are using your {{current_currency}} account.","-187634388":"This block is mandatory. Here is where you can decide if your bot should continue trading. Only one copy of this block is allowed.","-2105473795":"The only input parameter determines how block output is going to be formatted. In case if the input parameter is \"string\" then the account currency will be added.","-1800436138":"2. for \"number\": 1325.68","-530632460":"This block is used to determine if the market price moves in the selected direction or not. It gives you a value of \"True\" or \"False\".","-1875717842":"Examples:","-890079872":"1. If the selected direction is \"Rise\", and the previous tick value is less than the current tick value, the output will be \"True\". Otherwise, the output will be an empty string.","-489739641":"2. If the selected direction is \"Fall\", and the previous tick value is more than the current tick value, the output will be \"True\". Otherwise, the output will be an empty string.","-2116076360":"There are 4 message types:","-1421941045":"2. 'Warn' displays a message in yellow to highlight something that needs attention.","-277850921":"If \"Win\" is selected, it will return \"True\" if your last trade was successful. Otherwise, it will return an empty string.","-2139916657":"1. In the below example the loop is terminated in case \"x\" is \"False\" even though only one iteration is complete","-1238900333":"2. In the below example the loop jumps to the next iteration without executing below block in case if \"x\" is \"False\"","-1729479576":"You can use \"i\" inside the loop, for example to access list items","-1474636594":"In this example, the loop will repeat three times, as that is the number of items in the given list. During each iteration, the variable \"i\" will be assigned a value from the list. ","-908772734":"This block evaluates a statement and will perform an action only when the statement is true.","-334040831":"2. In this example, the instructions are repeated as long as the value of x is greater than or equal to 10. Once the value of x drops below 10, the loop is terminated.","-444267958":"\"Seconds Since Epoch\" block returns the number of seconds since January 1st, 1970.","-447522129":"You might need it when you want to repeat an actions after certain amount of time.","-1488259879":"The term \"candle\" refers to each bar on the candlestick chart. Each candle represents four market prices for the selected time interval:","-2020693608":"Each candlestick on the chart represents 4 market prices for the selected time interval:","-62728852":"- Open price: the opening price","-1247744334":"- Low price: the lowest price","-1386365697":"- Close price: the closing price","-1498732382":"A black (or red) candle indicates that the open price is higher than the close price. This represents a downward movement of the market price.","-1871864755":"This block gives you the last digit of the latest tick value of the selected market. If the latest tick value is 1410.90, this block will return 0. It’s useful for digit-based contracts such as Even/Odd, Matches/Differs, or Higher/Lower.","-1029671512":"In case if the \"OR\" operation is selected, the block returns \"True\" in case if one or both given values are \"True\"","-210295176":"Available operations:","-1385862125":"- Addition","-983721613":"- Subtraction","-854750243":"- Multiplication","-1394815185":"In case if the given number is less than the lower boundary of the range, the block returns the lower boundary value. Similarly, if the given number is greater than the higher boundary, the block will return the higher boundary value. In case if the given value is between boundaries, the block will return the given value unchanged.","-1034564248":"In the below example the block returns the value of 10 as the given value (5) is less than the lower boundary (10)","-2009817572":"This block performs the following operations to a given number","-671300479":"Available operations are:","-514610724":"- Absolute","-1923861818":"- Euler’s number (2.71) to the power of a given number","-1556344549":"Here’s how:","-1061127827":"- Visit the following URL, make sure to replace with the Telegram API token you created in Step 1: https://api.telegram.org/bot/getUpdates","-311389920":"In this example, the open prices from a list of candles are assigned to a variable called \"cl\".","-1460794449":"This block gives you a list of candles within a selected time interval.","-1634242212":"Used within a function block, this block returns a value when a specific condition is true.","-2012970860":"This block gives you information about your last contract.","-1504783522":"You can choose to see one of the following:","-10612039":"- Profit: the profit you’ve earned","-555996976":"- Entry time: the starting time of the contract","-1391071125":"- Exit time: the contract expiration time","-1961642424":"- Exit value: the value of the last tick of the contract","-111312913":"- Barrier: the barrier value of the contract (applicable to barrier-based trade types such as stays in/out, touch/no touch, etc.)","-674283099":"- Result: the result of the last contract: \"win\" or \"loss\"","-704543890":"This block gives you the selected candle value such as open price, close price, high price, low price, and open time. It requires a candle as an input parameter.","-482281200":"In the example below, the open price is assigned to the variable \"op\".","-364621012":"This block gives you the specified candle value for a selected time interval. You can choose which value you want:","-232477769":"- Open: the opening price","-610736310":"Use this block to sell your contract at the market price. Selling your contract is optional. You may choose to sell if the market trend is unfavourable.","-1307657508":"This block gives you the potential profit or loss if you decide to sell your contract. It can only be used within the \"Sell conditions\" root block.","-1921072225":"In the example below, the contract will only be sold if the potential profit or loss is more than the stake.","-955397705":"SMA adds the market price in a list of ticks or candles for a number of time periods, and divides the sum by that number of time periods.","-1424923010":"where n is the number of periods.","-1835384051":"What SMA tells you","-749487251":"SMA serves as an indicator of the trend. If the SMA points up then the market price is increasing and vice versa. The larger the period number, the smoother SMA line is.","-1996062088":"In this example, each point of the SMA line is an arithmetic average of close prices for the last 10 days.","-1866751721":"Input list accepts a list of ticks or candles, while period is the specified time period.","-1097076512":"You may compare SMA values calculated on every bot run to identify the market trend direction. Alternatively, you may also use a variation of the SMA block, the Simple Moving Average Array block. ","-1254849504":"If a period of 10 is entered, the Simple Moving Average Array block will return a list of SMA values calculated based on period of 10.","-1190046167":"This block displays a dialog box with a customised message. When the dialog box is displayed, your strategy is paused and will only resume after you click \"OK\".","-859028989":"In this example, the date and time will be displayed in a green notification box.","-1452086215":"In this example, a Rise contract will be purchased at midnight on 1 August 2019.","-2078588404":"Select your desired market and asset type. For example, Forex > Major pairs > AUD/JPY","-2037446013":"2. Trade Type","-533927844":"Select your desired trade type. For example, Up/Down > Rise/Fall","-1192411640":"4. Default Candle Interval","-485434772":"8. Trade Options","-1827646586":"This block assigns a given value to a variable, creating the variable if it doesn't already exist.","-254421190":"List: ({{message_length}})","-555886064":"Won","-529060972":"Lost","-1062922595":"Reference ID (buy)","-2068574600":"Reference ID (sell)","-994038153":"Start Time","-1979852400":"Entry Spot","-427802309":"Profit/Loss","-224804428":"Transactions","-287223248":"No transaction or activity yet.","-418247251":"Download your journal.","-2123571162":"Download","-1616649196":"results","-90107030":"No results found","-984140537":"Add","-870004399":"<0>Bought: {{longcode}} (ID: {{transaction_id}})","-1211474415":"Filters","-186972150":"There are no messages to display","-558594655":"The bot is not running","-478946875":"The stats are cleared","-999254545":"All messages are filtered out","-934909826":"Load strategy","-2005347537":"Importing XML files from Binary Bot and other third-party platforms may take longer.","-1121028020":"or, if you prefer...","-254025477":"Select an XML file from your device","-1131095838":"Please upload an XML file","-523928088":"Create one or upload one from your local drive or Google Drive.","-1684205190":"Why can't I see my recent bots?","-2050879370":"1. Logged in from a different device","-811857220":"3. Cleared your browser cache","-625024929":"Leaving already?","-584289785":"No, I'll stay","-1435060006":"If you leave, your current contract will be completed, but your bot will stop running immediately.","-783058284":"Total stake","-2077494994":"Total payout","-1073955629":"No. of runs","-1729519074":"Contracts lost","-42436171":"Total profit/loss","-1856204727":"Reset","-1137823888":"Total payout since you last cleared your stats.","-992662695":"The number of times your bot has run since you last cleared your stats. Each run includes the execution of all the root blocks.","-1382491190":"Your total profit/loss since you last cleared your stats. It is the difference between your total payout and your total stake.","-24780060":"When you’re ready to trade, hit ","-2147110353":". You’ll be able to track your bot’s performance here.","-1442034178":"Contract bought","-2020280751":"Bot is stopping","-1436403979":"Contract closed","-411060180":"TradingView Chart","-627895223":"Exit spot","-2140412463":"Buy price","-1299484872":"Account","-2004386410":"Win","-266502731":"Transactions detailed summary","-1711732508":"Reference IDs","-386141434":"(Buy)","-482272687":"(Sell)","-1983189496":"ticks","-694277729":"(High)","-2028564707":"(Low)","-596238067":"Entry/Exit spot","-1823621139":"Quick Strategy","-1782602933":"Choose a template below and set your trade parameters.","-315611205":"Strategy","-1524489375":"(optional)","-150224710":"Yes, continue","-475765963":"Edit the amount","-1349897832":"Do not show this message again.","-984512425":"Minimum duration: {{ value }}","-2084091453":"The value must be equal or greater than {{ value }}","-657364297":"The value must be equal or less than {{ value }}","-1696412885":"Import","-320197558":"Sort blocks","-939764287":"Charts","-1566369363":"Zoom out","-1285759343":"Search","-1291088318":"Purchase conditions","-112876186":"Analysis","-1769584466":"Stats","-1133736197":"Utility","-1682372359":"Text","-907562847":"Lists","-1646497683":"Loops","-251326965":"Miscellaneous","-1692205739":"Import a bot from your computer or Google Drive, build it from scratch, or start with a quick strategy.","-1150390589":"Last modified","-1393876942":"Your bots:","-1545070554":"Delete bot","-1972599670":"Your bot will be permanently deleted when you hit ","-1692956623":"Yes, delete.","-573479616":"Are you sure you want to delete it?","-786915692":"You are connected to Google Drive","-1256971627":"To import your bot from your Google Drive, you'll need to sign in to your Google account.","-1233084347":"To know how Google Drive handles your data, please review Deriv’s <0>Privacy policy.","-1150107517":"Connect","-767342552":"Enter your bot name, choose to save on your computer or Google Drive, and hit ","-1372891985":"Save.","-1003476709":"Save as collection","-636521735":"Save strategy","-1953880747":"Stop my bot","-1899230001":"Stopping the current bot will load the Quick Strategy you just created to the workspace.","-2131847097":"Any open contracts can be viewed on the ","-563774117":"Dashboard","-463767874":"Server Bot <0>Beta+ Create bot","-1743829671":"You are not logged in","-3815578":"Sign Up","-1019831575":"Please log in or sign up to start trading with us.","-725108378":"<0>Bought: ","-49903092":"Win amount: ","-57218728":"Info: ","-285880236":"There are no messages to display.","-526601997":"Running","-233426953":"Profit","-128899191":"You’ll be able to track your server bot’s performance here.","-683790172":"Now, <0>run the bot to test out the strategy.","-1127164953":"Hi! Hit <0>Start for a quick tour.","-358288026":"Note: You can also find this tutorial in the <0>Tutorials tab.","-129587613":"Got it, thanks!","-1793577405":"Build from scratch","-358753028":"Create your bot using our drag-and-drop blocks or click Quick Strategy to choose from the ready-to-use bot templates.","-1212601535":"Monitor the market","-21136101":"See how your bot is doing in real-time.","-631097919":"Click <0>Run when you want to start trading, and click <0>Stop when you want to stop.","-1999747212":"Want to retake the tour?","-782992165":"Step 1 :","-1207872534":"First, set the <0>Trade parameters block.","-1656388044":"First, set <0>Market to Derived > Continuous Indices > Volatility 100 (1s) Index.","-1706298865":"Then, set <0>Trade type to Up/Down > Rise/Fall.","-1834358537":"For <0>Default candle interval, set it to 1 minute","-1940971254":"For <0>Trade options, set it as below:","-512839354":"<0>Stake: USD 10 (min: 0.35 - max: 50000)","-753745278":"Step 2 :","-1056713679":"Then, set the <0>Purchase conditions block.","-245497823":"<0>2. Purchase conditions:","-916770284":"<0>Purchase: Rise","-758077259":"Step 3 :","-677396944":"Step 4 :","-295975118":"Next, go to <0>Utility tab under the Blocks menu. Tap the drop-down arrow and hit <0>Loops.","-698493945":"Step 5 :","-1992994687":"Now, tap the <0>Analysis drop-down arrow and hit <0>Contract.","-1844492873":"Go to the <0>Last trade result block and click + icon to add the <0>Result is Win block to the workspace.","-1547091772":"Then, drag the <0>Result is win into the empty slot next to <0>repeat until block.","-736400802":"Step 6 :","-732067680":"Finally, drag and add the whole <0>Repeat block to the <0>Restart trading conditions block.","-1411787252":"Step 1","-1109392787":"Learn how to build your bot from scratch using a simple strategy.","-1263822623":"You can import a bot from your mobile device or from Google drive, see a preview in the bot builder, and start trading by running the bot.","-563921656":"Bot Builder guide","-1596172043":"Quick strategy guides","-1765276625":"Click the multiplier drop-down menu and choose the multiplier value you want to trade with.","-1872233077":"Your potential profit will be multiplied by the multiplier value you’ve chosen.","-614454953":"To learn more about multipliers, please go to the <0>Multipliers page.","-662836330":"Would you like to keep your current contract or close it? If you decide to keep it running, you can check and close it later on the <0>Reports page.","-1717650468":"Online","-1309011360":"Open positions","-1597214874":"Trade table","-1929724703":"Compare CFD accounts","-883103549":"Account deactivated","-45873457":"NEW","-1837059346":"Buy / Sell","-1845037007":"Advertiser's page","-494667560":"Orders","-679691613":"My ads","-821418875":"Trader","-679102561":"Contract Details","-430118939":"Complaints policy","-377375279":"Standard","-1582979384":"Standard Demo","-1212531781":"Standard BVI","-328128497":"Financial","-533935232":"Financial BVI","-565431857":"Financial Labuan","-291535132":"Swap-Free Demo","-499019612":"Zero Spread Demo","-1472945832":"Swap-Free SVG","-144803045":"Only numbers and these special characters are allowed: {{permitted_characters}}","-1450516268":"Only letters, numbers, space, hyphen, period, and apostrophe are allowed.","-1966032552":"The length of token should be 8.","-2128137611":"Should start with letter or number, and may contain hyphen and underscore.","-1590869353":"Up to {{decimal_count}} decimal places are allowed.","-2061307421":"Should be more than {{min_value}}","-1099941162":"Should be less than {{max_value}}","-1528188268":"Straight rows of keys are easy to guess","-1339903234":"Short keyboard patterns are easy to guess","-23980798":"Repeats like \"aaa\" are easy to guess","-235760680":"Avoid repeated words and characters","-1568933154":"Sequences like abc or 6543 are easy to guess","-725663701":"Avoid sequences","-1450768475":"Recent years are easy to guess","-1804838610":"Avoid years that are associated with you","-64849469":"Dates are often easy to guess","-2006915194":"Avoid dates and years that are associated with you","-2124205211":"A word by itself is easy to guess","-1095202689":"All-uppercase is almost as easy to guess as all-lowercase","-2137856661":"Reversed words aren't much harder to guess","-1885413063":"Predictable substitutions like '@' instead of 'a' don't help very much","-369258265":"This password is on the blacklist","-577777971":"You have reached the rate limit of requests per second. Please try later.","-206321775":"Fiat","-522767852":"DEMO","-433761292":"Switching to default account.","-405439829":"Sorry, you can't view this contract because it doesn't belong to this account.","-1590712279":"Gaming","-16448469":"Virtual","-2093768906":"{{name}} has released your funds.
    Would you like to give your feedback?","-705744796":"Your demo account balance has reached the maximum limit, and you will not be able to place new trades. Reset your balance to continue trading from your demo account.","-2063700253":"disabled","-1585069798":"Please click the following link to complete your Appropriateness Test.","-1287141934":"Find out more","-367759751":"Your account has not been verified","-596690079":"Enjoy using Deriv?","-265932467":"We’d love to hear your thoughts","-1815573792":"Drop your review on Trustpilot.","-823349637":"Go to Trustpilot","-1204063440":"Set my account currency","-1601813176":"Would you like to increase your daily limits to {{max_daily_buy}} {{currency}} (buy) and {{max_daily_sell}} {{currency}} (sell)?","-1751632759":"Get a faster mobile trading experience with the <0>{{platform_name_go}} app!","-1164554246":"You submitted expired identification documents","-498364310":"Enable passkey","-187109231":"Level up your security","-1132350982":"Strengthen your account’s security today with the latest passkeys feature.","-219846634":"Let’s verify your ID","-529038107":"Install","-1738575826":"Please switch to your real account or create one to access the cashier.","-1329329028":"You’ve not set your 30-day turnover limit","-132893998":"Your access to the cashier has been temporarily disabled as you have not set your 30-day turnover limit. Please go to Self-exclusion and set the limit.","-1852207910":"MT5 withdrawal disabled","-764323310":"MT5 withdrawals have been disabled on your account. Please check your email for more details.","-1744163489":"Please verify your proof of income","-382676325":"To continue trading with us, please submit your proof of income.","-1902997828":"Refresh now","-753791937":"A new version of Deriv is available","-1775108444":"This page will automatically refresh in 5 minutes to load the latest version.","-1175685940":"Please contact us via live chat to enable withdrawals.","-493564794":"Please complete your financial assessment.","-1125797291":"Password updated.","-157145612":"Please log in with your updated password.","-1728185398":"Resubmit proof of address","-612396514":"Please resubmit your proof of address.","-1519764694":"Your proof of address is verified.","-1629185222":"Submit now","-1961967032":"Resubmit proof of identity","-117048458":"Please submit your proof of identity.","-1196422502":"Your proof of identity is verified.","-1392958585":"Please check your email.","-136292383":"Your proof of address verification is pending","-386909054":"Your proof of address verification has failed","-430041639":"Your proof of address did not pass our verification checks, and we’ve placed some restrictions on your account. Please resubmit your proof of address.","-87177461":"Please go to your account settings and complete your personal details to enable deposits.","-904632610":"Reset your balance","-470018967":"Reset balance","-156611181":"Please complete the financial assessment in your account settings to unlock it.","-1925176811":"Unable to process withdrawals in the moment","-980696193":"Withdrawals are temporarily unavailable due to system maintenance. You can make withdrawals when the maintenance is complete.","-1647226944":"Unable to process deposit in the moment","-488032975":"Deposits are temporarily unavailable due to system maintenance. You can make deposits when the maintenance is complete.","-2136953532":"Scheduled cashier maintenance","-849587074":"You have not provided your tax identification number","-47462430":"This information is necessary for legal and regulatory requirements. Please go to your account settings, and fill in your latest tax identification number.","-2067423661":"Stronger security for your Deriv account","-1719731099":"With two-factor authentication, you’ll protect your account with both your password and your phone - so only you can access your account, even if someone knows your password.","-949074612":"Please contact us via live chat.","-2087822170":"You are offline","-1669693571":"Check your connection.","-1706642239":"<0>Proof of ownership <1>required","-553262593":"<0><1>Your account is currently locked <2><3>Please upload your proof of <4>ownership to unlock your account. <5>","-1834929362":"Upload my document","-1043638404":"<0>Proof of ownership <1>verification failed","-1766760306":"<0><1>Please upload your document <2>with the correct details. <3>","-8892474":"Start assessment","-1330929685":"Please submit your proof of identity and proof of address to verify your account and continue trading.","-99461057":"Please submit your proof of address to verify your account and continue trading.","-577279362":"Please submit your proof of identity to verify your account and continue trading.","-197134911":"Your proof of identity is expired","-152823394":"Your proof of identity has expired. Please submit a new proof of identity to verify your account and continue trading.","-822813736":"We're unable to complete with the Wallet upgrade. Please try again later or contact us via live chat.","-978414767":"We require additional information for your Deriv MT5 account(s). Please take a moment to update your information now.","-482715448":"Go to Personal details","-2072411961":"Your proof of address has been verified","-384887227":"Update the address in your profile.","-1470677931":"CFDs on financial instruments.","-1595662064":"Zero spread CFDs on financial and derived instruments","-1998049070":"If you agree to our use of cookies, click on Accept. For more information, <0>see our policy.","-402093392":"Add Deriv Account","-1721181859":"You’ll need a {{deriv_account}} account","-1989074395":"Please add a {{deriv_account}} account first before adding a {{dmt5_account}} account. Deposits and withdrawals for your {{dmt5_label}} account are done by transferring funds to and from your {{deriv_label}} account.","-689237734":"Proceed","-1642457320":"Help centre","-1966944392":"Network status: {{status}}","-181484419":"Responsible trading","-650505513":"Full screen","-1823504435":"View notifications","-1954045170":"No currency assigned","-1591792668":"Account Limits","-34495732":"Regulatory information","-1323441180":"I hereby confirm that my request for opening an account with Deriv to trade OTC products issued and offered exclusively outside Brazil was initiated by me. I fully understand that Deriv is not regulated by CVM and by approaching Deriv I intend to set up a relation with a foreign company.","-1396326507":"Unfortunately, {{website_name}} is not available in your country.","-288996254":"Unavailable","-1308346982":"Derived","-1019903756":"Synthetic","-735306327":"Manage accounts","-1813972756":"Account creation paused for 24 hours","-366030582":"Sorry, you're unable to create an account at this time. As you declined our previous risk warnings, we need you to wait for 24 hours after your first account creation attempt before you can proceed.<0/><0/>","-534047566":"Thank you for your understanding. You can create your account on {{real_account_unblock_date}} or later.","-399816343":"Trading Experience Assessment<0/>","-1822498621":"As per our regulatory obligations, we are required to assess your trading knowledge and experience.<0/><0/>Please click ‘OK’ to continue","-71049153":"Keep your account secure with a password","-1965920446":"Start trading","-1485242688":"Step {{step}}: {{step_title}} ({{step}} of {{steps}})","-1829842622":"You can open an account for each cryptocurrency.","-987221110":"Choose a currency you would like to trade with.","-1066574182":"Choose a currency","-1146960797":"Fiat currencies","-1914534236":"Choose your currency","-200560194":"Please switch to your {{fiat_currency}} account to change currencies.","-1829493739":"Choose the currency you would like to trade with.","-1814647553":"Add a new","-1269362917":"Add new","-650480777":"crypto account","-175638343":"Choose an account or add a new one","-1768223277":"Your account is ready","-1215717784":"<0>You have successfully changed your currency to {{currency}}.<0>Make a deposit now to start trading.","-1775006840":"Make a deposit now to start trading.","-983734304":"We need proof of your identity and address before you can start trading.","-917733293":"To get trading, please confirm where you live.","-1282628163":"You'll be able to get trading as soon as verification is complete.","-952649119":"Log In","-1456176427":"Set a currency for your real account","-1329687645":"Create a cryptocurrency account","-1429178373":"Create a new account","-1740162250":"Manage account","-1016775979":"Choose an account","-1362081438":"Adding more real accounts has been restricted for your country.","-1602122812":"24-hour Cool Down Warning","-1519791480":"CFDs and other financial instruments come with a high risk of losing money rapidly due to leverage. You should consider whether you understand how CFDs and other financial instruments work and whether you can afford to take the risk of losing your money. <0/><0/>\n As you have declined our previous warning, you would need to wait 24 hours before you can proceed further.","-1010875436":"CFDs and other financial instruments come with a high risk of losing money rapidly due to leverage. You should consider whether you understand how CFDs and other financial instruments work and whether you can afford to take the high risk of losing your money. <0/><0/> To continue, kindly note that you would need to wait 24 hours before you can proceed further.","-1725418054":"By clicking ‘Accept’ and proceeding with the account opening, you should note that you may be exposing yourself to risks. These risks, which may be significant, include the risk of losing the entire sum invested, and you may not have the knowledge and experience to properly assess or mitigate them.","-730377053":"You can’t add another real account","-2100785339":"Invalid inputs","-2061807537":"Something’s not right","-272953725":"Your details match an existing account. If you need help, contact us via <0>live chat.","-1534648620":"Your password has been changed","-596199727":"We will now redirect you to the login page.","-437918412":"No currency assigned to your account","-1193651304":"Country of residence","-707550055":"We need this to make sure our service complies with laws and regulations in your country.","-280139767":"Set residence","-601615681":"Select theme","-1152511291":"Dark","-1428458509":"Light","-1976089791":"Your Deriv account has been unlinked from your {{social_identity_provider}} account. You can now log in to Deriv using your new email address and password.","-505449293":"Enter a new password for your Deriv account.","-243732824":"Take me to Demo account","-1269078299":"I will setup my real account later.","-1342699195":"Total profit/loss:","-1941013000":"This complaints policy, which may change from time to time, applies to your account(s) registered with {{legal_entity_name_svg}}, {{legal_entity_name_fx}}, and {{legal_entity_name_v}}.","-594812204":"This complaints policy, which may change from time to time, applies to your account(s) registered with {{legal_entity_name_svg}}.","-813256361":"We are committed to treating our clients fairly and providing them with excellent service.<0/><1/>We would love to hear from you on how we can improve our services to you. Any information you provide will be treated in the strictest confidence. Rest assured that you will be heard, valued, and always treated fairly.","-1622847732":"If you have an inquiry regarding your trading account with {{legal_entity_name}}, you can contact us through our <0>Help centre or by chatting with a representative via <1>Live Chat.<2/><3/>We are committed to resolving your query in the quickest time possible and appreciate your patience in allowing us time to resolve the matter.<4/><5/>We strive to provide the best possible service and support to our customers. However, in the event that we are unable to resolve your query or if you feel that our response is unsatisfactory, we want to hear from you. We welcome and encourage you to submit an official complaint to us so that we can review your concerns and work towards a resolution.","-1406192787":"If you are not satisfied with the outcome, you can escalate your complaint to the <0>Financial Commission.","-2115348800":"1. Introduction","-744009523":"2. Fair treatment","-866831420":"3.1. Submission of a complaint","-1102904026":"3.2. Handling your complaint","-603378979":"3.3. Resolving your complaint","-697569974":"3.4. Your decision","-1280998762":"4. Complaints","-1886635232":"A complaint is any expression of dissatisfaction by a client regarding our products or services that requires a formal response.<0/><1/>If what you submit does not fall within the scope of a complaint, we may reclassify it as a query and forward it to the relevant department for handling. However, if you believe that your query should be classified as a complaint due to its relevance to the investment services provided by {{legal_entity_name}}, you may request that we reclassify it accordingly.","-1771496016":"To submit a complaint, please send an email to <0>complaints@deriv.com, providing as much detail as possible. To help us investigate and resolve your complaint more efficiently, please include the following information:","-1197243525":"<0>•A clear and detailed description of your complaint, including any relevant dates, times, and transactions","-1795134892":"<0>•Any relevant screenshots or supporting documentation that will assist us in understanding the issue","-2053887036":"4.4. Handling your complaint","-717170429":"Once we have received the details of your complaint, we shall review it carefully and keep you updated on the handling process. We might request further information or clarifications to facilitate the resolution of the complaint.","-1841922393":"4.5. Resolving your complaint","-1327119795":"4.6. Your decision","-2019654103":"If we are unable to resolve your complaint or you are not satisfied with the outcome, you can escalate your complaint to the Office of the Arbiter for Financial Services.<0/><1/><2>Filing complaints with the Office of the Arbiter for Financial Services","-687172857":"<0>•You may file a complaint with the Arbiter for Financial Services only if you are not satisfied with our decision or the decision wasn’t made within 15 business days.","-262934706":"<0>•If the complaint is accepted by the Arbiter, you will receive another email with further details relating to the payment of the €25 complaint fee and the processes that follow.","-993572476":"<0>b.The Financial Commission has 5 days to acknowledge that your complaint was received and 14 days to answer the complaint through our Internal Dispute Resolution (IDR) procedure.","-1769159081":"<0>c.You will be able to file a complaint with the Financial Commission only if you are not satisfied with our decision or the decision wasn’t made within 14 days.","-58307244":"3. Determination phase","-356618087":"<0>b.The DRC may request additional information from you or us, who must then provide the requested information within 7 days.","-945718602":"<0>b.If you agree with a DRC decision, you will need to accept it within 14 days. If you do not respond to the DRC decision within 14 days, the complaint is considered closed.","-1500907666":"<0>d.If the decision is made in our favour, you must provide a release for us within 7 days of when the decision is made, and the complaint will be considered closed.","-429248139":"5. Disclaimer","-818926350":"The Financial Commission accepts appeals for 45 days following the date of the incident and only after the trader has tried to resolve the issue with the company directly.","-1825471709":"A whole new trading experience on a powerful yet easy to use platform.","-981017278":"Automated trading at your fingertips. No coding needed.","-583559763":"Menu","-673424733":"Demo account","-162753510":"Add real account","-1685795001":"Demo Wallet","-319395348":"Looking for CFDs? Go to Trader’s Hub","-778309978":"The link you clicked has expired. Ensure to click the link in the latest email in your inbox. Alternatively, enter your email below and click <0>Resend email for a new link.","-2101368724":"Transaction processing","-1772981256":"We'll notify you when it's complete.","-198662988":"Make a deposit to trade the world's markets!","-2007055538":"Information updated","-941870889":"The cashier is for real accounts only","-352838513":"It looks like you don’t have a real {{regulation}} account. To use the cashier, switch to your {{active_real_regulation}} real account, or get an {{regulation}} real account.","-1858915164":"Ready to deposit and trade for real?","-1208519001":"You need a real Deriv account to access the cashier.","-715867914":"Successfully deposited","-1271218821":"Account added","-197631101":"Your funds will be available for trading once the verification of your account is complete.","-835056719":"We’ve received your documents","-55435892":"We’ll need 1 - 3 days to review your documents and notify you by email. You can practice with demo accounts in the meantime.","-554054753":"Get started","-1916578937":"<0>Explore the exciting new features that your Wallet offers.","-1724438599":"<0>You're almost there!","-32454015":"Select a payment method to make a deposit into your account.<0 />Need help? Contact us via <1>live chat","-310434518":"The email input should not be empty.","-1471705969":"<0>{{title}}: {{trade_type_name}} on {{symbol}}","-1771117965":"Trade opened","-1856112961":"The URL you requested isn’t available","-304807228":"<0>You’re not logged in, or<0>Our services are unavailable in your country.","-1567989247":"Submit your proof of identity and address","-523602297":"Forex majors","-1303090739":"Up to 1:1500","-19213603":"Metals","-1264604378":"Up to 1:1000","-1728334460":"Up to 1:300","-646902589":"(US_30, US_100, US_500)","-705682181":"Malta","-1835174654":"1:30","-1647612934":"Spreads from","-1912437030":"about required verifications.","-466784048":"Regulator/EDR","-2098459063":"British Virgin Islands","-1326848138":"British Virgin Islands Financial Services Commission (License no. SIBA/L/18/1114)","-1711743223":"Forex (standard/micro), stocks, stock indices, commodities, cryptocurrencies and ETFs","-1372141447":"Straight-through processing","-1969608084":"Forex and Cryptocurrencies","-800771713":"Labuan Financial Services Authority (licence no. MB/18/0024)","-1497128311":"80+","-1501230046":"0.6 pips","-1689815930":"You will need to submit proof of identity and address once you reach certain thresholds.","-1175785439":"Deriv (SVG) LLC (company no. 273 LLC 2020)","-1344709651":"40+","-139026353":"A selfie of yourself.","-1228847561":"Verification in review.","-618322245":"Verification successful.","-149461870":"Forex: standard/exotic","-1995163270":"ETFs","-1220727671":"Standard - SVG","-865172869":"Financial - BVI","-1851765767":"Financial - Vanuatu","-558597854":"Financial - Labuan","-2052425142":"Swap-Free - SVG","-1192904361":"Deriv X Demo","-283929334":"Deriv cTrader Demo","-1269597956":"MT5 Platform","-1302404116":"Maximum leverage","-239789243":"(License no. SIBA/L/18/1114)","-941636117":"MetaTrader 5 Linux app","-1434036215":"Demo Financial","-659955365":"Swap-Free","-1416247163":"Financial STP","-1637969571":"Demo Swap-Free","-1882063886":"Demo CFDs","-1347908717":"Demo Financial SVG","-1780324582":"SVG","-860609405":"Password","-742647506":"Fund transfer","-712681566":"Peer-to-peer exchange","-1267880283":"{{field_name}} is required","-2084509650":"{{field_name}} is not properly formatted.","-790488576":"Forgot password?","-476558960":"If you don’t have open positions","-1385484963":"Confirm to change your {{platform}} password","-1990902270":"This will change the password to all of your {{platform}} accounts.","-12535938":"*Volatility 250 Index, Volatility 150 Index, Boom 300 and Crash 300 Index","-2104148631":"Commissions apply","-201485855":"Up to","-700260448":"demo","-1769158315":"real","-1922462747":"Trader's hub","-16858060":"You have a new Deriv MT5 password to log in to your Deriv MT5 accounts on the web and mobile apps.","-1868608634":"Current password","-2092058806":"8 to 16 characters","-2051033705":"A special character such as ( _ @ ? ! / # )","-1762249687":"A lowercase letter","-535365199":"Enter your {{platform}} password to add a {{platform_name}} {{account}} account.","-184453418":"Enter your {{platform}} password","-393388362":"We’re reviewing your documents. This should take about 1 to 3 days.","-2057918502":"Hint: You may have entered your Deriv password, which is different from your {{platform}} password.","-267598687":"Congratulations, you have successfully created your <0/>{{category}} {{platform}} {{type}} account. To start trading, <1 />transfer funds <2 />from your Deriv account into this account.","-1475660820":"Your Deriv MT5 {{type}} account is ready. ","-1184248732":"Congratulations, you have successfully created your <0/>{{category}} {{platform}} {{type}} account. ","-1928229820":"Reset Deriv X investor password","-1969916895":"Your password must contain between 8-16 characters that include uppercase and lowercase letters, and at least one number and special character ( _ @ ? ! / # ).","-1087845020":"main","-1950683866":"investor","-1874242353":"Fund top up","-89838213":"You can top up your demo account with an additional <0> if your balance is <1> or less.","-1211122723":"{{ platform }} {{ account_title }} account","-78895143":"Current balance","-149993085":"New current balance","-1615126227":"Manage up to {{max_count}} Deriv cTrader accounts. While you can convert any of your Deriv cTrader accounts into a strategy account, please take note of the following:","-1547739386":"To ensure you can always create and manage strategies with fees, <0>keep at least one account free from being a strategy provider. This way, you’ll always have an account ready for collecting fees, allowing you to have up to four strategies where you may impose fees.","-2145356061":"Download Deriv X on your phone to trade with the Deriv X account","-1547458328":"Run cTrader on your browser","-747382643":"Get another cTrader account","-1986258847":"Server maintenance starts at 01:00 GMT every Sunday, and this process may take up to 2 hours to complete. Service may be disrupted during this time.","-499504077":"Choose a cTrader account to transfer","-251202291":"Broker","-678964540":"to","-206829624":"(1:x)","-616293830":"Enjoy dynamic leverage of <0>up to 1:1500 when trading selected instruments in the forex, commodities, cryptocurrencies, and stock indices markets. Our dynamic leverage adjusts automatically to your trading position, based on asset type and trading volume.","-2042845290":"Your investor password has been changed.","-1882295407":"Your password has been changed.","-254497873":"Use this password to grant viewing access to another user. While they may view your trading account, they will not be able to trade or take any other actions.","-161656683":"Current investor password","-374736923":"New investor password","-1793894323":"Create or reset investor password","-21438174":"Add your Deriv cTrader account under Deriv (SVG) LLC (company no. 273 LLC 2020).","-2026018074":"Add your Deriv MT5 <0>{{account_type_name}} account under Deriv (SVG) LLC (company no. 273 LLC 2020).","-162320753":"Add your Deriv MT5 <0>{{account_type_name}} account under Deriv (BVI) Ltd, regulated by the British Virgin Islands Financial Services Commission (License no. SIBA/L/18/1114).","-271828350":"Get more out of Deriv MT5 Financial","-2125860351":"Choose a jurisdiction for your Deriv MT5 CFDs account","-1460321521":"Choose a jurisdiction for your {{account_type}} account","-637537305":"Download {{ platform }} on your phone to trade with the {{ platform }} {{ account }} account","-964130856":"{{existing_account_title}}","-879259635":"Enter your Deriv MT5 password to upgrade your account(s).","-1504907646":"Deriv MT5 password","-361998267":"We've introduced additional password requirements to increase your account security. Your password should:","-996995493":"Be between 8 to 16 characters.","-219163415":"Contain at least one special character.","-1446636186":"By clicking on <0>Next you agree to move your {{platform}} {{type_1}} and {{type_2}} {{from_account}} account(s) under Deriv {{account_to_migrate}} Ltd’s <1>terms and conditions.","-1766387013":"Upgrade your MT5 account(s)","-990927225":"Enter your Deriv MT5 password","-1486399361":"Trade with MT5 mobile app","-301350824":"Note: Don't have the MT5 app? Tap the <0>Trade with MT5 mobile app button to download. Once you have\n installed the app, return to this screen and hit the same button to log in.","-648956272":"Use this password to log in to your Deriv X accounts on the web and mobile apps.","-1814308691":"Please click on the link in the email to change your {{platform}} password.","-601303096":"Scan the QR code to download Deriv {{ platform }}.","-1357917360":"Web terminal","-1282933308":"Not {{barrier}}","-968190634":"Equals {{barrier}}","-1747377543":"Under {{barrier}}","-256210543":"Trading is unavailable at this time.","-1386326276":"Barrier is a required field.","-1418742026":"Higher barrier must be higher than lower barrier.","-92007689":"Lower barrier must be lower than higher barrier.","-1095538960":"Please enter the start time in the format \"HH:MM\".","-1975910372":"Minute must be between 0 and 59.","-866277689":"Expiry time cannot be in the past.","-1455298001":"Now","-1150099396":"We’re working to have this available for you soon. If you have another account, switch to that account to continue trading. You may add a Deriv MT5 Financial.","-28115241":"{{platform_name_trader}} is not available for this account","-453920758":"Go to {{platform_name_mt5}} dashboard","-402175529":"History","-1013917510":"The reset time is {{ reset_time }}","-925402280":"Indicative low spot","-1075414250":"High spot","-902712434":"Deal cancellation","-988484646":"Deal cancellation (executed)","-444882676":"Deal cancellation (active)","-13423018":"Reference ID","-1371082433":"Reset barrier","-1402197933":"Reset time","-2035315547":"Low barrier","-1745835713":"Selected tick","-1551639437":"No history","-1214703885":"You have yet to update either take profit or stop loss","-504849554":"It will reopen at","-59803288":"In the meantime, try our synthetic indices. They simulate real-market volatility and are open 24/7.","-1278109940":"See open markets","-694105443":"This market is closed","-104603605":"You cannot trade as your documents are still under review. We will notify you by email once your verification is approved.","-439389714":"We’re working on it","-770929448":"Go to {{platform_name_smarttrader}}","-347156282":"Submit Proof","-138538812":"Log in or create a free account to place a trade.","-2036388794":"Create free account","-1813736037":"No further trading is allowed on this contract type for the current trading session. For more info, refer to our <0>terms and conditions.","-1043795232":"Recent positions","-153220091":"{{display_value}} Tick","-802374032":"Hour","-1700010072":"This feature is unavailable for tick intervals. Switch to minutes, hours, or days.","-663862998":"Markets","-1145293111":"This market will reopen at","-1341681145":"When this is active, you can cancel your trade within the chosen time frame. Your stake will be returned without loss.","-2069438609":"No matches found","-97673874":"No closed trades","-1727419550":"Your closed trades will be shown here.","-225500551":"Entry & exit details","-1022682526":"Your favourite markets will appear here.","-315741954":"{{amount}} trade types","-232254547":"Custom","-1251526905":"Last 7 days","-1539223392":"Last 90 days","-1123299427":"Your stake will continue to grow as long as the current spot price remains within a specified <0>range from the <1>previous spot price. Otherwise, you lose your stake and the trade is terminated.","-1052279158":"Your <0>payout is the sum of your initial stake and profit.","-274058583":"<0>Take profit is an additional feature that lets you manage your risk by automatically closing the trade when your profit reaches the target amount. This feature is unavailable for ongoing accumulator contracts.","-1819891401":"You can close your trade anytime. However, be aware of <0>slippage risk.","-859589563":"If you select “<0>Odd”, you will win the payout if the last digit of the last tick is an odd number (i.e. 1, 3, 5, 7, or 9).","-1911850849":"If the exit spot is equal to the barrier, you don’t win the payout.","-618782785":"Use multipliers to leverage your potential returns. Predict if the asset price will move upward (bullish) or downward (bearish). We’ll charge a commission when you open a multipliers trade.","-565391674":"If you select \"<0>Up\", your total profit/loss will be the percentage increase in the underlying asset price, times the multiplier and stake, minus commissions.","-1158764468":"If you select “<0>Over”, you will win the payout if the last digit of the last tick is greater than your prediction.","-1268105691":"If you select “<0>Under”, you will win the payout if the last digit of the last tick is less than your prediction.","-444119935":"If you select \"<0>Rise\", you win the payout if the exit spot is strictly higher than the entry spot.","-521457890":"If you select “<0>Touch”, you win the payout if the market touches the barrier at any time during the contract period.","-1020271578":"If you select “<0>Down”, you’ll earn a payout if the spot price never rises above the barrier.","-403573339":"Your payout is equal to the <0>payout per point multiplied by the difference between the <1>final price and the barrier. You will only earn a profit if your payout is higher than your initial stake.","-1307465836":"You may sell the contract up to 15 seconds before expiry. If you do, we’ll pay you the <0>contract value.","-1121315439":"Vanilla options allow you to predict an upward (bullish) or downward (bearish) direction of the underlying asset by purchasing a “Call” or a “Put”.","-1763848396":"Put","-1119872505":"How to trade ","-586636553":"Watch this video to learn about this trade type.","-2017825013":"Got it","-1117111580":"Removed from favorites","-197162398":"CLOSED","-1913695340":"Order Details","-1882287418":"How do I earn a payout?","-725670935":"Take profit and stop loss are unavailable while deal cancellation is enabled.","-1331298683":"Take profit can’t be adjusted for ongoing accumulator contracts.","-509210647":"Try searching for something else.","-99964540":"When your profit reaches or exceeds the set amount, your trade will be closed automatically.","-542594338":"Max. payout","-1622900200":"Enabled","-2131851017":"Growth rate","-339236213":"Multiplier","-1396928673":"Risk Management","-1358367903":"Stake","-1024650723":"Note: Cannot be adjusted for ongoing accumulator contracts.","-1853307892":"Set your trade","-1221049974":"Final price","-843831637":"Stop loss","-583023237":"This is the resale value of your contract, based on the prevailing market conditions (e.g, the current spot), including additional commissions if any.","-1476381873":"The latest asset price when the trade closure is processed by our servers.","-584445859":"This is when your contract will expire based on the duration or end time you’ve selected. If the duration is more than 24 hours, the cut-off time and expiry date will apply instead.","-1247327943":"This is the spot price of the last tick at expiry.","-1422269966":"You can choose a growth rate with values of 1%, 2%, 3%, 4%, and 5%.","-1186791513":"Payout is the sum of your initial stake and profit.","-1482134885":"We calculate this based on the strike price and duration you’ve selected.","-1682624802":"It is a percentage of the previous spot price. The percentage rate is based on your choice of the index and the growth rate.","-1545819495":"Your trade will be closed automatically at the nearest available asset price when your loss reaches a certain percentage of your stake, but your loss never exceeds your stake. This percentage depends on the chosen underlying asset and the Multiplier.","-1293590531":"If you select “Call”, you’ll earn a payout if the final price is above the strike price at expiry. Otherwise, you won’t receive a payout.","-1432332852":"If you select ‘Put”, you’ll earn a payout if the final price is below the strike price at expiry. Otherwise, you won’t receive a payout.","-468501352":"If you select this feature, your trade will be closed automatically at the nearest available asset price when your profit reaches or exceeds the take profit amount. Your profit may be more than the amount you entered depending on the market price at closing.","-993480898":"Accumulators","-123659792":"Vanillas","-1226595254":"Turbos","-922253974":"Rise/Fall","-1361254291":"Higher/Lower","-1691868913":"Touch/No Touch","-330437517":"Matches/Differs","-657360193":"Over/Under","-231957809":"Win maximum payout if the exit spot is higher than or equal to the upper barrier.","-464144986":"Win maximum payout if the exit spot is lower than or equal to the lower barrier.","-1031456093":"Win up to maximum payout if exit spot is between lower and upper barrier, in proportion to the difference between upper barrier and exit spot.","-968162707":"No payout if exit spot is above or equal to the upper barrier.","-2089488446":"If you select \"Ends Between\", you win the payout if the exit spot is strictly higher than the Low barrier AND strictly lower than the High barrier.","-1876950330":"If you select \"Ends Outside\", you win the payout if the exit spot is EITHER strictly higher than the High barrier, OR strictly lower than the Low barrier.","-546460677":"If the exit spot is equal to either the Low barrier or the High barrier, you don't win the payout.","-1929209278":"If you select \"Even\", you will win the payout if the last digit of the last tick is an even number (i.e., 2, 4, 6, 8, or 0).","-2038865615":"If you select \"Odd\", you will win the payout if the last digit of the last tick is an odd number (i.e., 1, 3, 5, 7, or 9).","-1959473569":"If you select \"Lower\", you win the payout if the exit spot is strictly lower than the barrier.","-1350745673":"If the exit spot is equal to the barrier, you don't win the payout.","-93996528":"By purchasing the \"Close-to-Low\" contract, you'll win the multiplier times the difference between the close and low over the duration of the contract.","-420387848":"The high is the highest point ever reached by the market during the contract period.","-1722190480":"By purchasing the \"High-to-Low\" contract, you'll win the multiplier times the difference between the high and low over the duration of the contract.","-1281286610":"If you select \"Matches\", you will win the payout if the last digit of the last tick is the same as your prediction.","-1113825265":"Additional features are available to manage your positions: “<0>Take profit” and “<0>Stop loss” allow you to adjust your level of risk aversion.","-1104397398":"Additional features are available to manage your positions: “<0>Take profit”, “<0>Stop loss” and “<0>Deal cancellation” allow you to adjust your level of risk aversion.","-1272255095":"If the exit spot is equal to the barrier or the new barrier (if a reset occurs), you don't win the payout.","-1392065699":"If you select \"Rise\", you win the payout if the exit spot is strictly higher than the entry spot.","-1762566006":"If you select \"Fall\", you win the payout if the exit spot is strictly lower than the entry spot.","-1435306976":"If you select \"Allow equals\", you win the payout if exit spot is higher than or equal to entry spot for \"Rise\". Similarly, you win the payout if exit spot is lower than or equal to entry spot for \"Fall\".","-1812957362":"If you select \"Stays Between\", you win the payout if the market stays between (does not touch) either the High barrier or the Low barrier at any time during the contract period","-220379757":"If you select \"Goes Outside\", you win the payout if the market touches either the High barrier or the Low barrier at any time during the contract period.","-299450697":"If you select \"High Tick\", you win the payout if the selected tick is the highest among the next five ticks.","-1416078023":"If you select \"Touch\", you win the payout if the market touches the barrier at any time during the contract period.","-1565216130":"If you select <0>\"Up\", you’ll earn a payout if the spot price never drops below the barrier.","-1336860323":"If you select <0>\"Down\", you’ll earn a payout if the spot price never rises above the barrier.","-1547935605":"Your payout is equal to the <0>payout per point multiplied by the difference between the <0>final price and the barrier. You will only earn a profit if your payout is higher than your initial stake.","-351875097":"Number of ticks","-729830082":"View less","-1649593758":"Trade info","-1382749084":"Go back to trading","-1239477911":"second","-1585766960":"min","-1652791614":"mins","-1977959027":"hours","-442488432":"day","-337314714":"days","-1435392215":"About deal cancellation","-1192773792":"Don't show this again","-471757681":"Risk management","-771725194":"Deal Cancellation","-1669741470":"The payout at expiry is equal to the payout per point multiplied by the difference between the final price and the strike price.","-1186082278":"Your payout is equal to the payout per point multiplied by the difference between the final price and barrier.","-1890561510":"Cut-off time","-878534036":"If you select \"Call\", you’ll earn a payout if the final price is above the strike price at expiry. Otherwise, you won’t receive a payout.","-1587076792":"If you select \"Put\", you’ll earn a payout if the final price is below the strike price at expiry. Otherwise, you won’t receive a payout.","-565990678":"Your contract will expire on this date (in GMT), based on the End time you’ve selected.","-477936848":"We use next-tick-execution mechanism, which is the next asset price when the trade opening is processed by our servers.","-148680560":"Spot price of the last tick upon reaching expiry.","-1123926839":"Contracts will expire at exactly 14:00:00 GMT on your selected expiry date.","-1904828224":"We’ll offer to buy your contract at this price should you choose to sell it before its expiry. This is based on several factors, such as the current spot price, duration, etc. However, we won’t offer a contract value if the remaining duration is below 24 hours.","-127118348":"Choose {{contract_type}}","-543478618":"Try checking your spelling or use a different term","-338707425":"Minimum duration is 1 day","-1003473648":"Duration: {{duration}} day","-700280380":"Deal cancel. fee","-8998663":"Digit: {{last_digit}} ","-718750246":"Your stake will grow at {{growth_rate}}% per tick as long as the current spot price remains within ±{{tick_size_barrier_percentage}} from the previous spot price.","-690963898":"Your contract will be automatically closed when your payout reaches this amount.","-511541916":"Your contract will be automatically closed upon reaching this number of ticks.","-438655760":"<0>Note: You can close your trade anytime. Be aware of slippage risk.","-774638412":"Stake must be between {{min_stake}} {{currency}} and {{max_stake}} {{currency}}","-434270664":"Current Price","-1956787775":"Barrier Price:","-1513281069":"Barrier 2","-390994177":"Should be between {{min}} and {{max}}","-1231210510":"Tick","-2055106024":"Toggle between advanced and simple duration settings","-1012793015":"End time","-1804019534":"Expiry: {{date}}","-2037881712":"Your contract will be closed automatically at the next available asset price on <0>.","-629549519":"Commission <0/>","-2131859340":"Stop out <0/>","-1686280757":"<0>{{commission_percentage}}% of (<1/> * {{multiplier}})","-732683018":"When your profit reaches or exceeds this amount, your trade will be closed automatically.","-989393637":"Take profit can't be adjusted after your contract starts.","-194424366":"above","-857660728":"Strike Prices","-1346404690":"You receive a payout at expiry if the spot price never touches or breaches the barrier throughout the contract duration. Otherwise, your contract will be terminated early.","-1572548510":"Ups & Downs","-71301554":"Ins & Outs","-952298801":"Look Backs","-763273340":"Digits","-420223912":"Clean up Blocks","-301596978":"Collapse Blocks","-2002533437":"Custom function","-215053350":"with:","-1257232389":"Specify a parameter name:","-1885742588":"with: ","-188442606":"function {{ function_name }} {{ function_params }} {{ dummy }}","-313112159":"This block is similar to the one above, except that this returns a value. The returned value can be assigned to a variable of your choice.","-1783320173":"Prematurely returns a value within a function","-1485521724":"Conditional return","-1482801393":"return","-46453136":"get","-1838027177":"first","-1182568049":"Get list item","-1675454867":"This block gives you the value of a specific item in a list, given the position of the item. It can also remove the item from the list.","-381501912":"This block creates a list of items from an existing list, using specific item positions.","-426766796":"Get sub-list","-1679267387":"in list {{ input_list }} find {{ first_or_last }} occurence of item {{ input_value }}","-2087996855":"This block gives you the position of an item in a given list.","-422008824":"Checks if a given list is empty","-1343887675":"This block checks if a given list is empty. It returns “True” if the list is empty, “False” if otherwise.","-1548407578":"length of {{ input_list }}","-1786976254":"This block gives you the total number of items in a given list.","-2113424060":"create list with item {{ input_item }} repeated {{ number }} times","-1955149944":"Repeat an item","-434887204":"set","-197957473":"as","-851591741":"Set list item","-1874774866":"ascending","-1457178757":"Sorts the items in a given list","-350986785":"Sort list","-324118987":"make text from list","-155065324":"This block creates a list from a given string of text, splitting it with the given delimiter. It can also join items in a list into a string of text.","-459051222":"Create list from text","-977241741":"List Statement","-451425933":"{{ break_or_continue }} of loop","-323735484":"continue with next iteration","-1592513697":"Break out/continue","-713658317":"for each item {{ variable }} in list {{ input_list }}","-1825658540":"Iterates through a given list","-952264826":"repeat {{ number }} times","-887757135":"Repeat (2)","-1608672233":"This block is similar to the block above, except that the number of times it repeats is determined by a given variable.","-533154446":"Repeat (1)","-1059826179":"while","-1893063293":"until","-279445533":"Repeat While/Until","-1003706492":"User-defined variable","-359097473":"set {{ variable }} to {{ value }}","-1588521055":"Sets variable value","-980448436":"Set variable","-1538570345":"Get the last trade information and result, then trade again.","-222725327":"Here is where you can decide if your bot should continue trading.","-1638446329":"Result is {{ win_or_loss }}","-1968029988":"Last trade result","-1588406981":"You can check the result of the last trade with this block.","-1459154781":"Contract Details: {{ contract_detail }}","-1652241017":"Reads a selected property from contract details list","-985351204":"Trade again","-2082345383":"These blocks transfer control to the Purchase conditions block.","-172574065":"This block will transfer the control back to the Purchase conditions block, enabling you to purchase another contract.","-403103225":"restart","-837044282":"Ask Price {{ contract_type }}","-1033917049":"This block returns the purchase price for the selected trade type.","-1863737684":"2. Purchase conditions","-228133740":"Specify contract type and purchase conditions.","-1098726473":"This block is mandatory. Only one copy of this block is allowed. You can place the Purchase block (see below) here as well as conditional blocks to define your purchase conditions.","-1777988407":"Payout {{ contract_type }}","-511116341":"This block returns the potential payout for the selected trade type","-1943211857":"Potential payout","-1738427539":"Purchase","-813464969":"buy","-53668380":"True if active contract can be sold before expiration at current market price","-43337012":"Sell profit/loss","-2112866691":"Returns the profit/loss from selling at market price","-2132417588":"This block gives you the potential profit or loss if you decide to sell your contract.","-1360483055":"set {{ variable }} to Bollinger Bands {{ band_type }} {{ dummy }}","-20542296":"Calculates Bollinger Bands (BB) from a list with a period","-1951109427":"Bollinger Bands (BB)","-857226052":"BB is a technical analysis indicator that’s commonly used by traders. The idea behind BB is that the market price stays within the upper and lower bands for 95% of the time. The bands are the standard deviations of the market price, while the line in the middle is a simple moving average line. If the price reaches either the upper or lower band, there’s a possibility of a trend reversal.","-325196350":"set {{ variable }} to Bollinger Bands Array {{ band_type }} {{ dummy }}","-199689794":"Similar to BB. This block gives you a choice of returning the values of either the lower band, higher band, or the SMA line in the middle.","-920690791":"Calculates Exponential Moving Average (EMA) from a list with a period","-960641587":"EMA is a type of moving average that places more significance on the most recent data points. It’s also known as the exponentially weighted moving average. EMA is different from SMA in that it reacts more significantly to recent price changes.","-1557584784":"set {{ variable }} to Exponential Moving Average Array {{ dummy }}","-32333344":"Calculates Moving Average Convergence Divergence (MACD) from a list","-628573413":"MACD is calculated by subtracting the long-term EMA (26 periods) from the short-term EMA (12 periods). If the short-term EMA is greater or lower than the long-term EMA than there’s a possibility of a trend reversal.","-1133676960":"Fast EMA Period {{ input_number }}","-883166598":"Period {{ input_period }}","-450311772":"set {{ variable }} to Relative Strength Index {{ dummy }}","-1861493523":"Calculates Relative Strength Index (RSI) list from a list of values with a period","-880048629":"Calculates Simple Moving Average (SMA) from a list with a period","-1150972084":"Market direction","-276935417":"This block is used to determine if the market price moves in the selected direction or not. It gives you a value of “True” or “False”.","-764931948":"in candle list get # from end {{ input_number }}","-924607337":"Returns the last digit of the latest tick","-560033550":"Returns the list of last digits of 1000 recent tick values","-74062476":"Make a List of {{ candle_property }} values in candles list with interval: {{ candle_interval_type }}","-1556495906":"Returns a list of specific values from a candle list according to selected time interval","-166816850":"Create a list of candle values (1)","-1174859923":"Read the selected candle value","-1972165119":"Read candle value (1)","-1956100732":"You can use this block to analyze the ticks, regardless of your trades","-443243232":"The content of this block is called on every tick. Place this block outside of any root block.","-641399277":"Last Tick","-1628954567":"Returns the value of the last tick","-1332756793":"This block gives you the value of the last tick.","-2134440920":"Last Tick String","-1466340125":"Tick value","-467913286":"Tick value Description","-785831237":"This block gives you a list of the last 1000 tick values.","-1546430304":"Tick List String Description","-1788626968":"Returns \"True\" if the given candle is black","-436010611":"Make a list of {{ candle_property }} values from candles list {{ candle_list }}","-1384340453":"Returns a list of specific values from a given candle list","-584859539":"Create a list of candle values (2)","-2010558323":"Read {{ candle_property }} value in candle {{ input_candle }}","-2846417":"This block gives you the selected candle value.","-1587644990":"Read candle value (2)","-1202212732":"This block returns account balance","-1737837036":"Account balance","-1963883840":"Put your blocks in here to prevent them from being removed","-1284013334":"Use this block if you want some instructions to be ignored when your bot runs. Instructions within this block won’t be executed.","-1217253851":"Log","-1987568069":"Warn","-104925654":"Console","-1956819233":"This block displays messages in the developer's console with an input that can be either a string of text, a number, boolean, or an array of data.","-1450461842":"Load block from URL: {{ input_url }}","-1088614441":"Loads blocks from URL","-1747943728":"Loads from URL","-1008209188":"Sends a message to Telegram","-1218671372":"Displays a notification and optionally play selected sound","-2099284639":"This block gives you the total profit/loss of your trading strategy since your bot started running. You can reset this by clicking “Clear stats” on the Transaction Stats window, or by refreshing this page in your browser.","-683825404":"Total Profit String","-718220730":"Total Profit String Description","-1861858493":"Number of runs","-264195345":"Returns the number of runs","-303451917":"This block gives you the total number of times your bot has run. You can reset this by clicking “Clear stats” on the Transaction Stats window, or by refreshing this page in your browser.","-2132861129":"Conversion Helper Block","-74095551":"Seconds Since Epoch","-15528039":"Returns the number of seconds since January 1st, 1970","-729807788":"This block returns the number of seconds since January 1st, 1970.","-1370107306":"{{ dummy }} {{ stack_input }} Run after {{ number }} second(s)","-558838192":"Delayed run","-1975250999":"This block converts the number of seconds since the Unix Epoch (1 January 1970) into a string of text representing the date and time.","-702370957":"Convert to date/time","-982729677":"Convert to timestamp","-311268215":"This block converts a string of text that represents the date and time into seconds since the Unix Epoch (1 January 1970). The time and time zone offset are optional. Example: 2019-01-01 21:03:45 GMT+0800 will be converted to 1546347825.","-1374685318":"Your contract is closed automatically when your loss is more than or equals to this amount. This block can only be used with the multipliers trade type.","-1797602591":"Stop Loss: {{ currency }} {{ stop_loss }}","-1214929127":"Stop loss must be a positive number.","-1626615625":"Take Profit (Multiplier)","-1871944173":"Accumulator trade options","-625636913":"Amount must be a positive number.","-780745489":"If the contract type is “Both”, then the Purchase Conditions should include both Rise and Fall using the “Conditional Block\"","-2142851225":"Multiplier trade options","-1466383897":"Duration: {{ duration_unit }} {{ duration_value }}","-440702280":"Trade options","-1193894978":"Define your trade options such as duration and stake. Some options are only applicable for certain trade types.","-46523443":"Duration value is not allowed. To run the bot, please enter a value between {{min}} to {{max}}.","-1483427522":"Trade Type: {{ trade_type_category }} > {{ trade_type }}","-323348124":"1. Trade parameters","-1671903503":"Run once at start:","-783173909":"Trade options:","-376956832":"Here is where you define the parameters of your contract.","-1244007240":"if {{ condition }} then","-1577206704":"else if","-33796979":"true","-1434883449":"This is a single block that returns a boolean value, either true or false.","-1946404450":"Compares two values","-979918560":"This block converts the boolean value (true or false) to its opposite.","-2047257743":"Null","-1274387519":"Performs selected logic operation","-766386234":"This block performs the \"AND\" or the \"OR\" logic operation.","-790995537":"test {{ condition }}","-1860211657":"if false {{ return_value }}","-1643760249":"This block tests if a given value is true or false and returns “True” or “False” accordingly.","-1551875333":"Test value","-52486882":"Arithmetical operations","-1010436425":"This block adds the given number to the selected variable","-999773703":"Change variable","-1272091683":"Mathematical constants","-1396629894":"constrain {{ number }} low {{ low_number }} high {{ high_number }}","-425224412":"This block constrains a given number so that it is within a set range.","-2072551067":"Constrain within a range","-43523220":"remainder of {{ number1 }} ÷ {{ number2 }}","-1291857083":"Returns the remainder after a division","-592154850":"Remainder after division","-736665095":"Returns the remainder after the division of the given numbers.","-1266992960":"Math Number Description","-77191651":"{{ number }} is {{ type }}","-817881230":"even","-142319891":"odd","-1000789681":"whole","-1735674752":"Test a number","-1017805068":"This block tests a given number according to the selection and it returns a value of “True” or “False”. Available options: Even, Odd, Prime, Whole, Positive, Negative, Divisible","-1858332062":"Number","-1053492479":"Enter an integer or fractional number into this block. Please use `.` as a decimal separator for fractional numbers.","-927097011":"sum","-1653202295":"max","-1555878023":"average","-1748351061":"mode","-992067330":"Aggregate operations","-1691561447":"This block gives you a random fraction between 0.0 to 1.0","-523625686":"Random fraction number","-933024508":"Rounds a given number to an integer","-1656927862":"This block rounds a given number according to the selection: round, round up, round down.","-1495304618":"absolute","-61210477":"Operations on a given number","-181644914":"This block performs the selected operations to a given number.","-840732999":"to {{ variable }} append text {{ input_text }}","-1469497908":"Appends a given text to a variable","-1851366276":"Text Append","-1666316828":"Appends a given text to a variable.","-1902332770":"Transform {{ input_text }} to {{ transform_type }}","-1489004405":"Title Case","-904432685":"Changes text case accordingly","-882381096":"letter #","-1027605069":"letter # from end","-2066990284":"random letter","-337089610":"in text {{ input_text1 }} find {{ first_or_last }} occurence of text {{ input_text2 }}","-1966694141":"Searches through a string of text for a specific occurrence of a given character or word, and returns the position.","-697543841":"Text join","-141160667":"length of {{ input_text }}","-1133072029":"Text String Length","-1109723338":"print {{ input_text }}","-736668830":"Print","-1631669591":"string","-1768939692":"number","-1821552998":"trim spaces from {{ side }} of {{ input_text }}","-801766026":"right side","-474779821":"Trims spaces","-1750478127":"New variable name","-2047029150":"Unable to load the block file.","-1410769167":"Target must be an XML file","-609157479":"This URL is already loaded","-260939264":"Collapsed","-894560707":"function","-1867119688":"Duplicate","-1710107207":"Add Comment","-1549535410":"Remove Comment","-918450098":"Blocks","-241945454":"Proposals are not ready","-1087890592":"Maximum loss amount reached","-1030545878":"You are rate limited for: {{ message_type }}, retrying in {{ delay }}s (ID: {{ request }})","-490766438":"You are disconnected, retrying in {{ delay }}s","-339973827":"The market is closed","-1389975609":"unknown","-1900515692":"Duration must be a positive integer","-245297595":"Please login","-1445046468":"Given candle is not valid","-1891622945":"{{hourPast}}h ago","-1919680487":"workspace","-1703118772":"The {{block_type}} block is misplaced from {{missing_space}}.","-1785726890":"purchase conditions","-1993203952":"Trade options accumulators","-461955353":"purchase price","-172348735":"profit","-1624674721":"contract type","-1644154369":"entry spot time","-510792478":"entry spot price","-1974651308":"exit spot time","-1600267387":"exit spot price","-514917720":"barrier","-1072292603":"No Change","-795152863":"green","-1640576332":"blue","-804983649":"yellow","-94281841":"red","-1242470654":"Earned money","-137444201":"Buy","-841561409":"Put Spread","-1429914047":"Low","-1893628957":"Open Time","-1896106455":"10 minutes","-999492762":"15 minutes","-1978767852":"30 minutes","-293628675":"1 hour","-385604445":"2 hours","-1965813351":"4 hours","-525321833":"1 day","-151151292":"Asians","-1048378719":"Reset Call/Reset Put","-1282312809":"High/Low Ticks","-1237186896":"Only Ups/Only Downs","-529846150":"Seconds","-1635771697":"middle","-1529389221":"Histogram","-1819860668":"MACD","-1750896349":"D'Alembert","-102980621":"The Oscar's Grind Strategy is a low-risk positive progression strategy that first appeared in 1965. By using this strategy, the size of your contract will increase after successful trades, but remains unchanged after unsuccessful trades.","-462715374":"Untitled Bot","-280147477":"All transactions","-130601012":"Please select duration","-1577570698":"Start date","-1904030160":"Transaction performed by (App ID: {{app_id}})","-1876891031":"Currency","-513103225":"Transaction time","-2066666313":"Credit/Debit","-1981004241":"Sell time","-1196431745":"Contract cost","-3423966":"Take profit<0 />Stop loss","-1131753095":"The {{trade_type_name}} contract details aren't currently available. We're working on making them available soon.","-360975483":"You've made no transactions of this type during this period.","-2082644096":"Current stake","-1942828391":"Max payout","-335816381":"Ends In/Ends Out","-1789807039":"Asian Up/Asian Down","-558031309":"High Tick/Low Tick","-447037544":"Buy price:","-737348236":"Contract cost:","-1694314813":"Contract value:","-113940416":"Current stake:","-1999539705":"Deal cancel. fee:","-155989831":"Decrement value","-338379841":"Indicative price:","-2027409966":"Initial stake:","-1769852749":"N/A","-726626679":"Potential profit/loss:","-1511825574":"Profit/Loss:","-499175967":"Strike Price","-706219815":"Indicative price","-1669418686":"AUD/CAD","-1548588249":"AUD/CHF","-1552890620":"AUD/JPY","-681231560":"AUD/PLN","-64938413":"AUD/USD","-1430522808":"EUR/AUD","-2020477069":"EUR/CAD","-1201853162":"EUR/CHF","-1318070255":"EUR/GBP","-1197505739":"EUR/JPY","-405907358":"EUR/USD","-1536293064":"NZD/JPY","-79700881":"NZD/USD","-642323838":"USD/CAD","-428199705":"USD/CHF","-424108348":"USD/JPY","-548255282":"USD/NOK","-1834131208":"USD/PLN","-524302516":"Silver/USD","-764731776":"Platinum/USD","-853582174":"France 40","-1096386695":"UK 100","-617646862":"Germany 40","-2077690248":"Japan 225","-512194910":"US Tech 100","-381746202":"US 500","-1935463381":"Swiss 20","-1941767726":"Euro 50","-1925264914":"Volatility 25 Index","-708579504":"Volatility 50 Index","-975255670":"Volatility 75 Index","-1736314513":"Crash 300 Index","-342128411":"Crash 500 Index","-9704319":"Crash 1000 Index","-465860988":"Bull Market Index","-280323742":"EUR Basket","-563812039":"Volatility 10 (1s) Index","-82971929":"Volatility 25 (1s) Index","-433962508":"Volatility 75 (1s) Index","-764111252":"Volatility 100 (1s) Index","-816110209":"Volatility 150 (1s) Index","-1374309449":"Volatility 200 (1s) Index","-1288044380":"Volatility 250 (1s) Index","-1164978320":"Jump 10 Index","-575272887":"BCH/USD","-295406873":"BTC/ETH","-1713556301":"ZMR/USD","-2046638412":"XRP/USD","-1263203461":"BTC/USD","-1112522776":"DSH/USD","-460689370":"LTC/USD","-132112961":"Sharkfin","-1715390759":"I want to do this later","-56163366":"I don't have any of these","-175164838":"{{seconds_passed}}s ago","-514136557":"{{minutes_passed}}m ago","-1420737287":"{{hours_passed}}h ago","-2092611555":"Sorry, this app is unavailable in your current location.","-1488537825":"If you have an account, log in to continue.","-1603581277":"minutes","-886317740":"The <0>date of birth on your identity document doesn't match your profile.","-1606307809":"We were unable to verify the identity document with the details provided.","-475787720":"The verification status was empty, rejected for lack of information.","-1627868670":"Your identity document has expired.","-1302288704":"The document’s owner is deceased.","-895884696":"The <0>name and <0>date of birth on your identity document don't match your profile.","-1231856133":"The verification status is not available, provider says: Needs Technical Investigation.","-433687715":"For enhanced security, we need to reverify your identity. Kindly resubmit your proof of identity to unlock your account.","-1637538521":"Your document appears to be invalid.","-876579004":"The name on your document doesn’t match your profile.","-746520172":"Some details on your document appear to be invalid, missing, or unclear.","-2146200521":"The serial number of your document couldn’t be verified.","-1945323197":"Your document appears to be in black and white. Please upload a colour photo of your document.","-631393256":"Your document contains markings or text that should not be on your document.","-609103016":"The image quality of your document is too low. Please provide a hi-res photo of your identity document.","-530935718":"We’re unable to verify the document you provided because some details appear to be missing. Please try again or provide another document.","-1027031626":"We’re unable to verify the document you provided because it appears to be damaged. Please try again or upload another document.","-1671621833":"The front of your document appears to be missing. Please provide both sides of your identity document.","-727588232":"Your document appears to be a scanned copy that contains markings or text that shouldn’t be on your document.","-1435064387":"Your document appears to be a printed copy.","-624316211":"Your document appears to be a photo of a device screen.","-1714959941":"This chart display is not ideal for tick contracts","-1254554534":"Please change the chart duration to tick for a better trading experience.","-1658230823":"Contract was sold for <0 />.","-1905867404":"Contract cancelled"} \ No newline at end of file +{"0":"","1485191":"1:1000","2082741":"additional document number","2091451":"Deriv Bot - your automated trading partner","3125515":"Your Deriv MT5 password is for logging in to your Deriv MT5 accounts on the desktop, web, and mobile apps.","3215342":"Last 30 days","3420069":"To avoid delays, enter your <0>name and <0>date of birth exactly as they appear on your identity document.","4547840":"<0>Verify your account to transfer funds. <1>Verify now","5149403":"Learn more about trade types","7100308":"Hour must be between 0 and 23.","9488203":"Deriv Bot is a web-based strategy builder for trading digital options. It’s a platform where you can build your own automated trading bot using drag-and-drop 'blocks'.","9757544":"Please submit your proof of address","11533428":"Trade bigger positions with less capital on a wide range of global markets. <0>Learn more","11539750":"set {{ variable }} to Relative Strength Index Array {{ dummy }}","11706633":"Loss threshold: The bot will stop trading if your total loss exceeds this amount.","11872052":"Yes, I'll come back later","14365404":"Request failed for: {{ message_type }}, retrying in {{ delay }}s","15377251":"Profit amount: {{profit}}","17843034":"Check proof of identity document verification status","19424289":"Username","19552684":"USD Basket","21035405":"Please tell us why you’re leaving. (Select up to {{ allowed_reasons }} reasons.)","23745193":"Take me to demo","24900606":"Gold Basket","25854018":"This block displays messages in the developer’s console with an input that can be either a string of text, a number, boolean, or an array of data.","26566655":"Summary","26596220":"Finance","27582393":"Example :","27582767":"{{amount}} {{currency}}","27731356":"Your account is temporarily disabled. Please contact us via <0>live chat to enable deposits and withdrawals again.","27830635":"Deriv (V) Ltd","28581045":"Add a real MT5 account","33433576":"Please use an e-wallet to withdraw your funds.","35089987":"Upload the front and back of your driving licence.","40632954":"Why is my card/e-wallet not working?","41737927":"Thank you","44877997":"Residence permit","45453595":"Binary Coin","45821474":"Proof of income","46523711":"Your proof of identity is verified","49404821":"If you buy a \"<0>{{trade_type}}\" option, you receive a payout at expiry if the final price is {{payout_status}} the strike price. Otherwise, your “<0>{{trade_type}}” option will expire worthless.","53801223":"Hong Kong 50","53964766":"5. Hit Save to download your bot. You can choose to download your bot to your device or your Google Drive.","54185751":"Less than $100,000","55340304":"Keep your current contract?","55916349":"All","57362642":"Closed","58254854":"Scopes","59169515":"If you select \"Asian Rise\", you will win the payout if the last tick is higher than the average of the ticks.","59341501":"Unrecognized file format","59662816":"Stated limits are subject to change without prior notice.","62748351":"List Length","62910715":"You already have an open position for this contract type, retrying in {{ delay }}s","63869411":"This block tests a given number according to the selection","64402604":"Check transfer information","65185694":"Fiat onramp","65982042":"Total","66519591":"Investor password","66610627":"We were unable to verify your selfie because it’s not clear. Please take a clearer photo and try again. Ensure that there’s enough light where you are and that your entire face is in the frame.","67923436":"No, Deriv Bot will stop running when your web browser is closed.","68885999":"Repeats the previous trade when an error is encountered.","69005593":"The example below restarts trading after 30 or more seconds after 1 minute candle was started.","71016232":"OMG/USD","71232823":"Manage funds","71445658":"Open","71563326":"A fast and secure fiat-to-crypto payment service. Deposit cryptocurrencies from anywhere in the world using your credit/debit cards and bank transfers.","71853457":"$100,001 - $500,000","72500774":"Please fill in Tax residence.","73086872":"You have self-excluded from trading","73326375":"The low is the lowest point ever reached by the market during the contract period.","74963864":"Under","76635112":"To proceed, resubmit these documents","76916358":"You have reached the withdrawal limit.<0/>Please upload your proof of identity and address to lift the limit to continue your withdrawal.","76925355":"Check your bot’s performance","77982950":"Vanilla options allow you to predict an upward (bullish) or downward (bearish) direction of the underlying asset by purchasing a \"Call\" or a \"Put\".","81009535":"Potential profit/loss","81091424":"To complete the upgrade, please log out and log in again to add more accounts and make transactions with your Wallets.","81450871":"We couldn’t find that page","82839270":"Upload the page of your passport that contains your photo.","83202647":"Collapse Block","84402478":"Where do I find the blocks I need?","84924586":"To trade options and multipliers, get a Deriv Apps account first.","85343079":"Financial assessment","85359122":"40 or more","85389154":"Steps required to continue verification on your mobile","90266322":"2. Start a chat with your newly created Telegram bot and make sure to send it some messages before proceeding to the next step. (e.g. Hello Bot!)","91993812":"The Martingale Strategy is a classic trading technique that has been used for more than a hundred years, popularised by the French mathematician Paul Pierre Levy in the 18th century.","93154671":"1. Hit Reset at the bottom of stats panel.","96381225":"ID verification failed","98473502":"We’re not obliged to conduct an appropriateness test, nor provide you with any risk warnings.","98972777":"random item","100239694":"Upload front of card from your computer","102226908":"Field cannot be empty","105871033":"Your age in the document you provided appears to be below 18 years. We’re only allowed to offer our services to clients above 18 years old, so we’ll need to close your account. If you have a balance in your account, contact us via live chat and we’ll help to withdraw your funds before your account is closed.","107537692":"These limits apply to your options trades only. For example, <0>maximum total loss refers to the losses on all your trades on options trading platforms.","108916570":"Duration: {{duration}} days","109073671":"Please use an e-wallet that you have used for deposits previously. Ensure the e-wallet supports withdrawal. See the list of e-wallets that support withdrawals <0>here.","111215238":"Move away from direct light","111718006":"End date","111931529":"Max. total stake over 7 days","113378532":"ETH/USD","115032488":"Buy price and P/L","116005488":"Indicators","117056711":"We’re updating our site","117318539":"Password should have lower and uppercase English letters with numbers.","117366356":"Turbo options allow you to predict the direction of the underlying asset’s movements.","118727646":"{{new_account_title}}","119261701":"Prediction:","119446122":"Contract type is not selected","120340777":"Complete your personal details","122617359":"View tutorial","122993457":"This is to confirm that it's you making the withdrawal request.","123454801":"{{withdraw_amount}} {{currency_symbol}}","124723298":"Upload a proof of address to verify your address","125354367":"An example of D’Alembert's Grind strategy","125443840":"6. Restart last trade on error","125842960":"{{name}} is required.","127307725":"A politically exposed person (PEP) is someone appointed with a prominent public position. Close associates and family members of a PEP are also considered to be PEPs.","129005644":"The idea is that successful trades may recoup previous losses. However, it is crucial to exercise caution as the risk can quickly increase with this strategy. With Deriv Bot, you can minimise your risk by setting a maximum stake. This is an optional risk management feature. Let’s say a maximum stake of 3 USD. If your stake for the next trade is set to exceed 3 USD, your stake will reset to the initial stake of 1 USD. If you didn't set a maximum stake, it would have increased beyond 3 USD.","129137937":"You decide how much and how long to trade. You can take a break from trading whenever you want. This break can be from 6 weeks to 5 years. When it’s over, you can extend it or resume trading after a 24-hour cooling-off period. If you don’t want to set a specific limit, leave the field empty.","129171545":"This feature is unavailable for Real account.","129729742":"Tax Identification Number*","130567238":"THEN","132596476":"In providing our services to you, we are required to ask you for some information to assess if a given product or service is appropriate for you and whether you have the experience and knowledge to understand the risks involved.<0/><0/>","132689841":"Trade on web terminal","133523018":"Please go to the Deposit page to get an address.","133536621":"and","133655768":"Note: If you wish to learn more about the Bot Builder, you can proceed to the <0>Tutorials tab.","134126193":"Try searching for markets or keywords","136790425":"Try changing or removing filters to view available positions.","137589354":"To assess your trading experience and if our products are suitable for you. Please provide accurate and complete answers, as they may affect the outcome of this assessment.","138055021":"Synthetic indices","139454343":"Confirm my limits","141265840":"Funds transfer information","141626595":"Make sure your device has a working camera","142050447":"set {{ variable }} to create text with","142390699":"Connected to your mobile","143970826":"Payment problems?","145511192":"s is the initial stake.","145633981":"Unavailable as your documents are still under review","145736466":"Take a selfie","147327552":"No favourites","150156106":"Save changes","150486954":"Token name","151279367":"2. Set the Purchase conditions. In this example, your bot will purchase a Rise contract when it starts and after a contract closes.","151646545":"Unable to read file {{name}}","152415091":"Math","152524253":"Trade the world’s markets with our popular user-friendly platform.","153485708":"Zero Spread - BVI","154274415":"The payout at expiry is equal to the payout per point multiplied by the distance between the final price and the barrier.","157593038":"random integer from {{ start_number }} to {{ end_number }}","157871994":"Link expired","158355408":"Some services may be temporarily unavailable.","160746023":"Tether as an Omni token (USDT) is a version of Tether that is hosted on the Omni layer on the Bitcoin blockchain.","160760697":"I confirm and accept {{company}} 's <0>terms and conditions","160863687":"Camera not detected","164112826":"This block allows you to load blocks from a URL if you have them stored on a remote server, and they will be loaded only when your bot runs.","164564432":"Deposits are temporarily unavailable due to system maintenance. You can make your deposits when the maintenance is complete.","165294347":"Please set your country of residence in your account settings to access the cashier.","165312615":"Continue on phone","165682516":"If you don’t mind sharing, which other trading platforms do you use?","167094229":"• Current stake: Use this variable to store the stake amount. You can assign any amount you want, but it must be a positive number.","170185684":"Ignore","170244199":"I’m closing my account for other reasons.","171307423":"Recovery","171579918":"Go to Self-exclusion","171638706":"Variables","173991459":"We’re sending your request to the blockchain.","174793462":"Strike","176078831":"Added","176319758":"Max. total stake over 30 days","176654019":"$100,000 - $250,000","177099483":"Your address verification is pending, and we’ve placed some restrictions on your account. The restrictions will be lifted once your address is verified.","177467242":"Define your trade options such as accumulator and stake. This block can only be used with the accumulator trade type. If you select another trade type, this block will be replaced with the Trade options block.","179083332":"Date","181107754":"Your new <0>{{platform}} {{eligible_account_to_migrate}} account(s) are ready for trading.","181346014":"Notes ","181881956":"Contract Type: {{ contract_type }}","182630355":"Thank you for submitting your information.","184024288":"lower case","189705706":"This block uses the variable \"i\" to control the iterations. With each iteration, the value of \"i\" is determined by the items in a given list.","189759358":"Creates a list by repeating a given item","190834737":"Guide","191372501":"Accumulation of Income/Savings","192436105":"No need for symbols, digits, or uppercase letters","192573933":"Verification complete","195136585":"Trading View Chart","195972178":"Get character","196810983":"If the duration is more than 24 hours, the Cut-off time and Expiry date will apply instead.","197190401":"Expiry date","201016731":"<0>View more","201091938":"30 days","203179929":"<0>You can open this account once your submitted documents have been verified.","203271702":"Try again","203297887":"The Quick Strategy you just created will be loaded to the workspace.","203924654":"Hit the <0>Start button to begin and follow the tutorial.","204797764":"Transfer to client","204863103":"Exit time","207521645":"Reset Time","207824122":"Please withdraw your funds from the following Deriv account(s):","209533725":"You’ve transferred {{amount}} {{currency}}","210385770":"If you have an active account, please log in to continue. Otherwise, please sign up.","210872733":"The verification status is not available, provider says: Malformed JSON.","211224838":"Investment","211461880":"Common names and surnames are easy to guess","211487193":"Document number (e.g. identity card, passport, driver's license)","211847965":"Your <0>personal details are incomplete. Please go to your account settings and complete your personal details to enable withdrawals.","216114973":"Stocks & indices","216650710":"You are using a demo account","217377529":"5. If the next trades are profitable, the stake for the following trade will be reduced by 2 USD. This can be shown above where the stake of 3 USD is reduced to 1 USD. See A3.","217403651":"St. Vincent & Grenadines","217504255":"Financial assessment submitted successfully","218441288":"Identity card number","220014242":"Upload a selfie from your computer","220186645":"Text Is empty","221261209":"A Deriv account will allow you to fund (and withdraw from) your CFDs account(s).","223120514":"In this example, each point of the SMA line is an arithmetic average of close prices for the last 50 days.","223607908":"Last digit stats for latest 1000 ticks for {{underlying_name}}","224650827":"IOT/USD","225887649":"This block is mandatory. It's added to your strategy by default when you create new strategy. You can not add more than one copy of this block to the canvas.","227591929":"To timestamp {{ input_datetime }} {{ dummy }}","227903202":"We’ll charge a 1% transfer fee for transfers in different currencies between your Deriv fiat and {{platform_name_mt5}} accounts.","228521812":"Tests whether a string of text is empty. Returns a boolean value (true or false).","233500222":"- High: the highest price","235244966":"Return to Trader's Hub","235583807":"SMA is a frequently used indicator in technical analysis. It calculates the average market price over a specified period, and is usually used to identify market trend direction: up or down. For example, if the SMA is moving upwards, it means the market trend is up. ","235994721":"Forex (standard/exotic) and cryptocurrencies","236642001":"Journal","238496287":"Leverage trading is high-risk, so it's a good idea to use risk management features such as stop loss. Stop loss allows you to","242028165":"Pay a small fee to prioritise your withdrawal, this fee will be deducted from the withdrawal amount.","243537306":"1. Under the Blocks menu, go to Utility > Variables.","243614144":"This is only available for existing clients.","245005091":"lower","245187862":"The DRC will make a <0>decision on the complaint (please note that the DRC mentions no timeframe for announcing its decision).","245812353":"if {{ condition }} return {{ value }}","246428134":"Step-by-step guides","248153700":"Reset your password","248565468":"Check your {{ identifier_title }} account email and click the link in the email to proceed.","248909149":"Send a secure link to your phone","251134918":"Account Information","251445658":"Dark theme","251882697":"Thank you! Your response has been recorded into our system.<0/><0/>Please click ‘OK’ to continue.","254912581":"This block is similar to EMA, except that it gives you the entire EMA line based on the input list and the given period.","256031314":"Cash Business","256602726":"If you close your account:","258448370":"MT5","258912192":"Trading assessment","260069181":"An error occured while trying to load the URL","260086036":"Place blocks here to perform tasks once when your bot starts running.","260361841":"Tax Identification Number can't be longer than 25 characters.","260393332":"You cannot make further deposits as your documents are still under review. We will notify you by email within 3 days once your verification is approved.","261074187":"4. Once the blocks are loaded onto the workspace, tweak the parameters if you want, or hit Run to start trading.","261250441":"Drag the <0>Trade again block and add it into the <0>do part of the <0>Repeat until block.","262095250":"If you select <0>\"Put\", you’ll earn a payout if the final price is below the strike price at expiry. Otherwise, you won’t receive a payout.","264976398":"3. 'Error' displays a message in red to highlight something that needs to be resolved immediately.","265644304":"Trade types","266455247":"Standard Vanuatu","267992618":"The platforms lack key features or functionality.","268254263":"Open a real account now","268940240":"Your balance ({{format_balance}} {{currency}}) is less than the current minimum withdrawal allowed ({{format_min_withdraw_amount}} {{currency}}). Please top up your account to continue with your withdrawal.","269322978":"Deposit with your local currency via peer-to-peer exchange with fellow traders in your country.","269607721":"Upload","270339490":"If you select \"Over\", you will win the payout if the last digit of the last tick is greater than your prediction.","270396691":"<0>Your Wallets are ready!","270610771":"In this example, the open price of a candle is assigned to the variable \"candle_open_price\".","270712176":"descending","270780527":"You've reached the limit for uploading your documents.","271637055":"Download is unavailable while your bot is running.","272179372":"This block is commonly used to adjust the parameters of your next trade and to implement stop loss/take profit logic.","273350342":"Copy and paste the token into the app.","273728315":"Should not be 0 or empty","274268819":"Volatility 100 Index","275116637":"Deriv X","276770377":"New MT5 account(s) under the {{to_account}} jurisdiction will be created for new trades.","277469417":"Exclude time cannot be for more than five years.","278684544":"get sub-list from # from end","280021988":"Use these shortcuts","281110034":"Effective trading with the D'Alembert system requires careful consideration of its stake progression and risk management. Traders can automate this approach using Deriv Bot, setting profit and loss thresholds to ensure balanced and controlled trading. However, it is crucial for traders to assess their risk appetite, test strategies on a demo account, and align with their own trading style before transitioning to real money trading. This optimization process helps strike a balance between potential gains and losses while managing risk prudently.","282319001":"Check your image","282564053":"Next, we'll need your proof of address.","283830551":"Your address doesn’t match your profile","284527272":"antimode","284772879":"Contract","284809500":"Financial Demo","287934290":"Are you sure you want to cancel this transaction?","289731075":"Get Started","291344459":"The table illustrates this principle in the second session. After a trade resulting in loss in round 4 followed by a successful trade in round 5, the stake will increase to 2 USD for round 6. This is in line with the strategy's rule of raising the stake only after a loss is followed by a successful trade.","291744889":"<0>1. Trade parameters:<0>","291817757":"Go to our Deriv community and learn about APIs, API tokens, ways to use Deriv APIs, and more.","292526130":"Tick and candle analysis","292589175":"This will display the SMA for the specified period, using a candle list.","292887559":"Transfer to {{selected_value}} is not allowed, Please choose another account from dropdown","293250845":"Are you sure you want to continue?","294043810":"I confirm that my tax information is accurate and complete.","294305803":"Manage account settings","294335229":"Sell at market price","296017162":"Back to Bot","301441673":"Select your citizenship/nationality as it appears on your passport or other government-issued ID.","304309961":"We're reviewing your withdrawal request. You may still cancel this transaction if you wish. Once we start processing, you won't be able to cancel.","304506198":"Total balance:","310234308":"Close all your positions.","312142140":"Save new limits?","312300092":"Trims the spaces within a given string or text.","313741895":"This block returns “True” if the last candle is black. It can be placed anywhere on the canvas except within the Trade parameters root block.","315306603":"You have an account that do not have currency assigned. Please choose a currency to trade with this account.","315516003":"Distance to spot","316694303":"Is candle black?","318705408":"Demo Zero Spread","318865860":"close","318984807":"This block repeats the instructions contained within for a specific number of times.","321457615":"Oops, something went wrong!","323179846":"The time interval for each candle can be set from one minute to one day.","323209316":"Select a Deriv Bot Strategy","323360883":"Baskets","325662004":"Expand Block","325763347":"result","326770937":"Withdraw {{currency}} ({{currency_symbol}}) to your wallet","327534692":"Duration value is not allowed. To run the bot, please enter {{min}}.","328539132":"Repeats inside instructions specified number of times","329353047":"Malta Financial Services Authority (MFSA) (licence no. IS/70156)","329404045":"<0>Switch to your real account<1> to create a {{platform}} {{account_title}} account.","330384187":"Enable trading with your first transfer.","333456603":"Withdrawal limits","333807745":"Click on the block you want to remove and press Delete on your keyboard.","334942497":"Buy time","337023006":"Start time cannot be in the past.","339449279":"Remaining time","339610914":"Spread Up/Spread Down","339879944":"GBP/USD","340807218":"Description not found.","342181776":"Cancel transaction","343873723":"This block displays a message. You can specify the color of the message and choose from 6 different sound options.","344418897":"These trading limits and self-exclusion help you control the amount of money and time you spend on {{brand_website_name}} and exercise <0>responsible trading.","345320063":"Invalid timestamp","345818851":"Sorry, an internal error occurred. Hit the above checkbox to try again.","346070861":"Zero Spread","346843343":"CFDs on financial and derived instruments with copy trading.","347029309":"Forex: standard/micro","347039138":"Iterate (2)","348951052":"Your cashier is currently locked","349047911":"Over","349110642":"<0>{{payment_agent}}<1>'s contact details","350602311":"Stats show the history of consecutive tick counts, i.e. the number of ticks the price remained within range continuously.","351744408":"Tests if a given text string is empty","353731490":"Job done","354945172":"Submit document","355647475":"Current spot","357477280":"No face found","357672069":"Income verification failed","359053005":"Please enter a token name.","359649435":"Given candle list is not valid","359809970":"This block gives you the selected candle value from a list of candles within the selected time interval. You can choose from open price, close price, high price, low price, and open time.","360224937":"Logic","360773403":"Bot Builder","363576009":"- High price: the highest price","363738790":"Browser","363990763":"Sell price:","367801124":"Total assets in your Deriv accounts.","368160866":"in list","368397799":"+ Create bot","369035361":"<0>•Your account number","371151609":"Last used","371710104":"This scope will allow third-party apps to buy and sell contracts for you, renew your expired purchases, and top up your demo accounts.","372291654":"Exclude time must be after today.","372645383":"True if the market direction matches the selection","372805409":"You should enter 9-35 characters.","373021397":"random","373306660":"{{label}} is required.","373495360":"This block returns the entire SMA line, containing a list of all values for a given period.","374537470":"No results for \"{{text}}\"","375714803":"Deal Cancellation Error","377225569":"<0>Do not honour: Please contact your bank for further assistance.","377538732":"Key parameters","379523479":"To avoid loss of funds, do not share tokens with the Admin scope with unauthorised parties.","380606668":"tick","380694312":"Maximum consecutive trades","381972464":"Your document has expired.","384303768":"This block returns \"True\" if the last candle is black. It can be placed anywhere on the canvas except within the Trade parameters root block.","384707870":"CRS confirmation","386278304":"Install the {{platform_name_trader}} web app","386502387":"Bot is not running","389923099":"Zoom in","390890891":"Last quarter","391685252":"Revoke","391915203":"Hedging","392582370":"Fall Equals","393789743":"Letters, spaces, periods, hyphens, apostrophes only.","396418990":"Offline","398816980":"Launch {{platform_name_trader}} in seconds the next time you want to trade.","401339495":"Verify address","401345454":"Head to the Tutorials tab to do so.","403456289":"The formula for SMA is:","403936913":"An introduction to Deriv Bot","406359555":"Contract details","406497323":"Sell your active contract if needed (optional)","411482865":"Add {{deriv_account}} account","412433839":"I agree to the <0>terms and conditions.","413594348":"Only letters, numbers, space, hyphen, period, and forward slash are allowed.","417864079":"You’ll not be able to change currency once you have made a deposit.","419485005":"Spot","419496000":"Your contract is closed automatically when your profit is more than or equals to this amount. This block can only be used with the multipliers trade type.","420072489":"CFD trading frequency","422055502":"From","423682863":"When your loss reaches or exceeds the set amount, your trade will be closed automatically.","424101652":"Quick strategy guides >","424272085":"We take your financial well-being seriously and want to ensure you are fully aware of the risks before trading.<0/><0/>","424897068":"Do you understand that you could potentially lose 100% of the money you use to trade?","426031496":"Stop","427134581":"Try using another file type.","427617266":"Bitcoin","428380816":"If you select “<0>Matches”, you will win the payout if the last digit of the last tick is the same as your prediction.","429505586":"If you select \"<0>Fall\", you win the payout if the exit spot is strictly lower than the entry spot.","429970999":"To avoid delays, enter your <0>name exactly as it appears on your {{document_name}}.","431267979":"Here’s a quick guide on how to use Deriv Bot on the go.","432273174":"1:100","432508385":"Take Profit: {{ currency }} {{ take_profit }}","432519573":"Document uploaded","433237511":"Notify Telegram %1 Access Token: %2 Chat ID: %3 Message: %4","433348384":"Real accounts are not available to politically exposed persons (PEPs).","433616983":"2. Investigation phase","434548438":"Highlight function definition","434896834":"Custom functions","436364528":"Your account will be opened with {{legal_entity_name}}, and will be subject to the laws of Saint Vincent and the Grenadines.","436534334":"<0>We've sent you an email.","437138731":"Create a new {{platform}} password","437453244":"Choose your preferred cryptocurrency","437485293":"File type not supported","437904704":"Maximum open positions","438067535":"Over $500,000","439398769":"This strategy is currently not compatible with Deriv Bot.","442281706":"You’ve just deleted a block.","442520703":"$250,001 - $500,000","443559872":"Financial SVG","444484637":"Logic negation","445419365":"1 - 2 years","447548846":"SSNIT number","447907000":"If you select \"<0>Allow equals\", you win the payout if exit spot is higher than or equal to entry spot for \"Rise\". Similarly, you win the payout if exit spot is lower than or equal to entry spot for \"Fall\".","450983288":"Your deposit is unsuccessful due to an error on the blockchain. Please contact your crypto wallet service provider for more info.","451852761":"Continue on your phone","452054360":"Similar to RSI, this block gives you a list of values for each entry in the input list.","452949978":"The 1-3-2-6 strategy is designed to capitalise on consecutive successful trades while minimising losses during losing streaks. The rationale behind this strategy lies in statistical probabilities, with adjustments to stake sizes based on the perceived likelihood of success. There is a higher likelihood of success in the second trade after one successful trade. Hence the stake adjusts to 3 in the second trade. In the third trade, the stake adjusts to 2 units due to a lower probability of a successful trade. If the third trade is also successful, the strategy then allocates all the previous gains (a total of 6 units of initial stake) into the fourth trade with the aim of doubling the potential profits. If the fourth trade results in a positive outcome, the strategy helps achieve a total gain of 12 units. However, it is crucial to exercise caution, as the risk can escalate quickly with this strategy, and any loss in the fourth trade forfeits all previous gains.","453175851":"Your MT5 Financial STP account will be opened through {{legal_entity_name}}. All trading in this account is subject to the regulations and guidelines of the Labuan Financial Service Authority (LFSA). None of your other accounts, including your Deriv account, is subject to the regulations and guidelines of the Labuan Financial Service Authority (LFSA).","454196938":"Regulation:","456746157":"Grant access to your camera from your browser settings","457020083":"It’ll take longer to verify you if we can’t read it","457494524":"1. From the block library, enter a name for the new variable and click Create.","459612953":"Select account","459817765":"Pending","460070238":"Congratulations","460975214":"Complete your Appropriateness Test","461795838":"Please contact us via live chat to unlock it.","462079779":"Resale not offered","463361726":"Select an item","465993338":"Oscar's Grind","466424460":"Oscar’s Grind","466837068":"Yes, increase my limits","467839232":"I trade forex CFDs and other complex financial instruments regularly on other platforms.","471402292":"Your bot uses a single trade type for each run.","471667879":"Cut off time:","471994882":"Your {{ currency }} account is ready.","473154195":"Settings","474306498":"We’re sorry to see you leave. Your account is now closed.","475492878":"Try Synthetic Indices","476023405":"Didn't receive the email?","477557241":"Remote blocks to load must be a collection.","478280278":"This block displays a dialog box that uses a customised message to prompt for an input. The input can be either a string of text or a number and can be assigned to a variable. When the dialog box is displayed, your strategy is paused and will only resume after you enter a response and click \"OK\".","478827886":"We calculate this based on the barrier you’ve selected.","479420576":"Tertiary","480356486":"*Boom 300 and Crash 300 Index","481276888":"Goes Outside","481564514":"If you select “<0>Up”, you’ll earn a payout if the spot price never drops below the barrier.","483279638":"Assessment Completed<0/><0/>","485379166":"View transactions","487239607":"Converts a given True or False to the opposite value","488150742":"Resend email","489768502":"Change investor password","490053735":"If you select this feature, your trade will be closed automatically at the nearest available asset price when your loss reaches or exceeds the stop loss amount. Your loss may be more than the amount you entered depending on the market price at closing.","491603904":"Unsupported browser","492198410":"Make sure everything is clear","492566838":"Taxpayer identification number","497518317":"Function that returns a value","498562439":"or","499522484":"1. for \"string\": 1325.68 USD","500855527":"Chief Executives, Senior Officials and Legislators","500920471":"This block performs arithmetic operations between two numbers.","501284861":"Watch this video to learn how to build a trading bot on Deriv Bot. Also, check out this blog post on building a trading bot.","501401157":"You are only allowed to make deposits","501537611":"*Maximum number of open positions","502007051":"Demo Swap-Free SVG","502041595":"This block gives you a specific candle from within the selected time interval.","505793554":"last letter","508390614":"Demo Financial STP","511679687":"Accumulators allow you to express a view on the range of movement of an index and grow your stake exponentially at a fixed <0>growth rate.","514031715":"list {{ input_list }} is empty","514776243":"Your {{account_type}} password has been changed.","514948272":"Copy link","517631043":"We’ve sent your e-book. Check your email to download it.","517833647":"Volatility 50 (1s) Index","518955798":"7. Run Once at Start","519205761":"You can no longer open new positions with this account.","520136698":"Boom 500 Index","520458365":"Last used: ","521872670":"item","522703281":"divisible by","523123321":"- 10 to the power of a given number","524459540":"How do I create variables?","527329988":"This is a top-100 common password","529056539":"Options","531114081":"3. Contract Type","531675669":"Euro","532724086":"Employment contract","533403953":"Your existing <0>{{platform}} {{type}} {{from_account}} account(s) will remain accessible.","535041346":"Max. total stake per day","536277802":"TP & SL history","537788407":"Other CFDs Platform","538017420":"0.5 pips","538042340":"Principle 2: The stake only increases when a loss trade is followed by a successful trade","538228086":"Close-Low","539352212":"Tick {{current_tick}}","541650045":"Manage {{platform}} password","541700024":"First, enter your driving licence number and the expiry date.","542038694":"Only letters, numbers, space, underscore, and hyphen are allowed for {{label}}.","542305026":"You must also submit a proof of identity.","543413346":"You have no open positions for this asset. To view other open positions, click Go to Reports","545323805":"Filter by trade types","547029855":"If you select this feature, you can cancel your trade within a chosen time frame if the asset price moves against your favour. You will get your stake back without profit/loss. We charge a small fee for this. Take profit and stop loss are disabled when deal cancellation is active.","549479175":"Deriv Multipliers","549799607":"Go to LiveChat","551569133":"Learn more about trading limits","551958626":"Excellent","554135844":"Edit","554410233":"This is a top-10 common password","555351771":"After defining trade parameters and trade options, you may want to instruct your bot to purchase contracts when specific conditions are met. To do that you can use conditional blocks and indicators blocks to help your bot to make decisions.","555881991":"National Identity Number Slip","558866810":"Run your bot","559224320":"Our classic “drag-and-drop” tool for creating trading bots, featuring pop-up trading charts, for advanced users.","560759471":"You'll see these details once the contract starts.","561982839":"Change your currency","562599414":"This block returns the purchase price for the selected trade type. This block can be used only in the \"Purchase conditions\" root block.","563034502":"We shall try to resolve your complaint within 15 business days. We will inform you of the outcome together with an explanation of our position and propose any remedial measures we intend to take.","563166122":"We shall acknowledge receiving your complaint, review it carefully, and keep you updated on the handling process. We might request further information or clarifications to facilitate the resolution of the complaint.","563652273":"Go to block","565356380":"Added to favorites","565410797":"The below image illustrates how Simple Moving Average Array block works:","566274201":"1. Market","567019968":"A variable is among the most important and powerful components in creating a bot. It is a way to store information, either as text or numbers. The information stored as a variable can be used and changed according to the given instructions. Variables can be given any name, but usually they are given useful, symbolic names so that it is easier to call them during the execution of instructions.","567163880":"Create a {{platform}} password","567755787":"Tax Identification Number is required.","569057236":"In which country was your document issued?","572576218":"Languages","573173477":"Is candle {{ input_candle }} black?","575668969":"3. For trades that result in a profit, the stake for the next trade will be increased by 2 USD. Deriv Bot will continue to add 2 USD for every successful trade. See A1.","575702000":"Remember, selfies, pictures of houses, or non-related images will be rejected.","576355707":"Select your country and citizenship:","577215477":"count with {{ variable }} from {{ start_number }} to {{ end_number }} by {{ step_size }}","577779861":"Withdrawal","577883523":"4. Awards and orders","578640761":"Call Spread","579529868":"Show all details — including the bottom 2 lines","580431127":"Restart buy/sell on error (disable for better performance): {{ checkbox }}","580665362":"Stays In/Goes Out","580774080":"insert at","581168980":"Legal","582808668":"Loss amount: ","582945649":"2 minutes","584028307":"Allow equals","587577347":"Take Profit (Accumulator)","587577425":"Secure my account","587856857":"Want to know more about APIs?","592087722":"Employment status is required.","592964176":"Join over 2.5 million traders","593459109":"Try a different currency","595080994":"Example: CR123456789","596165833":"Your withdrawal will be processed internally in one business day. After that, for debit/credit cards, it takes 1-15 working days, and for e-wallets, it's 1-3 working days. If there's a delay beyond these periods, please contact us via live chat.","597089493":"Here is where you can decide to sell your contract before it expires. Only one copy of this block is allowed.","597481571":"DISCLAIMER","597707115":"Tell us about your trading experience.","599469202":"{{secondPast}}s ago","602278674":"Verify identity","603849445":"Strike price","603849863":"Look for the <0>Repeat While/Until, and click the + icon to add the block to the workspace area.","603899222":"Distance to current spot","606240547":"- Natural log","606877840":"Back to today","607807243":"Get candle","609519227":"This is the email address associated with your Deriv account.","609650241":"Infinite loop detected","610537973":"Any information you provide is confidential and will be used for verification purposes only.","611020126":"View address on Blockchain","613418320":"<0>Setup unsuccessful","613877038":"Chart","615156635":"Your selfie does not match your document.","617345387":"If you select \"Reset-Up”, you win the payout if the exit spot is strictly higher than either the entry spot or the spot at reset time.","618520466":"Example of a cut-off document","619268911":"<0>a.The Financial Commission will investigate the validity of the complaint within 5 business days.","619407328":"Are you sure you want to unlink from {{identifier_title}}?","621829484":"{{days_passed}}d ago","623192233":"Please complete the <0>Appropriateness Test to access your cashier.","623316736":"{{ message }}, retrying in {{ delay }}s","623542160":"Exponential Moving Average Array (EMAA)","625571750":"Entry spot:","626175020":"Standard Deviation Up Multiplier {{ input_number }}","626809456":"Resubmit","627292452":"<0>Your Proof of Identity or Proof of Address did not meet our requirements. Please check your email for further instructions.","627814558":"This block returns a value when a condition is true. Use this block within either of the function blocks above.","628193133":"Account ID","629003252":"If your current password doesn't match these requirements, you'll need to create a new one in the next step.","629145209":"In case if the \"AND\" operation is selected, the block returns \"True\" only if both given values are \"True\"","629395043":"All growth rates","632398049":"This block assigns a null value to an item or statement.","632897893":"If any of the above applies to you, select <0>Yes. Otherwise, select <0>No.","634219491":"You have not provided your tax identification number. This information is necessary for legal and regulatory requirements. Please go to <0>Personal details in your account settings, and fill in your latest tax identification number.","634274250":"How long each trade takes to expire.","636219628":"<0>c.If no settlement opportunity can be found, the complaint will proceed to the determination phase to be handled by the DRC.","636427296":"Need help with tax info? Let us know via <0>live chat.","636579615":"Number of unit(s) to be added to the next trade after a losing trade. One unit is equivalent to the amount of initial stake.","639382772":"Please upload supported file type.","640249298":"Normal","640596349":"You have yet to receive any notifications","640730141":"Refresh this page to restart the identity verification process","641420532":"We've sent you an email","642210189":"Please check your email for the verification link to complete the process.","642393128":"Enter amount","642546661":"Upload back of license from your computer","644150241":"The number of contracts you have won since you last cleared your stats.","645902266":"EUR/NZD","646773081":"Profit threshold: The bot will stop trading if your total profit exceeds this amount.","647039329":"Proof of address required","647745382":"Input List {{ input_list }}","649317411":"On the basis of the information provided in relation to your knowledge and experience, we consider that the investments available via this website are not appropriate for you.<0/><1/>","649923867":"Adds a sign to a number to create a barrier offset. (deprecated)","650836587":"This article explores the Martingale strategy integrated into Deriv Bot, a versatile trading bot designed to trade assets such as forex, commodities, and derived indices. We will delve into the strategy's core parameters, its application, and provide essential takeaways for traders looking to use the bot effectively.","651284052":"Low Tick","651684094":"Notify","652298946":"Date of birth","654422099":"CRS confirmation is required.","654507872":"True-False","654924603":"Martingale","655937299":"We’ll update your limits. Click <0>Accept to acknowledge that you are fully responsible for your actions, and we are not liable for any addiction or loss.","656893085":"Timestamp","657325150":"This block is used to define trade options within the Trade parameters root block. Some options are only applicable for certain trade types. Parameters such as duration and stake are common among most trade types. Prediction is used for trade types such as Digits, while barrier offsets are for trade types that involve barriers such as Touch/No Touch, Ends In/Out, etc.","658745169":"You may sell the contract up to 60 seconds before expiry. If you do, we’ll pay you the <0>contract value.","659482342":"Please remember that it is your responsibility to keep your answers accurate and up to date. You can update your personal details at any time in your account settings.","660481941":"To access your mobile apps and other third-party apps, you'll first need to generate an API token.","660991534":"Finish","661759508":"On the basis of the information provided in relation to your knowledge and experience, we consider that the investments available via this website are not appropriate for you.<0/><0/>","662953503":"Your contract will be closed when the <0>stop out level is reached.","664779910":"3. If the first trade results in profit, the stake for the following trade will not reduce but remain at the initial stake. The strategy minimally trades at the initial stake of 1 USD. See A1.","665089217":"Please submit your <0>proof of identity to authenticate your account and access your Cashier.","665777772":"XLM/USD","665872465":"In the example below, the opening price is selected, which is then assigned to a variable called \"op\".","666158951":"Your contract will be closed when the <0>stop out level is reached.","666724936":"Please enter a valid ID number.","671630762":"We accept only these types of documents as proof of your address. The document must be recent (issued within last {{expiry_in_months}} months) and include your name and address:","672008428":"ZEC/USD","673915530":"Jurisdiction and choice of law","674973192":"Use this password to log in to your Deriv MT5 accounts on the desktop, web, and mobile apps.","676159329":"Could not switch to default account.","676675313":"Authy","677918431":"Market: {{ input_market }} > {{ input_submarket }} > {{ input_symbol }}","678031950":"Candles List with interval here 2: {{ candle_interval_type }}","679199080":"Why passkeys?","680334348":"This block was required to correctly convert your old strategy.","681108680":"Additional information required for {{platform}} account(s)","681808253":"Previous spot price","681926004":"Example of a blurry document","682056402":"Standard Deviation Down Multiplier {{ input_number }}","686387939":"How do I clear my transaction log?","687193018":"Slippage risk","687212287":"Amount is a required field.","688510664":"You've {{two_fa_status}} 2FA on this device. You'll be logged out of your account on other devices (if any). Use your password and a 2FA code to log back in.","689137215":"Purchase price","691956534":"<0>You have added a {{currency}} account.<0> Make a deposit now to start trading.","692354762":"Please enter your {{document_name}}. {{example_format}}","693396140":"Deal cancellation (expired)","693933036":"Exploring the Oscar’s Grind strategy in Deriv Bot","694035561":"Trade options multipliers","696157141":"Low spot","696735942":"Enter your National Identification Number (NIN)","696870196":"- Open time: the opening time stamp","698037001":"National Identity Number","699159918":"1. Filing complaints","699646180":"A minimum deposit value of <0>{{minimum_deposit}} {{currency}} is required. Otherwise, the funds will be lost and cannot be recovered.","700259824":"Account currency","701034660":"We are still processing your withdrawal request.<0 />Please wait for the transaction to be completed before deactivating your account.","701462190":"Entry spot","701647434":"Search for string","702451070":"National ID (No Photo)","702561961":"Change theme","705262734":"Your Wallets are ready","705299518":"Next, upload the page of your passport that contains your photo.","705697927":"2. Set your preferred unit. In this example, it is 2 units or 2 USD.","705821926":"Learn about this trade type","706727320":"Binary options trading frequency","706755289":"This block performs trigonometric functions.","706960383":"We’ll offer to buy your contract at this price should you choose to sell it before its expiry. This is based on several factors, such as the current spot price, duration, etc. However, we won’t offer a contract value if the remaining duration is below 60 seconds.","707189572":"Your email address has changed.<0/>Now, log in with your new email address.","707662672":"{{unblock_date}} at {{unblock_time}}","708055868":"Driving licence number","710123510":"repeat {{ while_or_until }} {{ boolean }}","711580196":"Why can't I use a payment agent to withdraw my funds?","711999057":"Successful","712101776":"Take a photo of your passport photo page","712635681":"This block gives you the selected candle value from a list of candles. You can choose from open price, close price, high price, low price, and open time.","713054648":"Sending","714080194":"Submit proof","714746816":"MetaTrader 5 Windows app","715841616":"Please enter a valid phone number (e.g. +15417541234).","716428965":"(Closed)","718504300":"Postal/ZIP code","718509613":"Maximum duration: {{ value }}","720293140":"Log out","720519019":"Reset my password","721011817":"- Raise the first number to the power of the second number","723045653":"You'll log in to your Deriv account with this email address.","723961296":"Manage password","724526379":"Learn more with our tutorials","728042840":"To continue trading with us, please confirm where you live.","728824018":"Spanish Index","729251105":"Range: {{min}} - {{max}} {{duration_unit_text}} ","729651741":"Choose a photo","730473724":"This block performs the \"AND\" or the \"OR\" logic operation with the given values.","731382582":"BNB/USD","732828463":"Standing instructions to transfer funds to an account maintained in the United States, or directions regularly received from a US address","734298230":"Just a reminder","734390964":"Insufficient balance","734881840":"false","735907651":"A US residence address or a US correspondence address (including a US PO box)","737751617":"<0>Explore our website to see what’s available.","739126643":"Indicative high spot","742469109":"Reset Balance","743623600":"Reference","744110277":"Bollinger Bands Array (BBA)","745656178":"Use this block to sell your contract at the market price.","745674059":"Returns the specific character from a given string of text according to the selected option. ","746112978":"Your computer may take a few seconds to update","749336930":"Secure alternative to passwords.","750886728":"Switch to your real account to submit your documents","751468800":"Start now","751692023":"We <0>do not guarantee a refund if you make a wrong transfer.","752024971":"Reached maximum number of digits","752992217":"This block gives you the selected constant values.","753088835":"Default","753184969":"In providing our services to you, we are required to obtain information from you in order to assess whether a given product or service is appropriate for you (that is, whether you possess the experience and knowledge to understand the risks involved).<0/><1/>","753727511":"Type","755138488":"We’re unable to verify the document you provided because it contains markings or text that should not be on your document. Please provide a clear photo or a scan of your original identity document.","756152377":"SMA places equal weight to the entire distribution of values.","758003269":"make list from text","758492962":"210+","760528514":"Please note that changing the value of \"i\" won't change the value of the original item in the list","761576760":"Fund your account to start trading.","762926186":"A quick strategy is a ready-made strategy that you can use in Deriv Bot. There are 3 quick strategies you can choose from: Martingale, D'Alembert, and Oscar's Grind.","764366329":"Trading limits","766317539":"Language","768301339":"Delete Blocks","772520934":"You may sell the contract up to 24 hours before expiry. If you do, we’ll pay you the <0>contract value.","773091074":"Stake:","773309981":"Oil/USD","773336410":"Tether is a blockchain-enabled platform designed to facilitate the use of fiat currencies in a digital manner.","775679302":"{{pending_withdrawals}} pending withdrawal(s)","775706054":"Do you sell trading bots?","776085955":"Strategies","776432808":"Select the country where you currently live.","778172770":"Deriv CFDs","780009485":"About D'Alembert","781924436":"Call Spread/Put Spread","783974693":"Avoid recent years","784311461":"Exponential Moving Average (EMA)","784583814":"Linked to your computer","785969488":"Jump 75 Index","787727156":"Barrier","788005234":"NA","789013690":"This is the corresponding price level based on the payout per point you’ve selected. If this barrier is ever breached, your contract would be terminated.","792164271":"This is when your contract will expire based on the Duration or End time you’ve selected.","792622364":"Negative balance protection","793526589":"To file a complaint about our service, send an email to <0>complaints@deriv.com and state your complaint in detail. Please submit any relevant screenshots of your trading or system for our better understanding.","793531921":"Our company is one of the oldest and most reputable online trading companies in the world. We are committed to treat our clients fairly and provide them with excellent service.<0/><1/>Please provide us with feedback on how we can improve our services to you. Rest assured that you will be heard, valued, and treated fairly at all times.","794682658":"Copy the link to your phone","794778483":"Deposit later","795859446":"Password saved","795992899":"The amount you choose to receive at expiry for every point of change between the final price and the barrier. ","797007873":"Follow these steps to recover camera access:","797500286":"negative","800228448":"This complaints policy, which may change from time to time, applies to your account(s) registered with {{legal_entity_name_svg}} and {{legal_entity_name_fx}}.","800521289":"Your personal details are incomplete","802436811":"View transaction details","802438383":"New proof of address is needed","802556390":"seconds","802989607":"Drag your XML file here","803500173":"Initial stake","806165583":"Australia 200","807499069":"Financial commission complaints procedure","808323704":"You can also use \"Compare\" and \"Logic operation\" blocks to make test variables.","812430133":"Spot price on the previous tick.","815925952":"This block is mandatory. Only one copy of this block is allowed. It is added to the canvas by default when you open Deriv Bot.","816580787":"Welcome back! Your messages have been restored.","816738009":"<0/><1/>You may also raise your unresolved dispute to the <2>Office of the Arbiter for Financial Services.","818447476":"Switch account?","820877027":"Please verify your proof of identity","821163626":"Server maintenance occurs every first Saturday of the month from 7 to 10 GMT time. You may experience service disruption during this time.","823186089":"A block that can contain text.","823279888":"The {{block_type}} block is missing.","824797920":"Is list empty?","825042307":"Let’s try again","825179913":"This document number was already submitted for a different account. It seems you have an account with us that doesn't need further verification. Please contact us via <0>live chat if you need help.","826511719":"USD/SEK","827688195":"Disable Block","828219890":"then","828602451":"Returns the list of tick values in string format","829970143":"If you've hit the deposit limit, please wait 1-2 hours before trying again. Check that your browser is up to date and use incognito mode. If you still have problems, please contact us via <0>live chat.","830164967":"Last name","830703311":"My profile","830993327":"No current transactions available","831344594":"If you select “<0>Lower”, you win the payout if the exit spot is strictly lower than the barrier.","832053636":"Document submission","832217983":"40 transactions or more in the past 12 months","832398317":"Sell Error","832721563":"If you select \"Low Tick\", you win the payout if the selected tick is the lowest among the next five ticks.","834966953":"1551661986 seconds since Jan 01 1970 (UTC) translates to 03/04/2019 @ 1:13am (UTC).","835336137":"View Detail","835350845":"Add another word or two. Uncommon words are better.","836097457":"I am interested in trading but have very little experience.","837063385":"Do not send other currencies to this address.","837066896":"Your document is being reviewed, please check back in 1-3 days.","839158849":"4. If the second trade results in a loss, the Deriv Bot will automatically increase your stake for the next trade by 2 USD. Deriv Bot will continue to add 2 USD to the previous round’s stake after every losing trade. See A2.","839805709":"To smoothly verify you, we need a better photo","841543189":"View transaction on Blockchain","843333337":"You can only make deposits. Please complete the <0>financial assessment to unlock withdrawals.","845106422":"Last digit prediction","845304111":"Slow EMA Period {{ input_number }}","847209411":"{{formatted_opening_time}} (GMT), {{opening_date}}","848083350":"Your payout is equal to the <0>payout per point multiplied by the difference between the final price and the strike price. You will only earn a profit if your payout is higher than your initial stake.","850582774":"Please update your personal info","851054273":"If you select \"Higher\", you win the payout if the exit spot is strictly higher than the barrier.","851264055":"Creates a list with a given item repeated for a specific number of times.","851508288":"This block constrains a given number within a set range.","852527030":"Step 2","852583045":"Tick List String","852627184":"document number","854399751":"Digit code must only contain numbers.","854630522":"Choose a cryptocurrency account","857363137":"Volatility 300 (1s) Index","857445204":"Deriv currently supports withdrawals of Tether eUSDT to Ethereum wallet. To ensure a successful transaction, enter a wallet address compatible with the tokens you wish to withdraw. <0>Learn more","857986403":"do something","858663703":"For new trades, please transfer your funds into the new <0>{{platform}} {{eligible_account_to_migrate}} account(s).","860319618":"Tourism","862283602":"Phone number*","863023016":"For instance, if a trader has a loss threshold (B) of 100 USD, with an initial stake (s) of 1 USD and 2 units of increment (f), the calculation would be as follows:","863328851":"Proof of identity","864610268":"First, enter your {{label}} and the expiry date.","864655280":"You can continue to hold your current open positions in your existing MT5 account(s).","864957760":"Math Number Positive","865424952":"High-to-Low","865642450":"2. Logged in from a different browser","866496238":"Make sure your license details are clear to read, with no blur or glare","868826608":"Excluded from {{brand_website_name}} until","869068127":"The cashier is temporarily down due to maintenance. It will be available as soon as the maintenance is complete.","869823595":"Function","872050196":"Acceptable range: {{min_take_profit}} to {{max_take_profit}} {{currency}}","872661442":"Are you sure you want to update email <0>{{prev_email}} to <1>{{changed_email}}?","872721776":"2. Select your XML file and hit Select.","872817404":"Entry Spot Time","873166343":"1. 'Log' displays a regular message.","873387641":"If you have open positions","874461655":"Scan the QR code with your phone","874472715":"Your funds will remain in your existing MT5 account(s).","874484887":"Take profit must be a positive number.","875101277":"If I close my web browser, will Deriv Bot continue to run?","875532284":"Restart process on a different device","876086855":"Complete the financial assessment form","876292912":"Exit","879014472":"Reached maximum number of decimals","879647892":"You may sell the contract up until 60 seconds before expiry. If you do, we’ll pay you the <0>contract value.","881963105":"(XAUUSD, XAGUSD)","882423592":"The amount that you stake for the first trade. Note that this is the minimum stake amount.","885065431":"Get a Deriv account","887423525":"This is Beta version of server bot.","888274063":"Town/City","888924866":"We don’t accept the following inputs for:","890299833":"Go to Reports","891337947":"Select country","893963781":"Close-to-Low","893975500":"You do not have any recent bots","894191608":"<0>c.We must award the settlement within 28 days of when the decision is reached.","896790627":"A US birthplace","897597439":"Changes saved.","898457777":"You have added a Deriv Financial account.","898904393":"Barrier:","899342595":"NIN","900646972":"page.","902045490":"3 minutes","903429103":"In candles list read {{ candle_property }} # from end {{ input_number }}","904696726":"API token","905227556":"Strong passwords contain at least 8 characters, combine uppercase and lowercase letters and numbers.","905564365":"MT5 CFDs","906049814":"We’ll review your documents and notify you of its status within 5 minutes.","906789729":"Your verification documents were already used for another account.","907680782":"Proof of ownership verification failed","909272635":"Financial - SVG","910888293":"Too many attempts","911048905":"(BTCUSD, ETHUSD)","912257733":"The workspace will be reset to the default strategy and any unsaved changes will be lost. <0>Note: This will not affect your running bot.","912406629":"Follow these steps:","912967164":"Import from your computer","915735109":"Back to {{platform_name}}","918447723":"Real","920125517":"Add demo account","921857297":"Enter a value from 0 to {{ value }}.","921901739":"- your account details of the bank linked to your account","922313275":"You're back online","924046954":"Upload a document showing your name and bank account number or account details.","924912760":"Your document appears to be a digital document.","929608744":"You are unable to make withdrawals","930255747":"Please enter your {{document_name}}. ","930346117":"Capitalization doesn't help very much","930546422":"Touch","933126306":"Enter some text here","933193610":"Only letters, periods, hyphens, apostrophes, and spaces, please.","936393760":"You receive a <0>payout at <1>expiry if the spot price never touches or breaches the <2>barrier during the contract period. If it does, your contract will be terminated early.","937237342":"Strategy name cannot be empty","937682366":"Upload both of these documents to prove your identity.","937831119":"Last name*","937992258":"Table","938500877":"{{ text }}. <0>You can view the summary of this transaction in your email.","938947787":"Withdrawal {{currency}}","938988777":"High barrier","942015028":"Step 500 Index","944499219":"Max. open positions","945532698":"Contract sold","945753712":"Back to Trader’s Hub","946204249":"Read","946841802":"A white (or green) candle indicates that the open price is lower than the close price. This represents an upward movement of the market price.","947046137":"Your withdrawal will be processed within 24 hours","947363256":"Create list","947602200":"Save this strategy as an XML file from Deriv Bot for faster re-imports.","947704973":"Reverse D’Alembert","947758334":"City is required","947914894":"Top up  <0>","948156236":"Create {{type}} password","949859957":"Submit","952927527":"Regulated by the Malta Financial Services Authority (MFSA) (licence no. IS/70156)","956448295":"Cut-off image detected","957182756":"Trigonometric functions","958430760":"In/Out","958503488":"Search markets on ","959031082":"set {{ variable }} to MACD Array {{ dropdown }} {{ dummy }}","960201789":"3. Sell conditions","961266215":"140+","961327418":"My computer","961692401":"Bot","962251615":"If you want to adjust your self-exclusion limits, <0>contact us via live chat.","966457287":"set {{ variable }} to Exponential Moving Average {{ dummy }}","968576099":"Up/Down","969858761":"Principle 1: Strategy aims to potentially make one unit of profit per session","969987233":"Win up to maximum payout if exit spot is between lower and upper barrier, in proportion to the difference between exit spot and lower barrier.","970915884":"AN","974888153":"High-Low","975608902":"To trade CFDs, get a Deriv Apps account first.","975747761":"Ongoing","975950139":"Country of Residence","977647549":"Note: You can use this password for all your {{platform}} accounts.","977929335":"Go to my account settings","979713491":"Zero Spread BVI","980050614":"Update now","981138557":"Redirect","981568830":"You have chosen to exclude yourself from trading on our website until {{exclude_until}}. If you are unable to place a trade or deposit after your self-exclusion period, please contact us via <0>live chat.","981965437":"Scan the QR code below with your 2FA app. We recommend <0>Authy or <1>Google Authenticator.","982146443":"WhatsApp","982402892":"First line of address","982829181":"Barriers","983295075":"Why can't I see the funds on my card/e-wallet balance after I've made a withdrawal?","983451828":"2. Select the asset and trade type.","984175243":"Expand Blocks","986565137":"We've received your proof of income","987053672":"You can continue with the open positions on your current <0>{{platform}} {{existing_account}} account(s).","987224688":"How many trades have you placed with other financial instruments in the past 12 months?","988064913":"4. Come back to Deriv Bot and add the Notify Telegram block to the workspace. Paste the Telegram API token and chat ID into the block fields accordingly.","988361781":"You have no trading activity yet.","988934465":"When prompted, you must enable camera access to continue","989840364":"You’re under legal age.","990739582":"170+","992294492":"Your postal code is invalid","992677950":"Logging out on other devices","993827052":"Choosing this jurisdiction will give you a Financial STP account. Your trades will go directly to the market and have tighter spreads.","995563717":"not {{ boolean }}","997276809":"I confirm that the name and date of birth above match my chosen identity document","997311089":"Change my password","999008199":"text","1001160515":"Sell","1002989598":"iOS: iCloud keychain.","1003876411":"Should start with letter or number and may contain a hyphen, period and slash.","1004127734":"Send email","1006069082":"The objective of Martingale strategy is to take advantage of consecutive successful trades and maximise potential profits from them. This strategy is beneficial only if there are consecutive successful trades. Therefore, it is important to set a maximum stake to secure all the potential profits gained from a number of consecutive successful trades, or you could lose all the profits you have accumulated, including your initial stake. For example, if your goal is to maximise profits within 2 consecutive successful trades, you set a maximum stake of 2 USD, given your initial stake is 1 USD. Similarly, if your goal is to maximise profits within 3 consecutive successful trades, you set a maximum stake of 4 USD, given your initial stake is 1 USD.","1006458411":"Errors","1006664890":"Silent","1008151470":"Unit: The number of units that are added in the event of successful trades or the number of units removed in the event of losing trades. For example, if the unit is set at 2, the stake increases or decreases by two times the initial stake of 1 USD, meaning it changes by 2 USD.","1009032439":"All time","1010198306":"This block creates a list with strings and numbers.","1010337648":"We were unable to verify your proof of ownership.","1011424042":"{{text}}. stake<0/>","1012102263":"You will not be able to log in to your account until this date (up to 6 weeks from today).","1015201500":"Define your trade options such as duration and stake.","1016220824":"You need to switch to a real money account to use this feature.<0/>You can do this by selecting a real account from the <1>Account Switcher.","1017081936":"If you select “<0>Put”, you’ll earn a payout if the final price is below the strike price at expiry. Otherwise, you won’t receive a payout.","1018803177":"standard deviation","1019265663":"You have no transactions yet.","1019508841":"Barrier 1","1021090237":"Upgrade your <0>{{account_1}} <1/>and <0>{{account_2}} {{platform}} account(s)","1021679446":"Multipliers only","1022934784":"1 minute","1022971288":"Payout per pip","1023237947":"1. In the example below, the instructions are repeated as long as the value of x is less than or equal to 10. Once the value of x exceeds 10, the loop is terminated.","1023643811":"This block purchases contract of a specified type.","1023795011":"Even/Odd","1024205076":"Logic operation","1024740916":"0.2 pips","1026046972":"Please enter a payout amount that's lower than {{max_payout}}.","1026289179":"Trade on the go","1028211549":"All fields are required","1028758659":"Citizenship*","1029164365":"We presume that you possess the experience, knowledge, and expertise to make your own investment decisions and properly assess the risk involved.","1029641567":"{{label}} must be less than 30 characters.","1030021206":"change {{ variable }} by {{ number }}","1031602624":"We've sent a secure link to %{number}","1031731167":"Pound Sterling","1032173180":"Deriv","1032907147":"AUD/NZD","1033253221":"Confirm your identity to make a withdrawal.","1035893169":"Delete","1036116144":"Speculate on the price movement of an asset without actually owning it.","1036867749":"The desired duration, stake, prediction, and/or barrier(s) for the contract is defined here.","1038575777":"Change password","1039428638":"EU regulation","1039476188":"The size used to multiply the stake after a losing trade for the next trade.","1039755542":"Use a few words, avoid common phrases","1040472990":"1. Go to Bot Builder.","1040677897":"To continue trading, you must also submit a proof of address.","1041001318":"This block performs the following operations on a given list: sum, minimum, maximum, average, median, mode, antimode, standard deviation, random item.","1041620447":"If you are unable to scan the QR code, you can manually enter this code instead:","1042659819":"You have an account that needs action","1043790274":"There was an error","1044599642":"<0> has been credited into your {{platform}} {{title}} account.","1045704971":"Jump 150 Index","1045782294":"Click the <0>Change password button to change your Deriv password.","1047389068":"Food Services","1047644783":"Enable screen lock on your device.","1047881477":"Unfortunately, your browser does not support the video.","1048687543":"Labuan Financial Services Authority","1048947317":"Sorry, this app is unavailable in {{clients_country}}.","1049384824":"Rise","1050063303":"Videos on Deriv Bot","1050128247":"I confirm that I have verified the payment agent’s transfer information.","1050844889":"Reports","1052779010":"You are on your demo account","1052921318":"{{currency}} Wallet","1053153674":"Jump 50 Index","1053159279":"Level of education","1053556481":"Once you submit your complaint, we will send you an acknowledgement email to confirm that we have received it.","1055313820":"No document detected","1056381071":"Return to trade","1056821534":"Are you sure?","1057216772":"text {{ input_text }} is empty","1057519018":"4. If a trade ends in a profit, the stake for the following trade will be reset to the initial stake amount of 1 USD.","1057749183":"Two-factor authentication (2FA)","1057765448":"Stop out level","1057904606":"The concept of the D’Alembert Strategy is said to be similar to the Martingale Strategy where you will increase your contract size after a loss. With the D’Alembert Strategy, you will also decrease your contract size after a successful trade.","1058804653":"Expiry","1058905535":"Tutorial","1060231263":"When are you required to pay an initial margin?","1061308507":"Purchase {{ contract_type }}","1062423382":"Explore the video guides and FAQs to build your bot in the tutorials tab.","1062536855":"Equals","1062569830":"The <0>name on your identity document doesn't match your profile.","1065498209":"Iterate (1)","1065766135":"You have {{remaining_transfers}} {{transfer_text}} remaining for today.","1066235879":"Transferring funds will require you to create a second account.","1066459293":"4.3. Acknowledging your complaint","1069347258":"The verification link you used is invalid or expired. Please request for a new one.","1070323991":"6. If consecutive successful trades were to happen, the stake would follow a sequence of adjustment from 1 to 3, then 2, and 6 units of initial stake. After 4 consecutive successful trades, it completes one cycle and then the strategy will repeat itself for another cycle. If any trade results in a loss, your stake will reset back to the initial stake for the next trade.","1070624871":"Check proof of address document verification status","1073261747":"Verifications","1073611269":"A copy of your identity document (e.g. identity card, passport, driver's license)","1073711308":"Trade closed","1076006913":"Profit/loss on the last {{item_count}} contracts","1077515534":"Date to","1078189922":"You can make a new deposit once the verification of your account is complete.","1078221772":"Leverage prevents you from opening large positions.","1078303105":"Stop out","1080068516":"Action","1080990424":"Confirm","1082158368":"*Maximum account cash balance","1082406746":"Please enter a stake amount that's at least {{min_stake}}.","1083781009":"Tax identification number*","1083826534":"Enable Block","1087112394":"You must select the strike price before entering the contract.","1088031284":"Strike:","1088138125":"Tick {{current_tick}} - ","1089085289":"Mobile number","1089436811":"Tutorials","1089687322":"Stop your current bot?","1090041864":"The {{block_type}} block is mandatory and cannot be deleted/disabled.","1090802140":"Additional Information","1095295626":"<0>•The Arbiter for Financial Services will determine whether the complaint can be accepted and is in accordance with the law.","1096078516":"We’ll review your documents and notify you of its status within 3 days.","1096175323":"You’ll need a Deriv account","1098147569":"Purchase commodities or shares of a company.","1098622295":"\"i\" starts with the value of 1, and it will be increased by 2 at every iteration. The loop will repeat until \"i\" reaches the value of 12, and then the loop is terminated.","1100133959":"National ID","1100870148":"To learn more about account limits and how they apply, please go to the <0>Help Centre.","1101712085":"Buy Price","1102420931":"Next, upload the front and back of your driving licence.","1102995654":"Calculates Exponential Moving Average (EMA) list from a list of values with a period","1103309514":"Target","1103452171":"Cookies help us to give you a better experience and personalised content on our site.","1104912023":"Pending verification","1107474660":"Submit proof of address","1107555942":"To","1109182113":"Note: Deal cancellation is only available for Volatility Indices on Multipliers.","1109217274":"Success!","1110102997":"Statement","1111743543":"Stop loss (Multiplier)","1112582372":"Interval duration","1113119682":"This block gives you the selected candle value from a list of candles.","1113227831":"Yes, you can. However, there are limits on your account, such as maximum number of open positions and maximum aggregate payouts on open positions. So, just keep these limits in mind when opening multiple positions. You can find more info about these limits at Settings > Account limits.","1113292761":"Less than 8MB","1113390200":"Your open trades will appear here.","1114679006":"You have successfully created your bot using a simple strategy.","1117281935":"Sell conditions (optional)","1117863275":"Security and safety","1118294625":"You have chosen to exclude yourself from trading on our website until {{exclusion_end}}. If you are unable to place a trade or deposit after your self-exclusion period, please contact us via live chat.","1119887091":"Verification","1119986999":"Your proof of address was submitted successfully","1120985361":"Terms & conditions updated","1121050010":"Transaction fee: {{amount}} {{currency}}","1122910860":"Please complete your <0>financial assessment.","1123927492":"You have not selected your account currency","1124382808":"Please enter the expiry time in the format \"HH:MM\".","1125090693":"Must be a number","1126075317":"Add your Deriv MT5 <0>{{account_type_name}} STP account under Deriv (FX) Ltd regulated by Labuan Financial Services Authority (Licence no. MB/18/0024).","1126934455":"Length of token name must be between 2 and 32 characters.","1127224297":"Sorry for the interruption","1127884488":"cTrader MacOS app","1128139358":"How many CFD trades have you placed in the past 12 months?","1128321947":"Clear All","1128404172":"Undo","1129124569":"If you select \"Under\", you will win the payout if the last digit of the last tick is less than your prediction.","1129842439":"Please enter a take profit amount.","1133651559":"Live chat","1134879544":"Example of a document with glare","1134883120":"Use your Deriv account email and password to log in to cTrader.","1138126442":"Forex: standard","1143730031":"Direction is {{ direction_type }}","1144028300":"Relative Strength Index Array (RSIA)","1145927365":"Run the blocks inside after a given number of seconds","1146064568":"Go to Deposit page","1147269948":"Barrier cannot be zero.","1150637063":"*Volatility 150 Index and Volatility 250 Index","1151964318":"both sides","1152294962":"Upload the front of your driving licence.","1154021400":"list","1154239195":"Title and name","1155011317":"This block converts the date and time to the number of seconds since the Unix Epoch (1970-01-01 00:00:00).","1155143434":"By clicking on <0>Next you agree to move your {{platform}} {{type}} {{from_account}} account(s) under <2/>Deriv {{account_to_migrate}} Ltd’s <1>terms and conditions.","1155626418":"below","1158678321":"<0>b.The Head of the Dispute Resolution Committee (DRC) will contact both you and us within 5 business days to obtain all necessary information and see if there is a chance to settle the complaint during the investigation phase.","1160761178":"No payout if exit spot is below or equal to the lower barrier.","1161924555":"Please select an option","1163771266":"The third block is <0>optional. You may use this block if you want to sell your contract before it expires. For now, leave the block as it is. ","1163836811":"Real Estate","1164773983":"Take profit and/or stop loss are not available while deal cancellation is active.","1166023941":"New password","1166128807":"Choose one of your accounts or add a new cryptocurrency account","1166377304":"Increment value","1166916934":"Demo Standard SVG","1168029733":"Win payout if exit spot is also equal to entry spot.","1169201692":"Create {{platform}} password","1170228717":"Stay on {{platform_name_trader}}","1171765024":"Step 3","1171961126":"trade parameters","1172230903":"• Stop loss threshold: Use this variable to store your loss limit. You can assign any amount you want. Your bot will stop when your losses hits or exceeds this amount.","1172524677":"CFDs Demo","1173957529":"Go to ‘Account Settings’ on Deriv.","1174542625":"- Find the chat ID property in the response, and copy the value of the id property","1174689133":"3. Set your trade parameters and hit Run.","1174748431":"Payment channel","1175183064":"Vanuatu","1177396776":"If you select \"Asian Fall\", you will win the payout if the last tick is lower than the average of the ticks.","1177723589":"There are no transactions to display","1178582280":"The number of contracts you have lost since you last cleared your stats.","1178800778":"Take a photo of the back of your license","1178942276":"Please try again in a minute.","1179704370":"Please enter a take profit amount that's higher than the current potential profit.","1181396316":"This block gives you a random number from within a set range","1181770592":"Profit/loss from selling","1183007646":"- Contract type: the name of the contract type such as Rise, Fall, Touch, No Touch, etс.","1183448523":"<0>We're setting up your Wallets","1184968647":"Close your contract now or keep it running. If you decide to keep it running, you can check and close it later on the ","1186687280":"Question {{ current }} of {{ total }}","1188316409":"To receive your funds, contact the payment agent with the details below","1188980408":"5 minutes","1189249001":"4.1. What is considered a complaint?","1189368976":"Please complete your personal details before you verify your identity.","1190226567":"Standard - Vanuatu","1191429031":"Please click on the link in the email to change your <0>{{platform_name_dxtrade}} password.","1195393249":"Notify {{ notification_type }} with sound: {{ notification_sound }} {{ input_message }}","1196006480":"Profit threshold","1197649109":"No results for {{searchTerm}}","1198368641":"Relative Strength Index (RSI)","1199281499":"Last Digits List","1201299746":"Bot list","1201533528":"Contracts won","1201773643":"numeric","1203297580":"This block sends a message to a Telegram channel.","1203380736":"The D’Alembert strategy is less risky than Martingale, but you can still determine how long your funds will last with this strategy before trading. Simply use this formula.","1204223111":"In this example, the open prices from a list of candles are assigned to a variable called \"candle_list\".","1204459171":"Your existing <0>{{platform}} {{type_1}} <1/>and <0>{{type_2}} {{from_account}} account(s) will remain accessible.","1206227936":"How to mask your card?","1206821331":"Armed Forces","1208729868":"Ticks","1208903663":"Invalid token","1211912982":"Bot is starting","1214893428":"Account creation is currently unavailable for mobile. Please log in with your computer to create a new account.","1216408337":"Self-Employed","1217159705":"Bank account number","1217481729":"Tether as an ERC20 token (eUSDT) is a version of Tether that is hosted on Ethereum.","1218546232":"What is Fiat onramp?","1219844088":"do %1","1221250438":"To enable withdrawals, please submit your <0>Proof of Identity (POI) and <1>Proof of Address (POA) and also complete the <2>financial assessment in your account settings.","1222096166":"Deposit via bank wire, credit card, and e-wallet","1222521778":"Making deposits and withdrawals is difficult.","1222544232":"We’ve sent you an email","1223993374":"For entry spot, we use current-tick-execution mechanism, which is the latest asset price when the trade opening is processed by our servers.","1225874865":"The stake adjustment: target session profit (1 USD) - current session profit (0 USD) = 1 USD","1227074958":"random fraction","1227132397":"4. For trades that result in a loss, there are two outcomes. If it was traded at the initial stake, the next trade will remain at the same amount as the strategy trades minimally at the initial stake, see A2. If it was traded with a higher amount, the stake for the next trade would be reduced by 2 USD, see A3.","1227240509":"Trim spaces","1228534821":"Some currencies may not be supported by payment agents in your country.","1229883366":"Tax identification number","1230884443":"State/Province (optional)","1231282282":"Use only the following special characters: {{permitted_characters}}","1232291311":"Maximum withdrawal remaining","1232353969":"0-5 transactions in the past 12 months","1233178579":"Our customers say","1233300532":"Payout","1233910495":"If you select \"<0>Down\", your total profit/loss will be the percentage decrease in the underlying asset price, times the multiplier and stake, minus commissions.","1234292259":"Source of wealth","1234764730":"Upload a screenshot of your name and email address from the personal details section.","1236527126":"(Transaction fee: {{transaction_fee}} {{currency_symbol}})","1237330017":"Pensioner","1238311538":"Admin","1239752061":"In your cryptocurrency wallet, make sure to select the <0>{{network_name}} network when you transfer funds to Deriv.","1239760289":"Complete your trading assessment","1239940690":"Restarts the bot when an error is encountered.","1240027773":"Please Log in","1240688917":"Glossary","1241238585":"You may transfer between your Deriv fiat, cryptocurrency, and {{platform_name_mt5}} accounts.","1242288838":"Hit the checkbox above to choose your document.","1242994921":"Click here to start building your Deriv Bot.","1243064300":"Local","1243287470":"Transaction status","1246207976":"Enter the authentication code generated by your 2FA app:","1246880072":"Select issuing country","1247280835":"Our cryptocurrency cashier is temporarily down due to system maintenance. You can make cryptocurrency deposits and withdrawals in a few minutes when the maintenance is complete.","1248018350":"Source of income","1248940117":"<0>a.The decisions made by the DRC are binding on us. DRC decisions are binding on you only if you accept them.","1250113042":"This device doesn't support passkeys.","1250495155":"Token copied!","1252669321":"Import from your Google Drive","1253531007":"Confirmed","1253636052":"MetaTrader5 web terminal","1254565203":"set {{ variable }} to create list with","1255827200":"You can also import or build your bot using any of these shortcuts.","1255909792":"last","1255963623":"To date/time {{ input_timestamp }} {{ dummy }}","1258097139":"What could we do to improve?","1258198117":"positive","1259145708":"Let’s try again. Choose another document and enter the corresponding details.","1259598687":"GBP/JPY","1260259925":"Phone is not in a proper format.","1264096613":"Search for a given string","1265317149":"A recent utility bill (e.g. electricity, water or gas) or recent bank statement or government-issued letter with your name and address.","1265704976":"","1266728508":"Proof of income verification passed","1269296089":"Let's build a Bot!","1270581106":"If you select \"No Touch\", you win the payout if the market never touches the barrier at any time during the contract period.","1272012156":"GBP/CHF","1272337240":"Days","1272681097":"Hours","1274380814":"Your payout is equal to the <0>payout per pip multiplied by the difference, <1>in pips, between the final price and the strike price. You will only earn a profit if your payout is higher than your initial stake.","1274819385":"3. Complaints and Disputes","1276660852":"Submit your proof of identity","1281045211":"Sorts the items in a given list, by their numeric or alphabetical value, in either ascending or descending order.","1281290230":"Select","1282951921":"Only Downs","1283418744":"Additional features are available to manage your positions: “<0>Take profit”, “<1>Stop loss” and “<2>Deal cancellation” allow you to adjust your level of risk aversion.","1284522768":"If \"Loss\" is selected, it will return \"True\" if your last trade was unsuccessful. Otherwise, it will return an empty string.","1286094280":"Withdraw","1286384690":"If you select “<0>Even”, you will win the payout if the last digit of the last tick is an even number (i.e. 2, 4, 6, 8, or 0).","1286507651":"Close identity verification screen","1288965214":"Passport","1289146554":"British Virgin Islands Financial Services Commission","1289650867":"The Oscar’s Grind strategy is designed to potentially gain a modest yet steady profit in each trading session. This strategy splits trades into sessions and has three principles.","1290525720":"Example: ","1290627672":"You can only run one bot at a time.","1291997417":"Contracts will expire at exactly 23:59:59 GMT on your selected expiry date.","1292179259":"No open trades","1292188546":"Reset Deriv MT5 investor password","1292891860":"Notify Telegram","1293660048":"Max. total loss per day","1294553728":"We’re unable to verify the document you provided because it appears to be a blank image. Please try again or upload another document.","1294756261":"This block creates a function, which is a group of instructions that can be executed at any time. Place other blocks in here to perform any kind of action that you need in your strategy. When all the instructions in a function have been carried out, your bot will continue with the remaining blocks in your strategy. Click the “do something” field to give it a name of your choice. Click the plus icon to send a value (as a named variable) to your function.","1295053602":"You cannot delete a running bot.","1295284664":"Please accept our <0>updated Terms and Conditions to proceed.","1296380713":"Close my contract","1298254025":"Standard - BVI","1299479533":"8 hours","1300576911":"Please resubmit your proof of address or we may restrict your account.","1302691457":"Occupation","1303016265":"Yes","1303530014":"We’re processing your withdrawal.","1304083330":"copy","1304272843":"Please submit your proof of address.","1304620236":"Enable camera","1305217290":"Upload the back of your identity card.","1306976251":"Standard SVG","1308625834":"Sets the default time interval for blocks that read list of candles.","1309017029":"Enabling this allows you to save your blocks as one collection which can be easily integrated into other bots.","1309044871":"Returns the value of the latest tick in string format","1310483610":"Results for \"{{ search_term }}\"","1311680770":"payout","1313167179":"Please log in","1313302450":"The bot will stop trading if your total loss exceeds this amount.","1314572331":"Your document failed our verification checks.","1316216284":"You can use this password for all your {{platform}} accounts.","1319217849":"Check your mobile","1320715220":"<0>Account closed","1320750775":"Front and back","1322804930":"Restart the process on the latest version of Google Chrome","1323327633":"Our complaints process comprises the following 4 steps:","1323476617":"Changes the capitalisation of a string of text to Upper case, Lower case, Title case.","1323996051":"Profile","1324922837":"2. The new variable will appear as a block under Set variable.","1325514262":"(licence no. MB/18/0024)","1327181172":"Financial Vanuatu","1327494533":"{{sell_value}} (Sell)","1329136554":"Jump 200 Index","1329325646":"The content of this block is called on every tick","1331199417":"Please enter the correct format. ","1331367811":"Client account number","1332168410":"Learn more","1332168769":"Disconnect","1333576137":"Please update your {{details}} to continue.","1333839457":"Submit identity card (front)","1334326985":"It may take a few minutes to arrive","1335967988":"Notice","1337846406":"This block gives you the selected candle value from a list of candles within the selected time interval.","1337864666":"Photo of your document","1338496204":"Ref. ID","1339565304":"Deposit now to start trading","1339613797":"Regulator/External dispute resolution","1340286510":"The bot has stopped, but your trade may still be running. You can check it on the Reports page.","1341840346":"View in Journal","1341921544":"Trading accounts and funds","1344696151":"Forex, stocks, stock indices, commodities, cryptocurrencies and synthetic indices.","1346038489":"Should be less than 70.","1346204508":"Take profit","1346339408":"Managers","1346947293":"We were unable to verify your selfie because it’s not clear. Please take a clearer photo and try again. Ensure that there's enough light where you are and that your entire face is in the frame.","1347071802":"{{minutePast}}m ago","1349133669":"Try changing your search criteria.","1349289354":"Great, that's everything we need","1349295677":"in text {{ input_text }} get substring from {{ position1 }} {{ index1 }} to {{ position2 }} {{ index2 }}","1351906264":"This feature is not available for payment agents.","1352234202":"Last {{positionsCount}} contracts:","1352413406":"Define your trade options, such as accumulator and stake.","1353197182":"Please select","1354288636":"Based on your answers, it looks like you have insufficient knowledge and experience in trading CFDs. CFD trading is risky and you could potentially lose all of your capital.<0/><0/>","1355250245":"{{ calculation }} of list {{ input_list }}","1356574493":"Returns a specific portion of a given string of text.","1356607862":"Deriv password","1357213116":"Identity card","1358543466":"Not available","1358543748":"enabled","1360929368":"Add a Deriv account","1362029761":"Exploring the Reverse Martingale strategy in Deriv Bot","1362578283":"High","1363645836":"Derived FX","1363675688":"Duration is a required field.","1364879837":"The verification is passed but the personal info is not available to compare.","1364958515":"Stocks","1366244749":"Limits","1367488817":"4. Restart trading conditions","1367990698":"Volatility 10 Index","1370647009":"Enjoy higher daily limits","1371193412":"Cancel","1371555192":"Choose your preferred payment agent and enter your withdrawal amount. If your payment agent is not listed, <0>search for them using their account number.","1371641641":"Open the link on your mobile","1371911731":"Financial products in the EU are offered by {{legal_entity_name}}, licensed as a Category 3 Investment Services provider by the Malta Financial Services Authority (<0>Licence no. IS/70156).","1373949314":"The Reverse Martingale strategy involves increasing your stake after each successful trade and resets to the initial stake for every losing trade as it aims to secure potential profits from consecutive wins.","1374627690":"Max. account balance","1374902304":"Your document appears to be damaged or cropped.","1375884086":"Financial, legal, or government document: recent bank statement, affidavit, or government-issued letter.","1376329801":"Last 60 days","1378419333":"Ether","1380349261":"Range","1383017005":"You have switched accounts.","1384127719":"You should enter {{min}}-{{max}} numbers.","1384222389":"Please submit valid identity documents to unlock the cashier.","1385418910":"Please set a currency for your existing real account before creating another account.","1387503299":"Log in","1388770399":"Proof of identity required","1389197139":"Import error","1390792283":"Trade parameters","1391174838":"Potential payout:","1392985917":"This is similar to a commonly used password","1393559748":"Invalid date/time: {{ datetime_string }}","1393901361":"There’s an app for that","1393903598":"if true {{ return_value }}","1396179592":"Commission","1396217283":"{{transaction_amount}} {{currency_symbol}}","1396417530":"Bear Market Index","1397628594":"Insufficient funds","1400341216":"We’ll review your documents and notify you of its status within 1 to 3 days.","1400732866":"View from camera","1400962248":"High-Close","1402208292":"Change text case","1402224124":"Hit the button below, and we'll email you a verification link.","1402300547":"Lets get your address verified","1403376207":"Update my details","1405584799":"with interval: {{ candle_interval_type }}","1407191858":"DTrader","1408844944":"Click the plus icon to extend the functionality of this block.","1410016796":"Below spot:","1411373212":"Strong passwords contain at least 8 characters. combine uppercase and lowercase letters, numbers, and symbols.","1411419173":"Growth Rate: {{ accumulator }}","1412405902":"See important notes","1412535872":"You can check the result of the last trade with this block. It can only be placed within the \"Restart trading conditions\" root block.","1413047745":"Assigns a given value to a variable","1413359359":"Make a new transfer","1414205271":"prime","1414366321":"An uppercase letter","1414918420":"We'll review your proof of identity again and will give you an update as soon as possible.","1415006332":"get sub-list from first","1415513655":"Download cTrader on your phone to trade with the Deriv cTrader account","1415974522":"If you select \"Differs\", you will win the payout if the last digit of the last tick is not the same as your prediction.","1416521695":"Positions","1417558007":"Max. total loss over 7 days","1417907460":"No problem! Your passkey still works.","1417914636":"Login ID","1418115525":"This block repeats instructions as long as a given condition is true.","1419330165":"Forex, stocks, stock indices, commodities, cryptocurrencies, ETFs and synthetic indices","1421046084":"Setup your account","1421749665":"Simple Moving Average (SMA)","1422060302":"This block replaces a specific item in a list with another given item. It can also insert the new item in the list at a specific position.","1422129582":"All details must be clear — nothing blurry","1423082412":"Last Digit","1423296980":"Enter your SSNIT number","1424741507":"See more","1424763981":"1-3-2-6","1424779296":"If you've recently used bots but don't see them in this list, it may be because you:","1428135876":"Summary/Journal","1428657171":"You can only make deposits. Please contact us via <0>live chat for more information.","1430221139":"Verify now","1430396558":"5. Restart buy/sell on error","1430632931":"To get trading, please confirm who you are, and where you live.","1433367863":"Sorry, an error occured while processing your request.","1434382099":"Displays a dialog window with a message","1434767075":"Get started on Deriv Bot","1434976996":"Announcement","1435363248":"This block converts the number of seconds since the Unix Epoch to a date and time format such as 2019-08-01 00:00:00.","1437529196":"Payslip","1438247001":"A professional client receives a lower degree of client protection due to the following.","1438340491":"else","1439168633":"Stop loss:","1441208301":"Total<0 />profit/loss","1442747050":"Loss amount: <0>{{profit}}","1442840749":"Random integer","1443478428":"Selected proposal does not exist","1444066971":"It seems you’ve submitted this document before. Upload a new document.","1444843056":"Corporate Affairs Commission","1445592224":"You accidentally gave us another email address (Usually a work or a personal one instead of the one you meant).","1447698999":"Withdrawals can be cancelled if they're still in the 'Requested' status (you can check your status under Pending payout). Once the status changes to 'Authorised', in 'Progress', or 'Processed', cancellation isn't possible.","1449462402":"In review","1452260922":"Too many failed attempts","1452941569":"This block delays execution for a given number of seconds. You can place any blocks within this block. The execution of other blocks in your strategy will be paused until the instructions in this block are carried out.","1453317405":"This block gives you the balance of your account either as a number or a string of text.","1454406889":"Choose <0>until as the repeat option.","1454648764":"deal reference id","1455741083":"Upload the back of your driving licence.","1457341530":"Your proof of identity verification has failed","1457603571":"No notifications","1458160370":"Enter your {{platform}} password to add a {{platform_name}} {{account}} {{jurisdiction_shortcode}} account.","1459761348":"Submit proof of identity","1461323093":"Display messages in the developer’s console.","1462238858":"By purchasing the \"High-to-Close\" contract, you'll win the multiplier times the difference between the high and close over the duration of the contract.","1464190305":"This block will transfer the control back to the Purchase conditions block, enabling you to purchase another contract without manually stopping and restarting your bot.","1464253511":"You already have an account for each of the cryptocurrencies available on {{deriv}}.","1465084972":"How much experience do you have with other financial instruments?","1465919899":"Pick an end date","1466430429":"Should be between {{min_value}} and {{max_value}}","1466900145":"Doe","1467017903":"This market is not yet available on {{platform_name_trader}}, but it is on {{platform_name_smarttrader}}.","1467421920":"with interval: %1","1467880277":"3. General queries","1468308734":"This block repeats instructions as long as a given condition is true","1468419186":"Deriv currently supports withdrawals of Tether USDT to Omni wallet. To ensure a successful transaction, enter a wallet address compatible with the tokens you wish to withdraw. <0>Learn more","1468508098":"Slippage happens when the asset price changes by the time it reaches our servers.","1469133110":"cTrader Windows app","1469764234":"Cashier Error","1469814942":"- Division","1470319695":"Returns either True or False","1470565177":"Article of association","1471008053":"Deriv Bot isn't quite ready for real accounts","1471070549":"Can contract be sold?","1471741480":"Severe error","1473369747":"Synthetics only","1475513172":"Size","1476301886":"Similar to SMA, this block gives you the entire SMA line containing a list of all values for a given period.","1478030986":"Create or delete API tokens for trading and withdrawals","1480915523":"Skip","1484336612":"This block is used to either terminate or continue a loop, and can be placed anywhere within a loop block.","1487086154":"Your documents were submitted successfully","1488548367":"Upload again","1490509675":"Options accounts","1491392301":"<0>Sold for: {{sold_for}}","1492686447":"Your MT5 Financial STP account will be opened through Deriv (FX) Ltd. All trading in this account is subject to the regulations and guidelines of the Labuan Financial Service Authority (LFSA). None of your other accounts, including your Deriv account, is subject to the regulations and guidelines of the Labuan Financial Service Authority (LFSA).","1493673429":"Change email","1493866481":"Run Deriv X on your browser","1496810530":"GBP/AUD","1497773819":"Deriv MT5 accounts","1499080621":"Tried to perform an invalid operation.","1501691227":"Add Your Deriv MT5 <0>{{account_type_name}} account under Deriv (V) Ltd, regulated by the Vanuatu Financial Services Commission.","1502039206":"Over {{barrier}}","1502325741":"Your password cannot be the same as your email address.","1503419760":"Swap-free CFDs on selected financial and derived instruments.","1503618738":"- Deal reference ID: the reference ID of the contract","1505420815":"No payment agents found for your search","1505927599":"Our servers hit a bump. Let’s refresh to move on.","1507554225":"Submit your proof of address","1509559328":"cTrader","1509570124":"{{buy_value}} (Buy)","1509678193":"Education","1510075920":"Gold/USD","1510357015":"Tax residence is required.","1510735345":"This block gives you a list of the last digits of the last 1000 tick values.","1512469749":"In the above example it is assumed that variable candle_open_price is processed somewhere within other blocks.","1513771077":"We're processing your withdrawal.","1516559721":"Please select one file only","1516676261":"Deposit","1517503814":"Drop file or click here to upload","1520332426":"Net annual income","1521546070":"Download Block","1524636363":"Authentication failed","1526012495":"This could be because:","1526483456":"2. Enter a name for your variable, and hit Create. New blocks containing your new variable will appear below.","1527251898":"Unsuccessful","1527664853":"Your payout is equal to the payout per point multiplied by the difference between the final price and the strike price.","1527906715":"This block adds the given number to the selected variable.","1531017969":"Creates a single text string from combining the text value of each attached item, without spaces in between. The number of items can be added accordingly.","1533177906":"Fall","1534796105":"Gets variable value","1537192641":"Unable to process your request","1537711064":"You need to make a quick identity verification before you can access the Cashier. Please go to your account settings to submit your proof of identity.","1540585098":"Decline","1541508606":"Looking for CFDs? Go to Trader's Hub","1541770236":"The 1-3-2-6 strategy aims to maximise potential profits with four consecutive successful trades. One unit is equal to the amount of the initial stake. The stake will adjust from 1 unit to 3 units after the first successful trade, then to 2 units after your second successful trade, and to 6 units after the third successful trade. The stake for the next trade will reset to the initial stake if there is a losing trade or a completion of the trade cycle.","1541969455":"Both","1542742708":"Synthetics, Forex, Stocks, Stock indices, Commodities, and Cryptocurrencies","1544642951":"If you select \"Only Ups\", you win the payout if consecutive ticks rise successively after the entry spot. No payout if any tick falls or is equal to any of the previous ticks.","1547148381":"That file is too big (only up to 8MB allowed). Please upload another file.","1548185597":"Step 200 Index","1549098835":"Total withdrawn","1551172020":"AUD Basket","1551689907":"Enhance your trading experience by upgrading your <0/><1>{{platform}} {{type}} {{from_account}} account(s).","1555345325":"User Guide","1556391770":"You cannot make a withdrawal as your documents are still under review. We will notify you by email within 3 days once your verification is approved.","1557682012":"Account Settings","1558972889":"set {{ variable }} to Simple Moving Average {{ dummy }}","1560302445":"Copied","1562374116":"Students","1566037033":"Bought: {{longcode}} (ID: {{transaction_id}})","1566717687":"We also provide a guide on the Tutorial tab to show you how you can build and execute a simple strategy.","1567745852":"Bot name","1569527365":"Verification failed. Resubmit your details.","1569624004":"Dismiss alert","1570484627":"Ticks list","1570495551":"For exit spot, the latest asset price when the trade closure is processed by our servers.","1571575776":"Accepted formats: pdf, jpeg, jpg, and png. Max file size: 8MB","1572504270":"Rounding operation","1572982976":"Server","1573429525":"Call/Put","1575556189":"Tether on the Ethereum blockchain, as an ERC20 token, is a newer transport layer, which now makes Tether available in Ethereum smart contracts. As a standard ERC20 token, it can also be sent to any Ethereum address.","1577480486":"Your mobile link will expire in one hour","1577527507":"Account opening reason is required.","1577612026":"Select a folder","1580498808":"Multiple faces found","1584109614":"Ticks String List","1584936297":"XML file contains unsupported elements. Please check or modify file.","1587046102":"Documents from that country are not currently supported — try another document type","1589148299":"Start","1589640950":"Resale of this contract is not offered.","1589702653":"Proof of address","1589863913":"These are the trade parameters used for D’Alembert strategy in Deriv Bot.","1590400723":"Total assets in all your accounts","1591933071":"Resubmit document","1593010588":"Login now","1594147169":"Please come back in","1594322503":"Sell is available","1595295238":"3. Use a logic block to check if Total profit/loss is more than the Stop loss threshold amount. You can find the Total profit/loss variable under Analysis > Stats on the Blocks menu on the left. Your bot will continue to purchase new contracts until the Total profit/loss amount exceeds the Stop loss threshold amount.","1597672660":"Deriv MT5 Password","1598009247":"<0>a.You may file a complaint with the Financial Commission up to 45 days after the incident.","1598386296":"Town/City is required.","1598443642":"Transaction hash","1598789539":"Here are some common card/e-wallet errors and their solutions:","1599743312":"An example of Reverse Martingale strategy","1602894348":"Create a password","1604916224":"Absolute","1605222432":"I have no knowledge and experience in trading at all.","1605292429":"Max. total loss","1612105450":"Get substring","1612638396":"Cancel your trade at any time within a specified timeframe.","1615897837":"Signal EMA Period {{ input_number }}","1618652381":"For instance, if a trader has a loss threshold (B) is 1000 USD, with an initial stake (s) is 1 USD, and the Martingale multiplier (m) is 2, the calculation would be as follows:","1619070150":"You are being redirected to an external website.","1620278321":"Names and surnames by themselves are easy to guess","1620346110":"Set currency","1621024661":"Tether as a TRC20 token (tUSDT) is a version of Tether that is hosted on Tron.","1622662457":"Date from","1622944161":"Now, go to the <0>Restart trading conditions block.","1623706874":"Use this block when you want to use multipliers as your trade type.","1628981793":"Can I trade cryptocurrencies on Deriv Bot?","1630317389":"If you select “<0>No Touch”, you win the payout if the market never touches the barrier at any time during the contract period.","1630417358":"Please go to your account settings and complete your personal details to enable withdrawals.","1631281562":"GBP Basket","1633661992":"Tick {{current_tick}}/{{tick_count}}","1634016345":"2. If the trade is successful, this strategy will automatically adjust your stake to 3 units of your initial stake for the next trade. In this case, the stake adjustment is 3 units and the initial stake is 1 USD, hence the next trade will start at 3 USD.","1634594289":"Select language","1634903642":"Only your face can be in the selfie","1634969163":"Change currency","1635266650":"It seems that your name in the document is not the same as your Deriv profile. Please update your name in the <0>Personal details page to solve this issue.","1635628424":"An envelope with your name and address.","1636605481":"Platform settings","1636782601":"Multipliers","1638321777":"Your demo account balance is low. Reset your balance to continue trading from your demo account.","1639262461":"Pending withdrawal request:","1639304182":"Please click on the link in the email to reset your password.","1641395634":"Last digits list","1641635657":"New proof of identity document needed","1641980662":"Salutation is required.","1644636153":"Transaction hash: <0>{{value}}","1644703962":"Looking for CFD accounts? Go to Trader's Hub","1644864436":"You’ll need to authenticate your account before requesting to become a professional client. <0>Authenticate my account","1644908559":"Digit code is required.","1647186767":"The bot encountered an error while running.","1648938920":"Netherlands 25","1649239667":"2. Under the Blocks menu, you'll see a list of categories. Blocks are grouped within these categories. Choose the block you want and drag them to the workspace.","1650963565":"Introducing Wallets","1651513020":"Display remaining time for each interval","1651951220":"Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"","1652366857":"get and remove","1652968048":"Define your trade options such as multiplier and stake.","1652976865":"In this example, this block is used with another block to get the open prices from a list of candles. The open prices are then assigned to the variable called \"cl\".","1653136377":"copied!","1653180917":"We cannot verify you without using your camera","1653999225":"Forex: major/minor","1654365787":"Unknown","1654529197":"Purchase condition","1654721858":"Upload anyway","1655372864":"Your contract will expire on this date (in GMT), based on the end time you’ve selected.","1655627840":"UPPER CASE","1656155124":"Resend in <0 /> seconds","1658954996":"Plant and Machine Operators and Assemblers","1659074761":"Reset Put","1659327870":"How do I cancel my withdrawal?","1659352235":"Add your Deriv MT5 CFDs account under Deriv Investments (Europe) Limited, regulated by the Malta Financial Services Authority (MFSA) (licence no. IS/70156).","1661126218":"Expiry date:","1665272539":"Remember: You cannot log in to your account until the selected date.","1665718170":"The document must contain a letterhead.","1665738338":"Balance","1665756261":"Go to live chat","1668138872":"Modify account settings","1669062316":"The payout at expiry is equal to the payout per pip multiplied by the difference, <0>in pips, between the final price and the strike price.","1670016002":"Multiplier: {{ multiplier }}","1670426231":"End Time","1671232191":"You have set the following limits:","1675030608":"To create this account first we need you to resubmit your proof of address.","1676549796":"Dynamic Leverage","1677027187":"Forex","1679743486":"1. Go to Quick strategy and select the strategy you want.","1680666439":"Upload your bank statement showing your name, account number, and transaction history.","1681765749":"Martingale formula 2","1682409128":"Untitled Strategy","1682636566":"Resend email in","1682980639":"Error: ","1683383299":"Your contract is closed automatically when your profit is more than or equals to this amount. This block can only be used with the accumulator trade type.","1683963454":"Your contract will be closed automatically at the next available asset price on {{date}} at {{timestamp}}.","1684419981":"What's this?","1686800117":"{{error_msg}}","1689103988":"Second Since Epoch","1689258195":"We were unable to verify your address with the details you provided. Please check and resubmit or choose a different document type.","1690746575":"Enhance your trading experience by upgrading your <0>{{platform}} {{type_1}} <1/>and <0>{{type_2}} {{from_account}} account(s).","1691335819":"To continue trading with us, please confirm who you are.","1691536201":"If you choose your duration in number of ticks, you won’t be able to terminate your contract early.","1691765860":"- Negation","1692912479":"Deriv MT5, Deriv X","1693614409":"Start time","1694517345":"Enter a new email address","1694888104":"The products offered on our website are complex derivative products that carry a significant risk of potential loss. CFDs are complex instruments with a high risk of losing money rapidly due to leverage. 70.78% of retail investor accounts lose money when trading CFDs with this provider. You should consider whether you understand how these products work and whether you can afford to take the high risk of losing your money.","1696190747":"Trading inherently involves risks, and actual profits can fluctuate due to various factors, including market volatility and other unforeseen variables. As such, exercise caution and conduct thorough research before engaging in any trading activities.","1698624570":"2. Hit Ok to confirm.","1699606318":"You've reached the limit of uploading your documents.","1700233813":"Transfer from {{selected_value}} is not allowed, Please choose another account from dropdown","1701447705":"Please update your address","1702339739":"Common mistakes","1703091957":"We collect information about your employment as part of our due diligence obligations, as required by anti-money laundering legislation.","1703712522":"Your payout is equal to the payout per pip multiplied by the difference, <0>in pips, between the final price and the strike price.","1704656659":"How much experience do you have in CFD trading?","1707264798":"Why can't I see deposited funds in my Deriv account?","1707758392":"Step 100 Index","1708413635":"For your {{currency_name}} ({{currency}}) account","1709859601":"Exit Spot Time","1711013665":"Anticipated account turnover","1711016273":"<0>This may take up to 2 minutes. During this time, some services may be unavailable.","1711676335":"square root","1711929663":"Your funds have been transferred","1712357617":"Invalid email address.","1713633297":"3. If the second trade is also successful, your stake will adjust to 2 USD or 2 units of the initial stake for the next trade.","1714255392":"To enable withdrawals, please complete your financial assessment.","1715011380":"Jump 25 Index","1715630945":"Returns the total profit in string format","1715680813":"Your contract will expire at exactly 23:59:59 GMT +0 on your selected expiry date.","1717023554":"Resubmit documents","1717474982":"CFDs on financial and derived instruments via a customisable platform.","1720451994":"We’ll charge a 2% transfer fee or {{minimum_fee}} {{currency}}, whichever is higher, for transfers between your Deriv fiat and Deriv cryptocurrency accounts.","1720968545":"Upload passport photo page from your computer","1721295446":"Favorites","1722056905":"The document you provided is not supported for your country. Please provide a supported document for your country.","1722888575":"{{mt5_migration_error}}","1723390945":"Your demo {{deriv}} {{type}} account is ready.","1723589564":"Represents the maximum number of outstanding contracts in your portfolio. Each line in your portfolio counts for one open position. Once the maximum is reached, you will not be able to open new positions without closing an existing position first.","1724367774":"You can make a funds transfer once the verification of your account is complete.","1724696797":"You are limited to one fiat account only.","1725958461":"Account number","1726472773":"Function with no return value","1726565314":"Close my account","1728183781":"About Tether","1729145421":"Risk warning","1731747596":"The block(s) highlighted in red are missing input values. Please update them and click \"Run bot\".","1732891201":"Sell price","1733711201":"Regulators/external dispute resolution","1734185104":"Balance: %1","1734264460":"Disclaimer","1734521537":"The document you provided appears to be two different types. Please try again or provide another document.","1736292549":"Update postal code","1737352280":"Bot.init is not called","1738094481":"<0>Duration: Ticks 1","1738206798":"Above spot","1738611950":"About Reverse Martingale","1738681493":"Remove your glasses, if necessary","1739086943":"Wall Street 30","1739384082":"Unemployed","1739668049":"Close your account","1740371444":"Underlying market is not selected","1741006997":"Yesterday","1742256256":"Please upload one of the following documents:","1743448290":"Payment agents","1743679873":"If you select <0>\"Call\", you’ll earn a <1>payout if the <1>final price is above the <1>strike price at <1>expiry. Otherwise, you won’t receive a payout.","1743902050":"Complete your financial assessment","1744509610":"Just drag the XML file from your computer onto the workspace, and your bot will be loaded accordingly. Alternatively, you can hit Import in Bot Builder, and choose to import your bot from your computer or from your Google Drive.","1745523557":"- Square root","1746051371":"Download the app","1746273643":"Moving Average Convergence Divergence","1747501260":"Sell conditions","1747652849":"If you select the take profit feature, your trade will be closed automatically at the nearest available asset price when your profit reaches or exceeds the take profit amount throughout the contract duration. Your profit may be more than the amount you entered depending on the market price at closing. You may change your take profit amount up to 15 seconds before expiry.","1747674345":"Please use `.` as a decimal separator for fractional numbers.","1747682136":"Contract was cancelled.","1748754976":"Run","1753082252":"This article explores the strategy integrated into Deriv Bot, a versatile trading bot designed to trade assets such as Forex, Commodities, and Derived Indices. We will delve into the strategy's core parameters, its application, and provide essential takeaways for traders looking to use the bot effectively.","1753183432":"We take all complaints seriously and aim to resolve them as quickly and fairly as possible. If you are unhappy with any aspect of our service, please let us know by submitting a complaint using the guidance below:","1753226544":"remove","1753975551":"Upload passport photo page","1754256229":"Each day, you can make up to {{ allowed_internal }} transfers between your Deriv accounts, up to {{ allowed_mt5 }} transfers between your Deriv and {{platform_name_mt5}} accounts, up to {{ allowed_ctrader }} transfers between your Deriv and {{platform_name_ctrader}} accounts, and up to {{ allowed_dxtrade }} transfers between your Deriv and {{platform_name_dxtrade}} accounts.","1756678453":"break out","1761038852":"Let’s continue with providing proofs of address and identity.","1761254001":"A number","1761762171":"Restart last trade on error (bot ignores the unsuccessful trade): {{ checkbox }}","1762707297":"Phone number","1763123662":"Upload your NIMC slip.","1766212789":"Server maintenance starts at 06:00 GMT every Sunday and may last up to 2 hours. You may experience service disruption during this time.","1766993323":"Only letters, numbers, and underscores are allowed.","1768293340":"Contract value","1768861315":"Minute","1768918213":"Only letters, space, hyphen, period, and apostrophe are allowed.","1769068935":"Choose any of these exchanges to buy cryptocurrencies:","1770041368":"Experience safer logins","1771037549":"Add a Deriv real account","1771592738":"Conditional block","1772396880":"The date of birth on your document doesn’t match your profile.","1777847421":"This is a very common password","1778893716":"Click here","1779144409":"Account verification required","1779519903":"Should be a valid number.","1779801832":"Please update your password accordingly.","1779872677":"Download e-book","1780442963":"Scan the QR code to download {{ platform }}.","1780770384":"This block gives you a random fraction between 0.0 to 1.0.","1782308283":"Quick strategy","1782395995":"Last Digit Prediction","1782690282":"Blocks menu","1782703044":"Sign up","1783526986":"How do I build a trading bot?","1783740125":"Upload your selfie","1785298924":"D’Alembert formula 1","1786644593":"Supported formats: JPEG, JPG, PNG, PDF, and GIF only","1787492950":"Indicators on the chart tab are for indicative purposes only and may vary slightly from the ones on the {{platform_name_dbot}} workspace.","1788515547":"<0/>For more information on submitting a complaint with the Office of the Arbiter for Financial Services, please <1>see their guidance.","1788966083":"01-07-1999","1789273878":"Payout per point","1789497185":"Make sure your passport details are clear to read, with no blur or glare","1791432284":"Search for country","1791926890":"If you select “<0>Higher”, you win the payout if the exit spot is strictly higher than the barrier.","1791971912":"Recent","1792037169":"To avoid delays, enter your <0>name and <0>date of birth exactly as they appear on your {{document_name}}.","1793913365":"To deposit money, please switch to your {{currency_symbol}} account.","1794815502":"Download your transaction history.","1796787905":"Please upload the following document(s).","1798943788":"You can only make deposits.","1801093206":"Get candle list","1801270786":"Ready to automate your trading strategy without writing any code? You’ve come to the right place.","1801927731":"{{platform_name_dxtrade}} accounts","1803338729":"Choose what type of contract you want to trade. For example, for the Rise/Fall trade type you can choose one of three options: Rise, Fall, or Both. Selected option will determine available options for the Purchase block.","1804620701":"Expiration","1804789128":"{{display_value}} Ticks","1806017862":"Max. ticks","1808058682":"Blocks are loaded successfully","1808867555":"This block uses the variable “i” to control the iterations. With each iteration, the value of “i” is determined by the items in a given list.","1810217569":"Please refresh this page to continue.","1811109068":"Jurisdiction","1811138041":"Enter a value from {{ value }} to 9.","1811343027":"2. Select your Martingale multiplier. In this example, it is 2.","1811972349":"Market","1811973475":"Returns a specific character from a given string","1812006199":"Identity verification","1812582011":"Connecting to server","1813700208":"Boom 300 Index","1815034361":"alphabetic","1815905959":"DTrader, DBot, SmartTrader, and Binary Bot","1815995250":"Buying contract","1817006592":"All trade types","1817154864":"This block gives you a random number from within a set range.","1820242322":"e.g. United States","1820332333":"Top up","1821818748":"Enter Driver License Reference number","1823177196":"Most popular","1824193700":"This block gives you the last digit of the latest tick value.","1824292864":"Call","1827607208":"File not uploaded.","1828370654":"Onboarding","1828856382":"If you select “<0>Differs”, you will win the payout if the last digit of the last tick is not the same as your prediction.","1830520348":"{{platform_name_dxtrade}} Password","1831847842":"I confirm that the name and date of birth above match my chosen identity document (see below)","1833499833":"Proof of identity documents upload failed","1836767074":"Search payment agent name","1837533589":"Stop Loss","1837762008":"Please submit your proof of identity and proof of address to verify your account in your account settings to access the cashier.","1839021527":"Please enter a valid account number. Example: CR123456789","1840721160":"Deriv MT5 latest password requirements","1840865068":"set {{ variable }} to Simple Moving Average Array {{ dummy }}","1841788070":"Palladium/USD","1841996888":"Daily loss limit","1842266423":"back","1843336754":"Select document","1843658716":"If you select \"Only Downs\", you win the payout if consecutive ticks fall successively after the entry spot. No payout if any tick rises or is equal to any of the previous ticks.","1843774866":"Starting","1845598565":"The second session concludes upon reaching the aim of one unit of potential profit per session, equivalent to 1 USD. If trading continues, a new session will commence again.","1845892898":"(min: {{min_stake}} - max: {{max_payout}})","1846266243":"This feature is not available for demo accounts.","1846587187":"You have not selected your country of residence","1846588117":"Your contract will be closed automatically when your loss reaches {{stop_out_percentage}}% of your stake.","1849484058":"Any unsaved changes will be lost.","1850031313":"- Low: the lowest price","1850132581":"Country not found","1850659345":"- Payout: the payout of the contract","1851052337":"Place of birth is required.","1851776924":"upper","1854480511":"Cashier is locked","1854874899":"Back to list","1854909245":"Multiplier:","1855566768":"List item position","1856485118":"Please <0>resubmit your proof of address to transfer funds between MT5 and Deriv accounts.","1856755117":"Pending action required","1858251701":"minute","1859308030":"Give feedback","1863053247":"Please upload your identity document.","1863731653":"To receive your funds, contact the payment agent","1865525612":"No recent transactions.","1866244589":"The entry spot is the first tick for High/Low Ticks.","1866811212":"Deposit in your local currency via an authorised, independent payment agent in your country.","1867217564":"Index must be a positive integer","1867783237":"High-to-Close","1869486036":"You receive a <0>payout at <0>expiry if the spot price never touches or breaches the <0>barrier during the contract period. If it does, your contract will be terminated early.","1869787212":"Even","1870933427":"Crypto","1871196637":"True if the result of the last trade matches the selection","1871377550":"Do you offer pre-built trading bots on Deriv Bot?","1871664426":"Note","1873376454":"This is a price level that you choose. If this barrier is ever crossed, your contract would be terminated.","1874481756":"Use this block to purchase the specific contract you want. You may add multiple Purchase blocks together with conditional blocks to define your purchase conditions. This block can only be used within the Purchase conditions block.","1874737957":"To trade multipliers, get a Deriv Apps account first.","1874756442":"BVI","1875090343":"Choose a date range","1875702561":"Load or build your bot","1876015808":"Social Security and National Insurance Trust","1876325183":"Minutes","1876333357":"Tax Identification Number is invalid.","1877225775":"Your proof of address is verified","1877832150":"# from end","1878172674":"No, we don't. However, you'll find quick strategies on Deriv Bot that'll help you build your own trading bot for free.","1878189977":"The Martingale strategy involves increasing your stake after each loss to recoup prior losses with a single successful trade.","1879042430":"Appropriateness Test, WARNING:","1879412976":"Profit amount: <0>{{profit}}","1879651964":"<0>Pending verification","1880029566":"Australian Dollar","1880097605":"prompt for {{ string_or_number }} with message {{ input_text }}","1880227067":"Submit passport photo pages","1880377568":"An example of D’Alembert strategy","1880875522":"Create \"get %1\"","1881018702":"hour","1881380263":"Total assets in your account.","1881587673":"Total stake since you last cleared your stats.","1882825238":"Restart trading conditions","1883531976":"Clerks","1885708031":"#","1887257727":"R is the number of rounds a trader can sustain given a specific loss threshold.","1887925280":"The document must be recent and include your name and address:","1889357660":"Enter a value in minutes, up to 60480 minutes (equivalent to 6 weeks).","1890171328":"By clicking Accept below and proceeding with the Account Opening you should note that you may be exposing yourself to risks (which may be significant, including the risk of loss of the entire sum invested) that you may not have the knowledge and experience to properly assess or mitigate.","1890332321":"Returns the number of characters of a given string of text, including numbers, spaces, punctuation marks, and symbols.","1893869876":"(lots)","1894667135":"Please verify your proof of address","1896269665":"CFDs on derived and financial instruments.","1899898605":"Maximum size: 8MB","1902547203":"MetaTrader 5 MacOS app","1903437648":"Blurry photo detected","1904665809":"The Reverse Martingale strategy in trading may offer substantial gains but also comes with significant risks. With your selected strategy, Deriv Bot provides automated trading with risk management measures like setting initial stake, stake size, maximum stake, profit threshold and loss threshold. It's crucial for traders to assess their risk tolerance, practice in a demo account, and understand the strategy before trading with real money.","1905032541":"We're now ready to verify your identity","1905589481":"If you want to change your account currency, please contact us via <0>live chat.","1906213000":"Our system will finish any Deriv Bot trades that are running, and Deriv Bot will not place any new trades.","1906639368":"If this is the first time you try to create a password, or you have forgotten your password, please reset it.","1907423697":"Earn more with Deriv API","1907499654":"Deriv App","1907899646":"Take profit can't be adjusted for ongoing accumulator contracts.","1908023954":"Sorry, an error occurred while processing your request.","1908239019":"Make sure all of the document is in the photo","1908686066":"Appropriateness Test Warning","1909647105":"TRX/USD","1909769048":"median","1910533633":"Get a real account to deposit money and start trading.","1913777654":"Switch account","1914014145":"Today","1914270645":"Default Candle Interval: {{ candle_interval_type }}","1914725623":"Upload the page that contains your photo.","1916129921":"Reverse Martingale","1917178459":"Bank Verification Number","1917523456":"This block sends a message to a Telegram channel. You will need to create your own Telegram bot to use this block.","1918796823":"Please enter a stop loss amount.","1918832194":"No experience","1919030163":"Tips to take a good selfie","1919296368":"2. Select your unit. In this example, it is 2 units or 2 USD.","1919594496":"{{website_name}} is not affiliated with any payment agents. Customers deal with payment agents at their sole risk. Customers are advised to check the credentials of payment agents and the accuracy of any information about payment agents (on {{website_name}} or elsewhere) before using their services.","1919694313":"To start trading, transfer funds from your Deriv account into this account.","1920217537":"Compare","1920468180":"How to use the SMA block","1921914669":"Deposit with Deriv P2P","1922529883":"Boom 1000 Index","1922955556":"Use a longer keyboard pattern with more turns","1924365090":"Maybe later","1924765698":"Place of birth*","1928930389":"GBP/NOK","1929694162":"Compare accounts","1930899934":"Tether","1931659123":"Run on every tick","1931884033":"It seems that your date of birth in the document is not the same as your Deriv profile. Please update your date of birth in the <0>Personal details page to solve this issue.","1934450653":"For <0>Contract type, set it to Both.","1938327673":"Deriv {{platform}} <0>{{is_demo}}","1939014728":"How do I remove blocks from the workspace?","1939902659":"Signal","1940408545":"Delete this token","1941915555":"Try later","1943440862":"Calculates Bollinger Bands (BB) list from a list with a period","1944204227":"This block returns current account balance.","1947527527":"1. This link was sent by you","1948092185":"GBP/CAD","1949719666":"Here are the possible reasons:","1950413928":"Submit identity documents","1955219734":"Town/City*","1957759876":"Upload identity document","1958788790":"This is the amount you’ll receive at expiry for every point of change in the underlying price, if the spot price never touches or breaches the barrier throughout the contract duration.","1958807602":"4. 'Table' takes an array of data, such as a list of candles, and displays it in a table format.","1959678342":"Highs & Lows","1960240336":"first letter","1964165648":"Connection lost","1965916759":"Asian options settle by comparing the last tick with the average spot over the period.","1966023998":"2FA enabled","1966281100":"Console {{ message_type }} value: {{ input_message }}","1966855430":"Account already exists","1968025770":"Bitcoin Cash","1968077724":"Agriculture","1968368585":"Employment status","1970060713":"You’ve successfully deleted a bot.","1971898712":"Add or manage account","1973536221":"You have no open positions yet.","1973910243":"Manage your accounts","1974273865":"This scope will allow third-party apps to view your account activity, settings, limits, balance sheets, trade purchase history, and more.","1978218112":"Google Authenticator","1981940238":"This complaints policy, which may change from time to time, applies to your account(s) registered with {{legal_entity_name_svg}} and {{legal_entity_name_v}}.","1982790875":"Upgrade your <0/><1>{{account_title}} {{platform}} account(s)","1982796981":"Declarations","1982912252":"Relative Strength Index (RSI) from a list with a period","1983001416":"Define your trade options such as multiplier and stake. This block can only be used with the multipliers trade type. If you select another trade type, this block will be replaced with the Trade options block.","1983358602":"This policy, which may change from time to time, applies to your account registered with {{legal_entity_name}}.","1983387308":"Preview","1983480826":"Sign in","1983544897":"P.O. Box is not accepted in address","1983676099":"Please check your email for details.","1984700244":"Request an input","1984742793":"Uploading documents","1985366224":"Each day, you can make up to {{ allowed_internal }} transfers between your Deriv accounts and up to {{ allowed_mt5 }} transfers between your Deriv and {{platform_name_mt5}} accounts.","1985637974":"Any blocks placed within this block will be executed at every tick. If the default candle interval is set to 1 minute in the Trade Parameters root block, the instructions in this block will be executed once every minute. Place this block outside of any root block.","1986322868":"When your loss reaches or exceeds this amount, your trade will be closed automatically.","1986498784":"BTC/LTC","1987080350":"Demo","1987447369":"Your cashier is locked","1988153223":"Email address","1988302483":"Take profit:","1990331072":"Proof of ownership","1990735316":"Rise Equals","1991055223":"View the market price of your favourite assets.","1991448657":"Don't know your tax identification number? Click <0>here to learn more.","1991524207":"Jump 100 Index","1994023526":"The email address you entered had a mistake or typo (happens to the best of us).","1994558521":"The platforms aren’t user-friendly.","1994600896":"This block requires a list of candles as an input parameter.","1995023783":"First line of address*","1996767628":"Please confirm your tax information.","1997138507":"If the last tick is equal to the average of the ticks, you don't win the payout.","1997313835":"Your stake will continue to grow as long as the current spot price remains within a specified <0>range from the <0>previous spot price. Otherwise, you lose your stake and the trade is terminated.","1999213036":"Enhanced security is just a tap away.","1999346412":"For faster verification, input the same address here as in your proof of address document (see section below)","2001222130":"Check your spam or junk folder. If it's not there, try resending the email.","2001361785":"1. Start with the initial stake. Let’s say 1 USD.","2001717886":"Demo Standard","2004052487":"Estimating the lifespan of your trades","2007028410":"market, trade type, contract type","2010759971":"Uploads successful","2010866561":"Returns the total profit/loss","2011609940":"Please input number greater than 0","2011808755":"Purchase Time","2012139674":"Android: Google password manager.","2014536501":"Card number","2014590669":"Variable '{{variable_name}}' has no value. Please set a value for variable '{{variable_name}}' to notify.","2015878683":"Need help? Contact us via <0>live chat","2017672013":"Please select the country of document issuance.","2018044371":"Multipliers let you trade with leverage and limit your risk to your stake. <0>Learn more","2019596693":"The document was rejected by the Provider.","2020545256":"Close your account?","2021037737":"Please update your details to continue.","2023546580":"Your account will be available for trading once the verification of your account is complete.","2023659183":"Student","2023762268":"I prefer another trading website.","2025339348":"Move away from direct light — no glare","2027441253":"Why do we collect this?","2027625329":"Simple Moving Average Array (SMAA)","2027638150":"Upgrade","2027696535":"Tax information","2028163119":"EOS/USD","2029237955":"Labuan","2030018735":"RSI is a technical analysis tool that helps you identify the market trend. It will give you a value from 0 to 100. An RSI value of 70 and above means that the asset is overbought and the current trend may reverse, while a value of 30 and below means that the asset is oversold.","2030045667":"Message","2033648953":"This block gives you the specified candle value for a selected time interval.","2034803607":"You must be 18 years old and above.","2035258293":"Start trading with us","2035925727":"sort {{ sort_type }} {{ sort_direction }} {{ input_list }}","2036578466":"Should be {{value}}","2037906477":"get sub-list from #","2038562422":"TIN is required.","2039198937":"Maximum stake: The maximum amount you are willing to pay to enter a single trade. The stake for your next trade will reset to the initial stake if it exceeds this value. This is an optional risk management parameter.","2042023623":"We’re reviewing your documents. This should take about 5 minutes.","2042050260":"- Purchase price: the purchase price (stake) of the contract","2042115724":"Upload a screenshot of your account and personal details page with your name, account number, phone number, and email address.","2044086432":"The close is the latest tick at or before the end time. If you selected a specific end time, the end time is the selected time.","2046273837":"Last tick","2046577663":"Import or choose your bot","2048110615":"Email address*","2048134463":"File size exceeded.","2049386104":"We need you to submit these in order to get this account:","2050170533":"Tick list","2051249190":"Add funds and start trading","2051558666":"View transaction history","2051596653":"Demo Zero Spread BVI","2052022586":"To enhance your MT5 account security we have upgraded our password policy.","2054889300":"Create \"%1\"","2055317803":"Copy the link to your mobile browser","2056369950":"<0>To complete your Wallet setup, log out and then log in again.","2056526458":"Get real account","2057082550":"Accept our updated <0>terms and conditions","2057419639":"Exit Spot","2059365224":"Yes, you can get started with a pre-built bot using the Quick strategy feature. You’ll find some of the most popular trading strategies here: Martingale, D'Alembert, and Oscar's Grind. Just select the strategy, enter your trade parameters, and your bot will be created for you. You can always tweak the parameters later.","2059753381":"Why did my verification fail?","2060873863":"Your order {{order_id}} is complete","2062912059":"function {{ function_name }} {{ function_params }}","2063812316":"Text Statement","2063890788":"Cancelled","2066978677":"{{formatted_opening_time}} (GMT) on {{opening_day}},<0 /> {{opening_date}}.","2067903936":"Driving licence","2070002739":"Don’t accept","2070345146":"When opening a leveraged CFD trade.","2070518923":"Import your bot or tap Quick Strategies to choose from the ready-to-use bot templates.","2070752475":"Regulatory Information","2070858497":"Your document appears to be a screenshot.","2071043849":"Browse","2074207096":"How to create a passkey?","2074235904":"Last name is required.","2074497711":"The Telegram notification could not be sent","2074713563":"4.2. Submission of a complaint","2079925695":"Unit: The number of units that are added in the event of a trade resulting in loss or the number of units removed in the event of a trade resulting in profit. For example, if the unit is set at 2, the stake increases or decreases by two times the initial stake of 1 USD, meaning it changes by 2 USD.","2080553498":"3. Get the chat ID using the Telegram REST API (read more: https://core.telegram.org/bots/api#getupdates)","2080829530":"Sold for: {{sold_for}}","2081622549":"Must be a number higher than {{ min }}","2082533832":"Yes, delete","2084693624":"Converts a string representing a date/time string into seconds since Epoch. Example: 2019-01-01 21:03:45 GMT+0800 will be converted to 1546347825. Time and time zone offset are optional.","2085387371":"Must be numbers, letters, and special characters . , ' -","2085602195":"- Entry value: the value of the first tick of the contract","2086048243":"Certificate of incorporation","2086383634":"You are adding your {{platform}} {{product}} account under {{company}}, regulated by the British Virgin Islands Financial Services Commission (licence no. SIBA/L/18/1114).","2086792088":"Both barriers should be relative or absolute","2088344208":"Forex (standard), stock indices, commodities, cryptocurrencies, stocks, ETFs, synthetic indices, basket indices and derived FX","2088735355":"Your session and login limits","2089087110":"Basket indices","2089395053":"Unit","2089581483":"Expires on","2090650973":"The spot price may change by the time your order reaches our servers. When this happens, your payout may be affected.","2091671594":"Status","2093675079":"- Close: the closing price","2096014107":"Apply","2096456845":"Date of birth*","2097170986":"About Tether (Omni)","2097381850":"Calculates Simple Moving Average line from a list with a period","2097815211":"Number of rounds (R) = 10","2097932389":"Upload 2 separate screenshots from the personal details page and the account page via <0>https://app.astropay.com/profile","2100713124":"account","2100912278":"4. If a trade ends in a loss, the stake for the following trade will be reset to the initial stake amount of 1 USD.","2101265432":"Something went wrong","2101972779":"This is the same as the above example, using a tick list.","2102572780":"Length of digit code must be 6 characters.","2104115663":"Last login","2104364680":"Please switch to your demo account to run your Deriv Bot.","2104397115":"Please go to your account settings and complete your personal details to enable deposits and withdrawals.","2107381257":"Scheduled cashier system maintenance","2107882050":"The back of your document appears to be missing. Please include both sides of your identity document.","2110365168":"Maximum number of trades reached","2111015970":"This block helps you check if your contract can be sold. If your contract can be sold, it returns “True”. Otherwise, it returns an empty string.","2111528352":"Creating a variable","2112119013":"Take a selfie showing your face","2112175277":"with delimiter","2113321581":"Add a Deriv Gaming account","2114766645":"Some trade types are unavailable for {{symbol}}.","2115223095":"Loss","2117165122":"1. Create a Telegram bot and get your Telegram API token. Read more on how to create bots in Telegram here: https://core.telegram.org/bots#6-botfather","2117489390":"Auto update in {{ remaining }} seconds","2118292085":"<0>Note: You’ll receive an email when your deposit starts being processed.","2119449126":"Example output of the below example will be:","2119710534":"FAQ","2121227568":"NEO/USD","2122152120":"Assets","2127564856":"Withdrawals are locked","2128919448":"We’ll offer to buy your contract at this price should you choose to sell it before its expiry. This is based on several factors, such as the current spot price. We won’t offer a contract value if the remaining duration is below 15 seconds or if the contract duration is in ticks.","2129807378":"Update profile","2133075559":"This means after 10 rounds of consecutive losses, this trader will lose 100 USD. This reaches the loss threshold of 100 USD, stopping the bot.","2133451414":"Duration","2133470627":"This block returns the potential payout for the selected trade type. This block can be used only in the \"Purchase conditions\" root block.","2135563258":"Forex trading frequency","2136246996":"Selfie uploaded","2136480755":"Some details in your document appear to be invalid, missing, or unclear.","2137645254":"If you select “<0>Call”, you’ll earn a <1>payout if the <2>final price is above the <3>strike price at <4>expiry. Otherwise, you won’t receive a payout.","2137901996":"This will clear all data in the summary, transactions, and journal panels. All counters will be reset to zero.","2137993569":"This block compares two values and is used to build a conditional structure.","2138861911":"Scans and photocopies are not accepted","2139171480":"Reset Up/Reset Down","2139362660":"left side","2141055709":"New {{type}} password","2143803283":"Purchase Error","2144609616":"If you select \"Reset-Down”, you win the payout if the exit spot is strictly lower than either the entry spot or the spot at reset time.","2145690912":"Income Earning","2145995536":"Create new account","2146336100":"in text %1 get %2","2146698770":"Pro tip: You can also click and drag out the desired block","2146751355":"We use current-tick-execution mechanism, which is the latest asset price when the trade opening is processed by our servers for Volatility Index, Basket Indices, Jump Indices and Crash/Boom Indices.","2146892766":"Binary options trading experience","2147244655":"How do I import my own trading bot into Deriv Bot?","-931052769":"Submit verification","-1004605898":"Tips","-1938142055":"Documents uploaded","-448090287":"The link only works on mobile devices","-1244287721":"Something's gone wrong","-241258681":"You'll need to restart your verification on your computer","-929254273":"Get secure link","-2021867851":"Check back here to finish the submission","-1547069149":"Open the link and complete the tasks","-1767652006":"Here's how to do it:","-277611959":"You can now return to your computer to continue","-724178625":"Make sure full document is visible","-1519380038":"Glare detected","-1895280620":"Make sure your card details are clear to read, with no blur or glare","-1464447919":"Make sure your permit details are clear to read, with no blur or glare","-1436160506":"Make sure details are clear to read, with no blur or glare","-759124288":"Close","-759118956":"Redo","-753375398":"Enlarge image","-1042933881":"Driver's license","-1503134764":"Face photo page","-1335343167":"Sorry, no mobile phone bills","-699045522":"Documents you can use to verify your identity","-543666102":"It must be an official photo ID","-903877217":"These are the documents most likely to show your current home address","-1356835948":"Choose document","-1364375936":"Select a %{country} document","-401586196":"or upload photo – no scans or photocopies","-3110517":"Take a photo with your phone","-2033894027":"Submit identity card (back)","-20684738":"Submit license (back)","-1359585500":"Submit license (front)","-106779602":"Submit residence permit (back)","-1287247476":"Submit residence permit (front)","-1954762444":"Restart the process on the latest version of Safari","-261174676":"Must be under 10MB.","-685885589":"An error occurred while loading the component","-502539866":"Your face is needed in the selfie","-1377968356":"Please try again","-1226547734":"Try using a JPG or PNG file","-849068301":"Loading...","-1730346712":"Loading","-1849371752":"Check that your number is correct","-309848900":"Copy","-1424436001":"Send link","-1093833557":"How to scan a QR code","-1408210605":"Point your phone’s camera at the QR code","-1773802163":"If it doesn’t work, download a QR code scanner from Google Play or the App Store","-109026565":"Scan QR code","-1644436882":"Get link via SMS","-1667839246":"Enter mobile number","-1533172567":"Enter your mobile number:","-1352094380":"Send this one-time link to your phone","-28974899":"Get your secure link","-359315319":"Continue","-826420669":"Make sure","-1279080293":"2. Your desktop window stays open","-102776692":"Continue with the verification","-89152891":"Take a photo of the back of your card","-1646367396":"Take a photo of the front of your card","-1350855047":"Take a photo of the front of your license","-2119367889":"Take a photo using the basic camera mode instead","-342915396":"Take a photo","-419040068":"Passport photo page","-1354983065":"Refresh","-1925063334":"Recover camera access to continue face verification","-54784207":"Camera access is denied","-1392699864":"Allow camera access","-269477401":"Provide the whole document page for best results","-864639753":"Upload back of card from your computer","-1309771027":"Upload front of license from your computer","-1722060225":"Take photo","-565732905":"Selfie","-1703181240":"Check that it is connected and functional. You can also continue verification on your phone","-2043114239":"Camera not working?","-2029238500":"It may be disconnected. Try using your phone instead.","-468928206":"Make sure your device's camera works","-466246199":"Camera not working","-698978129":"Remember to press stop when you're done. Redo video actions","-538456609":"Looks like you took too long","-781816433":"Photo of your face","-1471336265":"Make sure your selfie clearly shows your face","-1375068556":"Check selfie","-1914530170":"Face forward and make sure your eyes are clearly visible","-776541617":"We'll compare it with your document","-478752991":"Your link will expire in one hour","-1859729380":"Keep this window open while using your mobile","-1283761937":"Resend link","-629011256":"Don't refresh this page","-1005231905":"Once you've finished we'll take you to the next step","-542134805":"Upload photo","-1462975230":"Document example","-1472844935":"The photo should clearly show your document","-1120954663":"First name*","-1659980292":"First name","-962979523":"Your {{ field_name }} as in your identity document","-1416797980":"Please enter your {{ field_name }} as in your official identity documents.","-1466268810":"Please remember that it is your responsibility to keep your answers accurate and up to date. You can update your personal details at any time in your <0>account settings.","-32386760":"Name","-766265812":"first name","-1857534296":"John","-1282749116":"last name","-1485480657":"Other details","-1784741577":"date of birth","-1702919018":"Second line of address (optional)","-1315410953":"State/Province","-2040322967":"Citizenship","-344715612":"Employment status*","-1543016582":"I hereby confirm that the tax information I provided is true and complete. I will also inform {{legal_entity_name}} about any changes to this information.","-946282997":"Additional information","-1315571766":"Place of birth","-789291456":"Tax residence*","-1692219415":"Tax residence","-1903720068":"The country in which you meet the criteria for paying taxes. Usually the country in which you physically reside.","-651516152":"Tax Identification Number","-1387062433":"Account opening reason","-222283483":"Account opening reason*","-307865807":"Risk Tolerance Warning","-690100729":"Yes, I understand the risk.","-2010628430":"CFDs and other financial instruments come with a high risk of losing money rapidly due to leverage. You should consider whether you understand how CFDs and other financial instruments work and whether you can afford to take the high risk of losing your money. <0/><0/> To continue, you must confirm that you understand your capital is at risk.","-863770104":"Please note that by clicking ‘OK’, you may be exposing yourself to risks. You may not have the knowledge or experience to properly assess or mitigate these risks, which may be significant, including the risk of losing the entire sum you have invested.","-684271315":"OK","-1292808093":"Trading Experience","-153346659":"Upload your selfie.","-602131304":"Passport number","-1051213440":"Upload the front and back of your identity card.","-1600807543":"First, enter your identity card number and the expiry date.","-1139923664":"Next, upload the front and back of your identity card.","-783705755":"Upload the front of your identity card.","-566750665":"NIMC slip and proof of age","-1465944279":"NIMC slip number","-429612996":"Next, upload both of the following documents.","-376981174":"Upload your proof of age: birth certificate or age declaration document.","-612174191":"First line of address is required","-242734402":"Only {{max}} characters, please.","-378415317":"State is required","-1784470716":"State is not in a proper format","-1699820408":"Please enter a {{field_name}} under {{max_number}} characters.","-1575567374":"postal/ZIP code","-816263501":"Only letters, numbers, space and hyphen are allowed.","-755626951":"Complete your address details","-1024240099":"Address","-1534917661":"Select your preferred currency","-1027595143":"Less than $25,000","-40491332":"$25,000 - $50,000","-1139806939":"$50,001 - $100,000","-996132458":"Construction","-915003867":"Health","-1430012453":"Information & Communications Technology","-987824916":"Science & Engineering","-146630682":"Social & Cultural","-761306973":"Manufacturing","-1631552645":"Professionals","-474864470":"Personal Care, Sales and Service Workers","-1129355784":"Agricultural, Forestry and Fishery Workers","-1242914994":"Craft, Metal, Electrical and Electronics Workers","-1317824715":"Cleaners and Helpers","-1592729751":"Mining, Construction, Manufacturing and Transport Workers","-1030759620":"Government Officers","-2137323480":"Company Ownership","-1590574533":"Divorce Settlement","-1667683002":"Inheritance","-1237843731":"Investment Income","-777506574":"Sale of Property","-654781670":"Primary","-1717373258":"Secondary","-1156937070":"$500,001 - $1,000,000","-315534569":"Over $1,000,000","-2068544539":"Salaried Employee","-531314998":"Investments & Dividends","-1235114522":"Pension","-1298056749":"State Benefits","-449943381":"Savings & Inheritance","-477761028":"Voter ID","-1466346630":"CPF","-1161338910":"First name is required.","-1629185446":"Enter no more than 50 characters.","-1281693513":"Date of birth is required.","-26599672":"Citizenship is required","-912174487":"Phone is required.","-673765468":"Letters, numbers, spaces, periods, hyphens and forward slashes only.","-212167954":"Tax Identification Number is not properly formatted.","-1823540512":"Personal details","-1227878799":"Speculative","-1174064217":"Mr","-855506127":"Ms","-204765990":"Terms of use","-739367071":"Employed","-626752657":"0-1 year","-532014689":"1-2 years","-1001024004":"Over 3 years","-790513277":"6-10 transactions in the past 12 months","-580085300":"11-39 transactions in the past 12 months","-1116008222":"You should enter 9-35 numbers.","-1995979930":"First line of address is required.","-703454156":"Please enter a Postal/ZIP code under 20 characters.","-2113555886":"Only letters, numbers, space, and hyphen are allowed.","-1103497546":"Tax return","-700600899":"Business proof of address","-1073862586":"Memorandum","-1823328095":"Authorization letter","-397487797":"Enter your full card number","-1376950117":"That file format isn't supported. Please upload .pdf, .png, .jpg, or .jpeg files only.","-612752984":"These are default limits that we apply to your accounts.","-1498206510":"Account limits","-1411635770":"Learn more about account limits","-1340125291":"Done","-1101543580":"Limit","-858297154":"Represents the maximum amount of cash that you may hold in your account. If the maximum is reached, you will be asked to withdraw funds.","-976258774":"Not set","-1182362640":"Represents the maximum aggregate payouts on outstanding contracts in your portfolio. If the maximum is attained, you may not purchase additional contracts without first closing out existing positions.","-1781293089":"Maximum aggregate payouts on open positions","-1412690135":"*Any limits in your Self-exclusion settings will override these default limits.","-1598751496":"Represents the maximum volume of contracts that you may purchase in any given trading day.","-173346300":"Maximum daily turnover","-138380129":"Total withdrawal allowed","-1502578110":"Your account is fully authenticated and your withdrawal limits have been lifted.","-506122621":"Please take a moment to update your information now.","-1106259572":"Don't know your tax identification number? <1 />Click <0>here to learn more.","-252665911":"Place of birth{{required}}","-859814496":"Tax residence{{required}}","-237940902":"Tax Identification number{{required}}","-919191810":"Please fill in tax residence.","-270569590":"Intended use of account{{required}}","-2120290581":"Intended use of account is required.","-594456225":"Second line of address","-1964954030":"Postal/ZIP Code","-1541554430":"Next","-71696502":"Previous","-516397235":"Be careful who you share this token with. Anyone with this token can perform the following actions on your account behalf","-989216986":"Add accounts","-617480265":"Delete token","-316749685":"Are you sure you want to delete this token?","-955038366":"Copy this token","-1668692965":"Hide this token","-1661284324":"Show this token","-1076138910":"Trade","-1666909852":"Payments","-488597603":"Trading information","-605778668":"Never","-1628008897":"Token","-1238499897":"Last Used","-2087317410":"Oops, something went wrong.","-184202848":"Upload file","-863586176":"Drag and drop a file or click to browse your files.","-370334393":"Click here to browse your files.","-723198394":"File size should be 8MB or less","-1948369500":"File uploaded is not supported","-1040865880":"Drop files here..","-1100235269":"Industry of employment","-684388823":"Estimated net worth","-509054266":"Anticipated annual turnover","-1117345066":"Choose the document type","-1634507018":"Enter your {{document_name}}","-1237846864":"Verify again","-39187636":"{{index}}.","-337620257":"Switch to real account","-2120454054":"Add a real account","-38915613":"Unsaved changes","-2137450250":"You have unsaved changes. Are you sure you want to discard changes and leave this page?","-1067082004":"Leave Settings","-1113902570":"Details","-2142540205":"It appears that the address in your document doesn’t match the address in your Deriv profile. Please update your personal details now with the correct address.","-1451334536":"Continue trading","-251603364":"Your document for proof of address is expired. <0/>Please submit again.","-1425489838":"Proof of address verification not required","-1008641170":"Your account does not need address verification at this time. We will inform you if address verification is required in the future.","-60204971":"We could not verify your proof of address","-1944264183":"To continue trading, you must also submit a proof of identity.","-1088324715":"We’ll review your documents and notify you of its status within 1 - 3 working days.","-329713179":"Ok","-2145244263":"This field is required","-1500958859":"Verify","-839094775":"Back","-1813671961":"Your identity verification failed because:","-2097808873":"We were unable to verify your ID with the details you provided. ","-1652371224":"Your profile is updated","-504784172":"Your document has been submitted","-1391934478":"Your ID is verified. You will also need to submit proof of your address.","-118547687":"ID verification passed","-200989771":"Go to personal details","-1358357943":"Please check and update your postal code before submitting proof of identity.","-1401994581":"Your personal details are missing","-2004327866":"Please select a valid country of document issuance.","-1664159494":"Country","-1044962593":"Upload Document","-749870311":"Please contact us via <0>live chat.","-1084991359":"Proof of identity verification not required","-1981334109":"Your account does not need identity verification at this time. We will inform you if identity verification is required in the future.","-182918740":"Your proof of identity submission failed because:","-155705811":"A clear colour photo or scanned image","-246893488":"JPEG, JPG, PNG, PDF, or GIF","-1454880310":"Must be valid for at least 6 months","-1949501500":"First, enter your {{label}}.","-100534371":"Before uploading, please ensure that you’re facing forward in the selfie, your face is within the frame, and your eyes are clearly visible even if you’re wearing glasses.","-1529523673":"Confirm and upload","-705047643":"Sorry, an error occured. Please select another file.","-1664309884":"Tap here to upload","-1725454783":"Failed","-841187054":"Try Again","-856213726":"You must also submit a proof of address.","-552371330":"We were unable to verify your income. <0 /> Please check the email we've sent you for further information.","-978467455":"Limit reached","-361316523":"You have reached the maximum number of allowed attempts for submitting proof of income. <0 /> Please check the email we've sent you for further information.","-1785967427":"We'll review your documents and notify you of its status within 7 working days.","-987011273":"Your proof of ownership isn't required.","-808299796":"You are not required to submit proof of ownership at this time. We will inform you if proof of ownership is required in the future.","-179726573":"We’ve received your proof of ownership.","-813779897":"Proof of ownership verification passed.","-1389323399":"You should enter {{min_number}}-{{max_number}} characters.","-47815161":"Please include at least 1 special character such as ( _ @ ? ! / # ) in your password.","-1313806160":"Please request a new password and check your email for the new token.","-1598167506":"Success","-1077809489":"You have a new {{platform}} password to log in to your {{platform}} accounts on the web and mobile apps.","-2068479232":"{{platform}} password","-507633532":"Your password must contain between 8-16 characters that include uppercase and lowercase letters, and at least one number and special character such as ( _ @ ? ! / # ).","-1861974537":"Strong passwords contain at least 8 characters, combine uppercase and lowercase letters, numbers, and symbols.","-2005211699":"Create","-1597186502":"Reset {{platform}} password","-638756912":"Black out digits 7 to 12 of the card number that’s shown on the front of your debit/credit card.⁤","-996691262":"We’ve introduced these limits to encourage <0>responsible trading. They are optional, and you can adjust them anytime.","-2079276011":"These limits apply to your multipliers trades only. For example, <0>maximum total loss refers to the losses on your multipliers trades.","-2116570030":"If you want to adjust your limits, <0>contact us via live chat. We’ll make the adjustments within 24 hours.","-1389915983":"You decide how much and how long to trade. You can take a break from trading whenever you want. This break can be from 6 weeks to 5 years. When it’s over, you can extend it or log in to resume trading. If you don’t want to set a specific limit, leave the field empty.","-1031814119":"About trading limits and self-exclusion","-183468698":"Trading limits and self-exclusion","-1088698009":"These self-exclusion limits help you control the amount of money and time you spend trading on {{platform_name_trader}}, {{platform_name_dbot}}, {{platform_name_smarttrader}} and {{platform_name_bbot}} on Deriv. The limits you set here will help you exercise <0>responsible trading.","-933963283":"No, review my limits","-1759860126":"Yes, log me out immediately","-572347855":"{{value}} mins","-313333548":"You’ll be able to adjust these limits at any time. You can reduce your limits from the <0>self-exclusion page. To increase or remove your limits, please contact our <1>Customer Support team.","-1265833982":"Accept","-2123139671":"Your stake and loss limits","-1250802290":"24 hours","-2070080356":"Max. total stake","-1545823544":"7 days","-180147209":"You will be automatically logged out from each session after this time limit.","-374553538":"Your account will be excluded from the website until this date (at least 6 months, up to 5 years).","-2105708790":"Your maximum account balance and open positions","-1960600163":"Once your account balance reaches this amount, you will not be able to deposit funds into your account.","-1073845224":"No. of open position(s)","-288196326":"Your maximum deposit limit","-568749373":"Max. deposit limit","-1617352279":"The email is in your spam folder (Sometimes things get lost there).","-547557964":"We can’t deliver the email to this address (Usually because of firewalls or filtering).","-142444667":"Please click on the link in the email to change your Deriv MT5 password.","-742748008":"Check your email and click the link in the email to proceed.","-84068414":"Still didn't get the email? Please contact us via <0>live chat.","-474419287":"FATCA declaration","-1101737402":"Please select*","-975118358":"Your account will be opened with {{legal_entity_name}}, regulated by the Malta Financial Services Authority (MFSA), and will be subject to the laws of Malta.","-2073934245":"The financial trading services offered on this site are only suitable for customers who accept the possibility of losing all the money they invest and who understand and have experience of the risk involved in the purchase of financial contracts. Transactions in financial contracts carry a high degree of risk. If the contracts you purchased expire as worthless, you will lose all your investment, which includes the contract premium.","-1035494182":"You acknowledge that, subject to the Company's discretion, applicable regulations, and internal checks being fulfilled, we will open an account for you and allow you to deposit funds during the client acceptance procedure. However, until the verification of your account is completed, you will not be able to trade, withdraw or make further deposits. If you do not provide relevant documents within 30-days, we will refund the deposited amount through the same payment method you used to deposit.","-1125193491":"Add account","-2068229627":"I am not a PEP, and I have not been a PEP in the last 12 months.","-1209644365":"I hereby confirm that my request for opening an account with Deriv Investments (Europe) Ltd is made on my own initiative.","-740157281":"Trading Experience Assessment","-1720468017":"In providing our services to you, we are required to obtain information from you in order to assess whether a given product or service is appropriate for you.","-1685104463":"* This is required","-186841084":"Change your login email","-907403572":"To change your email address, you'll first need to unlink your email address from your {{identifier_title}} account.","-1850792730":"Unlink from {{identifier_title}}","-428335668":"You will need to set a password to complete the process.","-1232613003":"<0>Verification failed. <1>Why?","-805775852":"<0>Needs verification.<1>Verify now","-1983989074":"<0>No new positions","-1196936955":"Upload a screenshot of your name and email address from the personal information section.","-1286823855":"Upload your mobile bill statement showing your name and phone number.","-1309548471":"Upload your bank statement showing your name and account details.","-1410396115":"Upload a photo showing your name and the first six and last four digits of your card number. If the card does not display your name, upload the bank statement showing your name and card number in the transaction history.","-3805155":"Upload a screenshot of either of the following to process the transaction:","-1523487566":"- your account profile section on the website","-613062596":"- the Account Information page on the app","-1718304498":"User ID","-609424336":"Upload a screenshot of your name, account number, and email address from the personal details section of the app or profile section of your account on the website.","-1954436643":"Upload a screenshot of your username on the General Information page at <0>https://onlinenaira.com/members/index.htm","-79853954":"Upload a screenshot of your account number and phone number on the Bank Account/Mobile wallet page at <0>https://onlinenaira.com/members/bank.htm","-1192882870":"Upload a screenshot of your name and account number from the personal details section.","-818898181":"Name in document doesn’t match your Deriv profile.","-310316375":"Address in document doesn’t match address you entered above.","-485368404":"Document issued more than 6-months ago.","-91160765":"Document issued more than 12-months ago.","-367016488":"Blurry document. All information must be clear and visible.","-1957076143":"Cropped document. All information must be clear and visible.","-1576856758":"An account with these details already exists. Please make sure the details you entered are correct as only one real account is allowed per client. If this is a mistake, contact us via <0>live chat.","-1792723131":"To avoid delays, enter your <0>date of birth exactly as it appears on your {{document_name}}.","-5605257":"This scope will allow third-party apps to withdraw to payment agents and make inter-account transfers for you.","-1373485333":"This scope will allow third-party apps to view your trading history.","-758221415":"This scope will allow third-party apps to open accounts for you, manage your settings and token usage, and more. ","-1629894615":"I have other financial priorities.","-844051272":"I want to stop myself from trading.","-1113965495":"I’m no longer interested in trading.","-1224285232":"Customer service was unsatisfactory.","-1231402474":"Connected apps are authorised applications associated with your account through your API token or the OAuth authorisation process. They can act on your behalf within the limitations that you have set.","-506083843":"As a user, you are responsible for sharing access and for actions that occur in your account (even if they were initiated by a third-party app on your behalf).","-831752682":"Please note that only third-party apps will be displayed on this page. Official Deriv apps will not appear here.","-915844096":"US citizenship or lawful permanent resident (green card) status","-208714573":"An “in care of” address or a “hold mail” address that is the sole address with respect to the client","-1082633433":"A power of attorney or signatory authority granted to a person with a US address.","-231863107":"No","-1858215754":"The document must be up-to-date and signed by the issuance authority.","-718917527":"Invalid or incomplete documents shall be rejected.","-1526404112":"Utility bill: electricity, water, gas, or landline phone bill.","-537552700":"Home rental agreement: valid and current agreement.","-506510414":"Date and time","-1708927037":"IP address","-189310067":"Account closed","-849320995":"Assessments","-773766766":"Email and passwords","-1144318594":"Passkeys","-1466827732":"Self exclusion","-241588481":"Login history","-966136867":"Connected apps","-213009361":"Two-factor authentication","-526636259":"Error 404","-870902742":"How much knowledge and experience do you have in relation to online trading?","-1929477717":"I have an academic degree, professional certification, and/or work experience related to financial services.","-1540148863":"I have attended seminars, training, and/or workshops related to trading.","-922751756":"Less than a year","-542986255":"None","-1337206552":"In your understanding, CFD trading allows you to","-456863190":"Place a position on the price movement of an asset where the outcome is a fixed return or nothing at all.","-1314683258":"Make a long-term investment for a guaranteed profit.","-1546090184":"How does leverage affect CFD trading?","-1636427115":"Leverage helps to mitigate risk.","-800221491":"Leverage guarantees profits.","-811839563":"Leverage lets you open large positions for a fraction of trade value, which may result in increased profit or loss.","-1185193552":"Close your trade automatically when the loss is equal to or more than a specified amount, as long as there is adequate market liquidity.","-1046354":"Close your trade automatically when the profit is equal to or more than a specified amount, as long as there is adequate market liquidity.","-1842858448":"Make a guaranteed profit on your trade.","-860053164":"When trading multipliers.","-1250327770":"When buying shares of a company.","-1222388581":"All of the above.","-1592318047":"See example","-1694758788":"Enter your document number","-1176889260":"Please select a document type.","-274764613":"Driver License Reference number","-1265050949":"identity document","-2139303636":"You may have followed a broken link, or the page has moved to a new address.","-1448368765":"Error code: {{error_code}} page not found","-254792921":"You can only make deposits at the moment. To enable withdrawals, please complete your financial assessment.","-1437017790":"Financial information","-70342544":"We’re legally obliged to ask for your financial information.","-39038029":"Trading experience","-601903492":"Forex trading experience","-1012699451":"CFD trading experience","-1894668798":"Other trading instruments experience","-1026468600":"Other trading instruments frequency","-136976514":"Country of residence*","-1124948631":"Professional Client","-259515058":"By default, all {{brand_website_name}} clients are retail clients but anyone can request to be treated as a professional client.","-1463348492":"I would like to be treated as a professional client.","-1958764604":"Email preference","-2068064150":"Get updates about Deriv products, services and events.","-1558679249":"Please make sure your information is correct or it may affect your trading experience.","-1822545742":"Ether Classic","-1334641066":"Litecoin","-1214036543":"US Dollar","-1782590355":"No currency has been set for this account","-1171226355":"Length of token name must be between {{MIN_TOKEN}} and {{MAX_TOKEN}} characters.","-1803339710":"Maximum {{MAX_TOKEN}} characters.","-408613988":"Select scopes based on the access you need.","-807767876":"Note:","-1117963487":"Name your token and click on 'Create' to generate your token.","-2116332353":"Please close your positions in the following Deriv account(s):","-2048005267":"{{number_of_positions}} position(s)","-2125635811":"Please withdraw your funds from the following {{platform_name}} account(s):","-577445413":"Please close your positions in the following {{platform_name}} account(s):","-1219849101":"Please select at least one reason","-9323953":"Remaining characters: {{remaining_characters}}","-484540402":"An error occurred","-1911549768":"Inaccessible MT5 account(s)","-1869355019":"Action required","-1030102424":"You can't trade on Deriv.","-448385353":"You can't make transactions.","-1058447223":"Before closing your account:","-912764166":"Withdraw your funds.","-60139953":"We shall delete your personal information as soon as our legal obligations are met, as mentioned in the section on Data Retention in our <0>Security and privacy policy","-2061895474":"Closing your account will automatically log you out. We shall delete your personal information as soon as our legal obligations are met.","-203298452":"Close account","-937707753":"Go Back","-771109503":"Use our powerful, flexible, and free API to build a custom trading platform for yourself or for your business.","-1815044949":"You currently don't have any third-party authorised apps associated with your account.","-1699100421":"What are connected apps?","-536187647":"Confirm revoke access?","-1357606534":"Permission","-570222048":"Revoke access","-1468863262":"{{action}}","-727433417":"{{status}}","-1814836151":"What are passkeys?","-1275937234":"Unlock your account like your phone - with biometrics, face scan or PIN.","-587750445":"Extra security layer.","-642452561":"Shields against unauthorised access and phishing.","-1654043401":"You can create one passkey per device.","-1411242065":"Where are passkeys saved?","-258752017":"What happens if my Deriv account email is changed?","-634268263":"Sign in to Deriv with your existing passkey.","-1700177761":"Create passkey","-1405679241":"Stored on: ","-567193224":"Rename","-1140319320":"Your account is now secured with a passkey.<0/>Manage your passkey through your<0/>Deriv account settings.","-592543249":"Add more passkeys","-331060101":"Passkey setup failed","-1036903080":"We’re experiencing a temporary issue in processing your request. Please try again later.","-713875531":"Enable bluetooth.","-1729774899":"Sign in to your Google or iCloud account.","-684009726":"Edit passkey","-1004529240":"Passkey name","-1728732301":"Effortless login with passkeys","-1708254107":"Enable Bluetooth.","-613368504":"Tips:","-1897886029":"Before using passkey:","-1893497054":"Only 3-30 characters allowed.","-80717068":"Apps you have linked to your <0>Deriv password:","-340060402":"Your Deriv X password is for logging in to your Deriv X accounts on the web and mobile apps.","-619126443":"Use the <0>Deriv password to log in to {{brand_website_name}} and {{platform_name_trader}}.","-623760979":"Use the <0>Deriv password to log in to {{brand_website_name}}, {{platform_name_trader}} and {{platform_name_go}}.","-459147994":"Use the <0>Deriv password to log in to {{brand_website_name}}, {{platform_name_go}}, {{platform_name_trader}}, {{platform_name_smarttrader}}, {{platform_name_dbot}} and {{platform_name_ctrader}}.","-1884902844":"Max. deposit limit per day","-545085253":"Max. deposit limit over 7 days","-1031006762":"Max. deposit limit over 30 days","-1116871438":"Max. total loss over 30 days","-2134714205":"Time limit per session","-1884271702":"Time out until","-1265825026":"Timeout time must be greater than current time.","-1332882202":"Timeout time cannot be more than 6 weeks.","-1635977118":"Exclude time cannot be less than 6 months.","-2131200819":"Disable","-200487676":"Enable","-1840392236":"That's not the right code. Please try again.","-2067796458":"Authentication code","-790444493":"Protect your account with 2FA. Each time you log in to your account, you will need to enter your password and an authentication code generated by a 2FA app on your smartphone.","-752939584":"How to set up 2FA for your Deriv account","-90649785":"Click here to copy key","-206376148":"Key copied!","-368010540":"You have enabled 2FA for your Deriv account.","-403552929":"To disable 2FA, please enter the six-digit authentication code generated by your 2FA app below:","-1043340733":"Proof of address documents upload failed","-890084320":"Save and submit","-30772747":"Your personal details have been saved successfully.","-2021135479":"This field is required.","-1002044401":"Select your document*","-1272489896":"Please complete this field.","-721346138":"The options and multipliers trading platform.","-1874136267":"The ultimate bot trading platform.","-415943890":"The legacy options trading platform.","-673722343":"The legacy bot trading platform.","-2018495421":"The mobile app for trading multipliers and accumulators.","-897826065":"The multipliers trading platform.","-2115275974":"CFDs","-1585707873":"Financial Commission","-199154602":"Vanuatu Financial Services Commission","-191165775":"Malta Financial Services Authority","-194969520":"Counterparty company","-1089385344":"Deriv (SVG) LLC","-2019617323":"Deriv (BVI) Ltd","-112814932":"Deriv (FX) Ltd","-1131400885":"Deriv Investments (Europe) Limited","-1471207907":"All assets","-781132577":"Leverage","-1591882610":"Synthetics","-543177967":"Stock indices","-362324454":"Commodities","-1959484303":"Cryptocurrencies","-1071336803":"Platform","-1879666853":"Deriv MT5","-820028470":"Options & Multipliers","-1210359945":"Transfer funds to your accounts","-1926387364":"We’ve sent your e-book to your email. You can also download it here.","-1057002564":"<0>We’re unable to upgrade you to Wallets at this time and are working to get this fixed as soon as we can. Please <1>try again<0>.","-1424352390":"<0>Wallets<1> — A smarter way to manage your funds","-1749409935":"Let's go","-145462920":"Deriv cTrader","-982095728":"Get","-1790089996":"NEW!","-1473281803":"Predict the market, profit if you’re right, risk only what you put in. <0>Learn more","-2134770229":"Total assets in your Deriv Apps and Deriv MT5 CFDs demo account.","-1277942366":"Total assets","-1255879419":"Trader's Hub","-493788773":"Non-EU","-673837884":"EU","-230566990":"The following documents you submitted did not pass our checks:","-846812148":"Proof of address.","-1146027991":"If you’d like to get the {{from_account}} account, resubmit these documents.","-710685402":"No new positions","-1445744852":"You can no longer open new positions with your {{from_account}} account. Please use your {{to_account}} account to open new positions.","-1699909965":"or ","-2127865736":"Your {{from_account}} account will be archived after 30 days of inactivity. You can still access your trade history until the account is archived.","-2055865877":"Non-EU regulation","-643108528":"Non-EU and EU regulation","-1815067117":"Start your trading journey","-1807332199":"Set up your real account","-1002556560":"We’re unable to complete with the Wallet upgrade. Please try again later or contact us via live chat.","-90090878":"Use Wallets to manage your funds across different currencies effortlessly.","-280236366":"Enable now","-1186807402":"Transfer","-744999940":"Deriv account","-766186087":"{{trustScore}} out of 5 based on {{numberOfReviews}} reviews","-1870909526":"Our server cannot retrieve an address.","-582721696":"The current allowed withdraw amount is {{format_min_withdraw_amount}} to {{format_max_withdraw_amount}} {{currency}}","-1975494965":"Cashier","-42592103":"Deposit cryptocurrencies","-60779216":"Withdrawals are temporarily unavailable due to system maintenance. You can make your withdrawals when the maintenance is complete.","-520142572":"Cashier is currently down for maintenance","-1552080215":"Please check back in a few minutes.<0>Thank you for your patience.","-215186732":"You’ve not set your country of residence. To access Cashier, please update your country of residence in the Personal details section in your account settings.","-1392897508":"The identification documents you submitted have expired. Please submit valid identity documents to unlock Cashier. ","-954082208":"Your cashier is currently locked. Please contact us via <0>live chat to find out how to unlock it.","-929148387":"Please set your account currency to enable deposits and withdrawals.","-2027907316":"You can make a withdrawal once the verification of your account is complete.","-541392118":"Your account has not been authenticated. Please submit your <0>proof of identity and <1>proof of address to authenticate your account and access your cashier.","-599998434":"You cannot make a fund transfer as your documents are still under review. We will notify you by email within 3 days once your verification is approved.","-247122507":"Your cashier is locked. Please complete the <0>financial assessment to unlock it.","-901712457":"Your access to Cashier has been temporarily disabled as you have not set your 30-day turnover limit. Please go to <0>Self-exclusion and set your 30-day turnover limit.","-166472881":"Your <0>personal details are incomplete. Please go to your account settings and complete your personal details to enable deposits and withdrawals.","-666905139":"Deposits are locked","-378858101":"Your <0>personal details are incomplete. Please go to your account settings and complete your personal details to enable deposits.","-1318742415":"Your account has not been authenticated. Please submit your <0>proof of identity and <1>proof of address to authenticate your account and request for withdrawals.","-1923809087":"Unfortunately, you can only make deposits. Please contact us via <0>live chat to enable withdrawals.","-172277021":"Cashier is locked for withdrawals","-1624999813":"It seems that you've no commissions to withdraw at the moment. You can make withdrawals once you receive your commissions.","-1077304626":"Amount ({{currency}})","-1559994981":"Approximate value","-1272778997":"We've sent you an email.","-89973258":"Resend email in {{seconds}}s","-1332236294":"Please verify your identity","-1675848843":"Error","-283017497":"Retry","-1294455996":"Deriv P2P unavailable","-532693866":"Something went wrong. Please refresh the page and try again.","-1196049878":"First line of home address","-1326406485":"Postal Code/ZIP","-939625805":"Telephone","-442575534":"Email verification failed","-1459042184":"Update your personal details","-1603543465":"We can't validate your personal details because there is some information missing.","-614516651":"Need help? <0>Contact us.","-720315013":"You have no funds in your {{currency}} account","-2052373215":"Please make a deposit to use this feature.","-203002433":"Deposit now","-379487596":"{{selected_percentage}}% of available balance ({{format_amount}} {{currency__display_code}})","-1957498244":"more","-1059419768":"Notes","-646217148":"We process your deposits internally within 24 hours (depending on internal checks and your payment method). If you don't see your funds reflected after this time, please contact us via <0>live chat with proof of your transaction, including the amount, date, and time.","-1901728198":"What do I do if I have reached my deposit limit?","-631829734":"<0>Insufficient balance: Please ensure you have sufficient funds in your card/e-wallet. If the problem persists, please contact your bank for help.","-1072505739":"<0>3D secure invalid/redirected: Please contact your bank for an OTP.","-180339757":"<0>Restricted card: Please use a locally issued card. ","-645281699":"<0>Customer cancelled payment: Please try again after 1 hour.","-102611677":"Can I use someone else's payment method?","-951380652":"No, you cannot use someone else's payment method to deposit into Deriv. If you use another person's payment method, your account will be suspended (if they are on Deriv, their account will also be suspended). If you suspect that someone has used your payment method, let us know through <0>live chat with your proof of ownership.","-819152742":"If you have used a different payment method to make your deposit, you cannot withdraw via a payment agent. However, if you have used both a payment agent and another payment method (for example, an e-wallet) to deposit, you have to withdraw via the e-wallet first up to your original deposited amount. After that, you can use a payment agent to make a withdrawal. If your original payment method is not available for withdrawals, please let us know through <0>live chat for assistance.","-820131811":"Can I withdraw using a different method?","-1656533423":"No, withdrawals must be made using the same method you used for your deposit.","-190084602":"Transaction","-1995606668":"Amount","-2024290965":"Confirmations","-811190405":"Time","-728508487":"{{currency}} recent transactions","-1984478597":"The details of this transaction is available on CoinsPaid.","-316545835":"Please ensure <0>all details are <0>correct before making your transfer.","-949073402":"I confirm that I have verified the client’s transfer information.","-1752211105":"Transfer now","-1787304306":"Deriv P2P","-174976899":"P2P verification","-1705887186":"Your deposit is successful.","-142361708":"In process","-1582681840":"We’ve received your request and are waiting for more blockchain confirmations.","-1626218538":"You’ve cancelled your withdrawal request.","-1062841150":"Your withdrawal is unsuccessful due to an error on the blockchain. Please <0>contact us via live chat for more info.","-630780094":"We’re awaiting confirmation from the blockchain.","-1525882769":"Your withdrawal is unsuccessful. We've sent you an email with more information.","-298601922":"Your withdrawal is successful.","-922143389":"Deriv P2P is currently unavailable in this currency.","-1310327711":"Deriv P2P is currently unavailable in your country.","-1463156905":"Learn more about payment methods","-685073712":"This is your <0>{{currency}} account {{loginid}}.","-1547606079":"We accept the following cryptocurrencies:","-1517325716":"Deposit via the following payment methods:","-639677539":"Buy cryptocurrencies","-1560098002":"Buy cryptocurrencies via fiat onramp","-541870313":"Deposit via payment agents","-197251450":"Don't want to trade in {{currency_code}}? You can open another cryptocurrency account.","-917092420":"To change your account currency, contact us via <0>live chat.","-515809216":"Send only {{currency_name}} ({{currency_code}}) to this address.","-748636591":"A minimum deposit value of <0>{{minimum_deposit}} {{currency}} is required. Otherwise, a fee is applied.","-1589407981":"To avoid loss of funds:","-1042704302":"Make sure to copy your Deriv account address correctly into your crypto wallet.","-2108344100":"Looking for a way to buy cryptocurrencies? <0>Try Fiat onramp.","-598073640":"About Tether (Ethereum)","-275902914":"Tether on Ethereum (eUSDT)","-1188009792":"Tether on Omni Layer (USDT)","-1239329687":"Tether was originally created to use the bitcoin network as its transport protocol ‒ specifically, the Omni Layer ‒ to allow transactions of tokenised traditional currency.","-314177745":"Unfortunately, we couldn't get the address since our server was down. Please click Refresh to reload the address or try again later.","-91824739":"Deposit {{currency}}","-523804269":"{{amount}} {{currency}} on {{date}}","-494847428":"Address: <0>{{value}}","-1117977576":"Confirmations: <0>{{value}}","-1935946851":"View more","-1744490898":"Unfortunately, we cannot retrieve the information at this time. ","-338505133":"We do not charge a transfer fee for transfers in the same currency between your Deriv fiat and {{platform_name_mt5}} accounts, between your Deriv fiat and {{platform_name_ctrader}} accounts, and between your Deriv fiat and {{platform_name_dxtrade}} accounts.","-2056016338":"You’ll not be charged a transfer fee for transfers in the same currency between your Deriv fiat and {{platform_name_mt5}} accounts.","-599632330":"We’ll charge a 1% transfer fee for transfers in different currencies between your Deriv fiat and {{platform_name_mt5}} accounts and between your Deriv fiat and {{platform_name_dxtrade}} accounts.","-1196994774":"We’ll charge a 2% transfer fee or {{minimum_fee}} {{currency}}, whichever is higher, for transfers between your Deriv cryptocurrency accounts.","-993556039":"We’ll charge a 2% transfer fee or {{minimum_fee}} {{currency}}, whichever is higher, for transfers between your Deriv cryptocurrency and Deriv MT5 accounts and between your Deriv cryptocurrency and {{platform_name_dxtrade}} accounts.","-1382702462":"We’ll charge a 2% transfer fee or {{minimum_fee}} {{currency}}, whichever is higher, for transfers between your Deriv cryptocurrency and Deriv MT5 accounts.","-1339063554":"You may transfer between your Deriv fiat, cryptocurrency, {{platform_name_mt5}}, {{platform_name_ctrader}}, and {{platform_name_dxtrade}} accounts.","-1151983985":"Transfer limits may vary depending on the exchange rates.","-1747571263":"Please bear in mind that some transfers may not be possible.","-757062699":"Transfers may be unavailable due to high volatility or technical issues and when the exchange markets are closed.","-855721928":"Needs verification","-908402700":"Verification failed","-1866405488":"Deriv cTrader accounts","-1344870129":"Deriv accounts","-1109729546":"You will be able to transfer funds between MT5 accounts and other accounts once your address is verified.","-1593609508":"Transfer between your accounts in Deriv","-1155970854":"You have reached the maximum daily transfers. Please try again tomorrow.","-464965808":"Transfer limits: <0 /> - <1 />","-553249337":"Transfers are locked","-1638172550":"To enable this feature you must complete the following:","-1949883551":"You only have one account","-1149845849":"Back to Trader's Hub","-1232852916":"We’re switching over to your {{currency}} account to view the transaction.","-1632668764":"I accept","-544232635":"Please go to the Deposit page to generate an address. Then come back here to continue with your transaction.","-1161069724":"Please copy the crypto address you see below. You'll need it to deposit your cryptocurrency.","-1388977563":"Copied!","-1962894999":"This address can only be used ONCE. Please copy a new one for your next transaction.","-451858550":"By clicking 'Continue' you will be redirected to {{ service }}, a third-party payment service provider. Please note that {{ website_name }} is not responsible for the content or services provided by {{ service }}. If you encounter any issues related to {{ service }} services, you must contact {{ service }} directly.","-2005265642":"Fiat onramp is a cashier service that allows you to convert fiat currencies to crypto to top up your Deriv crypto accounts. Listed here are third-party crypto exchanges. You’ll need to create an account with them to use their services.","-1593063457":"Select payment channel","-1309258714":"From account number","-1247676678":"To account number","-816476007":"Account holder name","-344403983":"Description","-922432739":"Please enter a valid client login ID.","-1024241603":"Insufficient balance.","-1979554765":"Please enter a valid description.","-1254233806":"You've transferred","-953082600":"Some payment methods may not be listed here but payment agents may still offer them. If you can’t find your favourite method, contact the payment agents directly to check further.","-1491457729":"All payment methods","-142563298":"Contact your preferred payment agent for payment instructions and make your deposit.","-352134412":"Transfer limit","-1023961762":"Commission on deposits","-552873274":"Commission on withdrawal","-880645086":"Withdrawal amount","-118683067":"Withdrawal limits: <0 />-<1 />","-1125090734":"Important notice to receive your funds","-1924707324":"View transaction","-1474202916":"Make a new withdrawal","-511423158":"Enter the payment agent account number","-2059278156":"Note: {{website_name}} does not charge any transfer fees.","-1201279468":"To withdraw your funds, please choose the same payment method you used to make your deposits.","-873886836":"Do not enter an address linked to an initial coin offering (ICO) purchase or crowdsale. If you do, the initial coin offering (ICO) tokens will not be credited into your account.","-130833284":"Please note that your maximum and minimum withdrawal limits aren’t fixed. They change due to the high volatility of cryptocurrency.","-2004264970":"Your wallet address should have 25 to 64 characters.","-1707299138":"Your {{currency_symbol}} wallet address","-1430080977":"Priority withdrawal","-1046088265":"Withdrawal amount:","-694919384":"Transaction fee","-1358465817":"Fee calculated at {{ time_stamp }}","-1744540779":"Amount received:","-38063175":"{{account_text}} wallet","-652125858":"Amount received","-705272444":"Upload a proof of identity to verify your identity","-1373954791":"Should be a valid number","-1278608332":"Please enter a number between 0 and {{api_max_losses}}.","-287597204":"Enter limits to stop your bot from trading when any of these conditions are met.","-1445989611":"Limits your potential losses for the day across all Deriv platforms.","-152878438":"Maximum number of trades your bot will execute for this run.","-1490942825":"Apply and run","-2067572496":"You’ve just stopped the bot. Any open contracts can be viewed on the Reports page.","-992003496":"Changes you make will not affect your running bot.","-1778025545":"You’ve successfully imported a bot.","-222838313":"Your session has expired. Please sign in again.","-1572746946":"Asian Up","-686840306":"Asian Down","-2141198770":"Higher","-816098265":"Lower","-1646655742":"Spread Up","-668987427":"Spread Down","-912577498":"Matches","-1862940531":"Differs","-808904691":"Odd","-556230215":"Ends Outside","-1268220904":"Ends Between","-703542574":"Up","-1127399675":"Down","-768425113":"No Touch","-1163058241":"Stays Between","-1354485738":"Reset Call","-376148198":"Only Ups","-1337379177":"High Tick","-328036042":"Please enter a stop loss amount that's higher than the current potential loss.","-2127699317":"Invalid stop loss. Stop loss cannot be more than stake.","-179005984":"Save","-610059687":"Exploring the D’Alembert strategy in Deriv Bot","-1226666341":"The D'Alembert strategy involves increasing your stake after a losing trade and reducing it after a successful trade by a predetermined number of units.","-312844882":"Initial stake: The amount that you are willing to place as a stake to enter a trade. This is the starting point for any changes in stake depending on the dynamic of the strategy being used.","-1173302981":"1. Start with the initial stake. In this example, we’ll use 1 USD.","-1540106116":"Profit and loss thresholds","-894905768":"With Deriv Bot, traders can set the profit and loss thresholds to secure potential profits and limit potential losses. This means that the trading bot will automatically stop when either the profit or loss thresholds are reached. It's a form of risk management that can potentially enhance returns. For example, if a trader sets the profit threshold at 100 USD and the strategy exceeds 100 USD of profit from all trades, then the bot will stop running.","-1946134465":"Where:","-248283982":"B is the loss threshold.","-1148521416":"f is the unit increment.","-211800490":"D’Alembert formula 2","-1772692202":"This formula helps you plan your trades by considering the amount of money you have and your comfort level with risk. It involves determining your loss threshold and the initial stake you want to trade with. Then, you use this formula to calculate the number of rounds you can trade. This process provides insight into stake sizing and expectations.","-2107238266":"The D'Alembert system offers more balanced trading through controlled stake progression. With prudent risk management like stake limits, it can be effectively automated in Deriv Bot. However, traders should thoroughly assess their risk appetite, test strategies on a demo account to align with their trading style before trading with real money. This allows optimising the approach and striking a balance between potential gains and losses whilst managing risk.","-500873566":"Disclaimer:","-344769349":"Please be aware that while we may use rounded figures for illustration, a stake of a specific amount does not guarantee an exact amount in successful trades. For example, a 1 USD stake does not necessarily equate to a 1 USD profit in successful trades.","-818800551":"Exploring the Martingale strategy in Deriv Bot","-533490374":"These are the trade parameters used in Deriv Bot with Martingale strategy.","-1507161059":"Multiplier: The multiplier used to increase your stake if you're losing a trade. The value must be greater than 1.","-1333404686":"An example of Martingale strategy","-1755877136":"3. If the first trade ends in a loss, Deriv Bot will automatically double your stake for the next trade to 2 USD. Deriv Bot will continue to double the stake after every losing trade.","-1297651002":"If you're about to start trading and haven't established a Maximum Stake as part of your risk management strategy, you can determine how long your funds will last by employing the Martingale strategy. Simply use this formula.","-46865201":"Martingale formula 1","-116397598":"m is the Martingale multiplier.","-658161609":"Number of rounds, R ≈ 9.965","-288082521":"This means that after 10 rounds of consecutive losses, this trader will lose 1023 USD which exceeds the loss threshold of 1000 USD, stopping the bot.","-770387160":"The Martingale strategy in trading may offer substantial gains but also comes with significant risks. With your selected strategy, Deriv Bot provides automated trading with risk management measures like setting initial stake, stake size, maximum stake, profit threshold and loss threshold. It's crucial for traders to assess their risk tolerance, practice in a demo account, and understand the strategy before trading with real money.","-1901073152":"These are the trade parameters used for Oscar’s Grind strategy in Deriv Bot.","-1575153036":"An example of Oscar’s Grind strategy","-732418614":"The table above demonstrates this principle by showing that when a successful trade occurs and meets the target of one unit of potential profit which is 1 USD in this example, the session ends. If trading continues, a new session will begin.","-106266344":"Principle 3: The stake adjusts to the gap size between current loss and the target profit for the session","-492908094":"In round 7, the stake is adjusted downwards from 2 USD to 1 USD, to meet the target profit of 1 USD.","-90079299":"With Deriv Bot, traders can set the profit and loss thresholds to secure potential profits and limit potential losses. This means that the trading bot will automatically stop when either the profit or loss threshold is reached. This is a form of risk management that can potentially boost successful trades whilst limiting the impact of loss. For example, if a trader sets the profit threshold at 100 USD and the strategy exceeds 100 USD of profit from all trades, then the bot will stop running.","-1549673884":"The Oscar's Grind strategy provides a disciplined approach for incremental gains through systematic stake progression. When integrated into Deriv Bot with proper risk management like profit or loss thresholds, it offers traders a potentially powerful automated trading technique. However, traders should first thoroughly assess their risk tolerance and first try trading on a demo account in order to familiarise with the strategy before trading with real funds.","-655650222":"Exploring the Reverse D’Alembert strategy in Deriv Bot","-1864807973":"The Reverse D'Alembert strategy involves increasing your stake after a successful trade and reducing it after a losing trade by a predetermined number of units.","-809681645":"These are the trade parameters used in Deriv Bot with Reverse D’Alembert strategy.","-1239374257":"An example of Reverse D’Alembert strategy","-309821442":"Please be aware that while we may use rounded figures for illustration, a stake of a specific amount does not guarantee an exact amount in successful trades. For example, a 1 USD stake does not necessarily equate to a 1 USD profit in successful trades.","-1576691912":"This article explores the Reverse Martingale strategy integrated into Deriv Bot, a versatile trading bot designed to trade assets such as forex, commodities, and derived indices. We will delve into the strategy's core parameters, its application, and provide essential takeaways for traders looking to use the bot effectively.","-1934849823":"These are the trade parameters used in Deriv Bot with Reverse Martingale strategy.","-1021919630":"Multiplier: The multiplier used to increase your stake if your trade is successful. The value must be greater than 1.","-760516362":"3. If the first trade is a successful trade, Deriv Bot will automatically double your stake for the next trade to 2 USD. Deriv Bot will continue to double the stake after every successful trade.","-1410950365":"Exploring the 1-3-2-6 strategy in Deriv Bot","-1175255072":"These are the trade parameters used in Deriv Bot with 1-3-2-6 strategy.","-183884527":"An example of 1-3-2-6 strategy","-275617819":"4. However, if any trade results in a loss, your stake will reset back to the initial stake of 1 USD for the next trade. The third trade results in a loss hence the stake resets to the initial stake of 1 USD for the next trade.","-719846465":"5. Upon reaching the initial stake, if the next trade still results in a loss, your stake will remain at the initial stake of 1 USD. This strategy will minimally trade at the initial stake. Refer to the fourth and fifth trade.","-1452746011":"The 1-3-2-6 strategy in trading may offer substantial gains but also comes with significant risks. Each stake is independent, and the strategy does not increase your chances of successful trades in the long run. If you encounter a series of losses, the strategy can lead to significant losses. Therefore, it is crucial for traders to assess their risk tolerance, practice in a demo account, utilise profit and loss thresholds, and fully comprehend the strategy before engaging in real-money trading.","-1016171176":"Asset","-138833194":"The underlying market your bot will trade with this strategy.","-621128676":"Trade type","-399349239":"Your bot will use this trade type for every run","-410856998":"The bot will stop trading if your total profit exceeds this amount.","-447853970":"Loss threshold","-33106112":"The size used to multiply the stake after a successful trade for the next trade.","-1503301801":"The value must be equal or greater than {{ min }}","-1596504046":"Number of unit(s) to be added to the next trade after a successful trade. One unit is equivalent to the amount of initial stake.","-1521098535":"Max stake","-1448426542":"The stake for your next trade will reset to the initial stake if it exceeds this value.","-993953307":"Your prediction of the last digit of the asset price.","-1305281529":"D’Alembert","-1842451303":"Welcome to Deriv Bot!","-1391310674":"Check out these guides and FAQs to learn more about building your bot:","-2066779239":"FAQs","-280324365":"What is Deriv Bot?","-349714537":"Contract Duration","-65214475":"Name of your bot","-155173714":"Let’s build a bot!","-2093569327":"How to build a basic trading bot with Deriv Bot","-2072114761":"How to use Martingale strategy on Deriv Bot","-1919212468":"3. You can also search for the blocks you want using the search bar above the categories.","-1800386057":"For more info, check out this blog post on the basics of building a trading bot.","-980360663":"3. Choose the block you want and drag it to the workspace.","-1493168314":"What is a quick strategy?","-1680391945":"Using a quick strategy","-1177914473":"How do I save my strategy?","-271986909":"In Bot Builder, hit Save on the toolbar at the top to download your bot. Give your bot a name, and choose to download your bot to your device or Google Drive. Your bot will be downloaded as an XML file.","-1149045595":"1. After hitting Import, select Local and click Continue.","-288041546":"2. Select your XML file and hit Open.","-2127548288":"3. Your bot will be loaded accordingly.","-1311297611":"1. After hitting Import, select Google Drive and click Continue.","-1549564044":"How do I reset the workspace?","-1127331928":"In Bot Builder, hit Reset on the toolbar at the top. This will clear the workspace. Please note that any unsaved changes will be lost.","-1720444288":"How do I control my losses with Deriv Bot?","-1142295124":"There are several ways to control your losses with Deriv Bot. Here’s a simple example of how you can implement loss control in your strategy:","-2129119462":"1. Create the following variables and place them under Run once at start:","-1918487001":"Example:","-468926787":"This is how your trade parameters, variables, and trade options should look like:","-1565344891":"Can I run Deriv Bot on multiple tabs in my web browser?","-213872712":"No, we don't offer cryptocurrencies on Deriv Bot.","-2147346223":"In which countries is Deriv Bot available?","-792737139":"We offer our services in all countries, except for the ones mentioned in our terms and conditions.","-352345777":"What are the most popular strategies for automated trading?","-552392096":"Three of the most commonly used strategies in automated trading are Martingale, D'Alembert, and Oscar's Grind — you can find them all ready-made and waiting for you in Deriv Bot.","-1630262763":"About Martingale","-413928457":"About Oscar's Grind","-1497015866":"About Reverse D’Alembert","-437005403":"About 1-3-2-6","-590765322":"Unfortunately, this trading platform is not available for EU Deriv account. Please switch to a non-EU account to continue trading.","-2110207996":"Deriv Bot is unavailable for this account","-971295844":"Switch to another account","-746652890":"Notifications","-824109891":"System","-507620484":"Unsaved","-764102808":"Google Drive","-749186458":"Account switching is disabled while your bot is running. Please stop your bot before switching accounts.","-597939268":"Keep my contract","-1322453991":"You need to log in to run the bot.","-236548954":"Contract Update Error","-878374481":"Contract purchased ({{contract_id}})","-1481097018":"Bots loaded successfully","-1185116263":"Bot deleted successfully","-1206512736":"Bot started successfully","-1590239895":"Bot stopped successfully","-1428017300":"THE","-1450728048":"OF","-255051108":"YOU","-1845434627":"IS","-931434605":"THIS","-740712821":"A","-1223145005":"Loss amount: {{profit}}","-1206212388":"Welcome back! Your messages have been restored. You are using your {{current_currency}} account.","-1724342053":"You are using your {{current_currency}} account.","-187634388":"This block is mandatory. Here is where you can decide if your bot should continue trading. Only one copy of this block is allowed.","-2105473795":"The only input parameter determines how block output is going to be formatted. In case if the input parameter is \"string\" then the account currency will be added.","-1800436138":"2. for \"number\": 1325.68","-530632460":"This block is used to determine if the market price moves in the selected direction or not. It gives you a value of \"True\" or \"False\".","-1875717842":"Examples:","-890079872":"1. If the selected direction is \"Rise\", and the previous tick value is less than the current tick value, the output will be \"True\". Otherwise, the output will be an empty string.","-489739641":"2. If the selected direction is \"Fall\", and the previous tick value is more than the current tick value, the output will be \"True\". Otherwise, the output will be an empty string.","-2116076360":"There are 4 message types:","-1421941045":"2. 'Warn' displays a message in yellow to highlight something that needs attention.","-277850921":"If \"Win\" is selected, it will return \"True\" if your last trade was successful. Otherwise, it will return an empty string.","-2139916657":"1. In the below example the loop is terminated in case \"x\" is \"False\" even though only one iteration is complete","-1238900333":"2. In the below example the loop jumps to the next iteration without executing below block in case if \"x\" is \"False\"","-1729479576":"You can use \"i\" inside the loop, for example to access list items","-1474636594":"In this example, the loop will repeat three times, as that is the number of items in the given list. During each iteration, the variable \"i\" will be assigned a value from the list. ","-908772734":"This block evaluates a statement and will perform an action only when the statement is true.","-334040831":"2. In this example, the instructions are repeated as long as the value of x is greater than or equal to 10. Once the value of x drops below 10, the loop is terminated.","-444267958":"\"Seconds Since Epoch\" block returns the number of seconds since January 1st, 1970.","-447522129":"You might need it when you want to repeat an actions after certain amount of time.","-1488259879":"The term \"candle\" refers to each bar on the candlestick chart. Each candle represents four market prices for the selected time interval:","-2020693608":"Each candlestick on the chart represents 4 market prices for the selected time interval:","-62728852":"- Open price: the opening price","-1247744334":"- Low price: the lowest price","-1386365697":"- Close price: the closing price","-1498732382":"A black (or red) candle indicates that the open price is higher than the close price. This represents a downward movement of the market price.","-1871864755":"This block gives you the last digit of the latest tick value of the selected market. If the latest tick value is 1410.90, this block will return 0. It’s useful for digit-based contracts such as Even/Odd, Matches/Differs, or Higher/Lower.","-1029671512":"In case if the \"OR\" operation is selected, the block returns \"True\" in case if one or both given values are \"True\"","-210295176":"Available operations:","-1385862125":"- Addition","-983721613":"- Subtraction","-854750243":"- Multiplication","-1394815185":"In case if the given number is less than the lower boundary of the range, the block returns the lower boundary value. Similarly, if the given number is greater than the higher boundary, the block will return the higher boundary value. In case if the given value is between boundaries, the block will return the given value unchanged.","-1034564248":"In the below example the block returns the value of 10 as the given value (5) is less than the lower boundary (10)","-2009817572":"This block performs the following operations to a given number","-671300479":"Available operations are:","-514610724":"- Absolute","-1923861818":"- Euler’s number (2.71) to the power of a given number","-1556344549":"Here’s how:","-1061127827":"- Visit the following URL, make sure to replace with the Telegram API token you created in Step 1: https://api.telegram.org/bot/getUpdates","-311389920":"In this example, the open prices from a list of candles are assigned to a variable called \"cl\".","-1460794449":"This block gives you a list of candles within a selected time interval.","-1634242212":"Used within a function block, this block returns a value when a specific condition is true.","-2012970860":"This block gives you information about your last contract.","-1504783522":"You can choose to see one of the following:","-10612039":"- Profit: the profit you’ve earned","-555996976":"- Entry time: the starting time of the contract","-1391071125":"- Exit time: the contract expiration time","-1961642424":"- Exit value: the value of the last tick of the contract","-111312913":"- Barrier: the barrier value of the contract (applicable to barrier-based trade types such as stays in/out, touch/no touch, etc.)","-674283099":"- Result: the result of the last contract: \"win\" or \"loss\"","-704543890":"This block gives you the selected candle value such as open price, close price, high price, low price, and open time. It requires a candle as an input parameter.","-482281200":"In the example below, the open price is assigned to the variable \"op\".","-364621012":"This block gives you the specified candle value for a selected time interval. You can choose which value you want:","-232477769":"- Open: the opening price","-610736310":"Use this block to sell your contract at the market price. Selling your contract is optional. You may choose to sell if the market trend is unfavourable.","-1307657508":"This block gives you the potential profit or loss if you decide to sell your contract. It can only be used within the \"Sell conditions\" root block.","-1921072225":"In the example below, the contract will only be sold if the potential profit or loss is more than the stake.","-955397705":"SMA adds the market price in a list of ticks or candles for a number of time periods, and divides the sum by that number of time periods.","-1424923010":"where n is the number of periods.","-1835384051":"What SMA tells you","-749487251":"SMA serves as an indicator of the trend. If the SMA points up then the market price is increasing and vice versa. The larger the period number, the smoother SMA line is.","-1996062088":"In this example, each point of the SMA line is an arithmetic average of close prices for the last 10 days.","-1866751721":"Input list accepts a list of ticks or candles, while period is the specified time period.","-1097076512":"You may compare SMA values calculated on every bot run to identify the market trend direction. Alternatively, you may also use a variation of the SMA block, the Simple Moving Average Array block. ","-1254849504":"If a period of 10 is entered, the Simple Moving Average Array block will return a list of SMA values calculated based on period of 10.","-1190046167":"This block displays a dialog box with a customised message. When the dialog box is displayed, your strategy is paused and will only resume after you click \"OK\".","-859028989":"In this example, the date and time will be displayed in a green notification box.","-1452086215":"In this example, a Rise contract will be purchased at midnight on 1 August 2019.","-2078588404":"Select your desired market and asset type. For example, Forex > Major pairs > AUD/JPY","-2037446013":"2. Trade Type","-533927844":"Select your desired trade type. For example, Up/Down > Rise/Fall","-1192411640":"4. Default Candle Interval","-485434772":"8. Trade Options","-1827646586":"This block assigns a given value to a variable, creating the variable if it doesn't already exist.","-254421190":"List: ({{message_length}})","-555886064":"Won","-529060972":"Lost","-1062922595":"Reference ID (buy)","-2068574600":"Reference ID (sell)","-994038153":"Start Time","-1979852400":"Entry Spot","-427802309":"Profit/Loss","-224804428":"Transactions","-287223248":"No transaction or activity yet.","-418247251":"Download your journal.","-2123571162":"Download","-1616649196":"results","-90107030":"No results found","-984140537":"Add","-870004399":"<0>Bought: {{longcode}} (ID: {{transaction_id}})","-1211474415":"Filters","-186972150":"There are no messages to display","-558594655":"The bot is not running","-478946875":"The stats are cleared","-999254545":"All messages are filtered out","-934909826":"Load strategy","-2005347537":"Importing XML files from Binary Bot and other third-party platforms may take longer.","-1121028020":"or, if you prefer...","-254025477":"Select an XML file from your device","-1131095838":"Please upload an XML file","-523928088":"Create one or upload one from your local drive or Google Drive.","-1684205190":"Why can't I see my recent bots?","-2050879370":"1. Logged in from a different device","-811857220":"3. Cleared your browser cache","-625024929":"Leaving already?","-584289785":"No, I'll stay","-1435060006":"If you leave, your current contract will be completed, but your bot will stop running immediately.","-783058284":"Total stake","-2077494994":"Total payout","-1073955629":"No. of runs","-1729519074":"Contracts lost","-42436171":"Total profit/loss","-1856204727":"Reset","-1137823888":"Total payout since you last cleared your stats.","-992662695":"The number of times your bot has run since you last cleared your stats. Each run includes the execution of all the root blocks.","-1382491190":"Your total profit/loss since you last cleared your stats. It is the difference between your total payout and your total stake.","-24780060":"When you’re ready to trade, hit ","-2147110353":". You’ll be able to track your bot’s performance here.","-1442034178":"Contract bought","-2020280751":"Bot is stopping","-1436403979":"Contract closed","-411060180":"TradingView Chart","-627895223":"Exit spot","-2140412463":"Buy price","-1299484872":"Account","-2004386410":"Win","-266502731":"Transactions detailed summary","-1711732508":"Reference IDs","-386141434":"(Buy)","-482272687":"(Sell)","-1983189496":"ticks","-694277729":"(High)","-2028564707":"(Low)","-596238067":"Entry/Exit spot","-1823621139":"Quick Strategy","-1782602933":"Choose a template below and set your trade parameters.","-315611205":"Strategy","-1524489375":"(optional)","-150224710":"Yes, continue","-475765963":"Edit the amount","-1349897832":"Do not show this message again.","-984512425":"Minimum duration: {{ value }}","-2084091453":"The value must be equal or greater than {{ value }}","-657364297":"The value must be equal or less than {{ value }}","-1696412885":"Import","-320197558":"Sort blocks","-939764287":"Charts","-1566369363":"Zoom out","-1285759343":"Search","-1291088318":"Purchase conditions","-112876186":"Analysis","-1769584466":"Stats","-1133736197":"Utility","-1682372359":"Text","-907562847":"Lists","-1646497683":"Loops","-251326965":"Miscellaneous","-1692205739":"Import a bot from your computer or Google Drive, build it from scratch, or start with a quick strategy.","-1150390589":"Last modified","-1393876942":"Your bots:","-1545070554":"Delete bot","-1972599670":"Your bot will be permanently deleted when you hit ","-1692956623":"Yes, delete.","-573479616":"Are you sure you want to delete it?","-786915692":"You are connected to Google Drive","-1256971627":"To import your bot from your Google Drive, you'll need to sign in to your Google account.","-1233084347":"To know how Google Drive handles your data, please review Deriv’s <0>Privacy policy.","-1150107517":"Connect","-767342552":"Enter your bot name, choose to save on your computer or Google Drive, and hit ","-1372891985":"Save.","-1003476709":"Save as collection","-636521735":"Save strategy","-1953880747":"Stop my bot","-1899230001":"Stopping the current bot will load the Quick Strategy you just created to the workspace.","-2131847097":"Any open contracts can be viewed on the ","-563774117":"Dashboard","-463767874":"Server Bot <0>Beta+ Create bot","-1743829671":"You are not logged in","-3815578":"Sign Up","-1019831575":"Please log in or sign up to start trading with us.","-725108378":"<0>Bought: ","-49903092":"Win amount: ","-57218728":"Info: ","-285880236":"There are no messages to display.","-526601997":"Running","-233426953":"Profit","-128899191":"You’ll be able to track your server bot’s performance here.","-683790172":"Now, <0>run the bot to test out the strategy.","-1127164953":"Hi! Hit <0>Start for a quick tour.","-358288026":"Note: You can also find this tutorial in the <0>Tutorials tab.","-129587613":"Got it, thanks!","-1793577405":"Build from scratch","-358753028":"Create your bot using our drag-and-drop blocks or click Quick Strategy to choose from the ready-to-use bot templates.","-1212601535":"Monitor the market","-21136101":"See how your bot is doing in real-time.","-631097919":"Click <0>Run when you want to start trading, and click <0>Stop when you want to stop.","-1999747212":"Want to retake the tour?","-782992165":"Step 1 :","-1207872534":"First, set the <0>Trade parameters block.","-1656388044":"First, set <0>Market to Derived > Continuous Indices > Volatility 100 (1s) Index.","-1706298865":"Then, set <0>Trade type to Up/Down > Rise/Fall.","-1834358537":"For <0>Default candle interval, set it to 1 minute","-1940971254":"For <0>Trade options, set it as below:","-512839354":"<0>Stake: USD 10 (min: 0.35 - max: 50000)","-753745278":"Step 2 :","-1056713679":"Then, set the <0>Purchase conditions block.","-245497823":"<0>2. Purchase conditions:","-916770284":"<0>Purchase: Rise","-758077259":"Step 3 :","-677396944":"Step 4 :","-295975118":"Next, go to <0>Utility tab under the Blocks menu. Tap the drop-down arrow and hit <0>Loops.","-698493945":"Step 5 :","-1992994687":"Now, tap the <0>Analysis drop-down arrow and hit <0>Contract.","-1844492873":"Go to the <0>Last trade result block and click + icon to add the <0>Result is Win block to the workspace.","-1547091772":"Then, drag the <0>Result is win into the empty slot next to <0>repeat until block.","-736400802":"Step 6 :","-732067680":"Finally, drag and add the whole <0>Repeat block to the <0>Restart trading conditions block.","-1411787252":"Step 1","-1109392787":"Learn how to build your bot from scratch using a simple strategy.","-1263822623":"You can import a bot from your mobile device or from Google drive, see a preview in the bot builder, and start trading by running the bot.","-563921656":"Bot Builder guide","-1596172043":"Quick strategy guides","-1765276625":"Click the multiplier drop-down menu and choose the multiplier value you want to trade with.","-1872233077":"Your potential profit will be multiplied by the multiplier value you’ve chosen.","-614454953":"To learn more about multipliers, please go to the <0>Multipliers page.","-662836330":"Would you like to keep your current contract or close it? If you decide to keep it running, you can check and close it later on the <0>Reports page.","-1717650468":"Online","-1309011360":"Open positions","-1597214874":"Trade table","-1929724703":"Compare CFD accounts","-883103549":"Account deactivated","-45873457":"NEW","-1837059346":"Buy / Sell","-1845037007":"Advertiser's page","-494667560":"Orders","-679691613":"My ads","-821418875":"Trader","-679102561":"Contract Details","-430118939":"Complaints policy","-377375279":"Standard","-1582979384":"Standard Demo","-1212531781":"Standard BVI","-328128497":"Financial","-533935232":"Financial BVI","-565431857":"Financial Labuan","-291535132":"Swap-Free Demo","-499019612":"Zero Spread Demo","-1472945832":"Swap-Free SVG","-144803045":"Only numbers and these special characters are allowed: {{permitted_characters}}","-1450516268":"Only letters, numbers, space, hyphen, period, and apostrophe are allowed.","-1966032552":"The length of token should be 8.","-2128137611":"Should start with letter or number, and may contain hyphen and underscore.","-1590869353":"Up to {{decimal_count}} decimal places are allowed.","-2061307421":"Should be more than {{min_value}}","-1099941162":"Should be less than {{max_value}}","-1528188268":"Straight rows of keys are easy to guess","-1339903234":"Short keyboard patterns are easy to guess","-23980798":"Repeats like \"aaa\" are easy to guess","-235760680":"Avoid repeated words and characters","-1568933154":"Sequences like abc or 6543 are easy to guess","-725663701":"Avoid sequences","-1450768475":"Recent years are easy to guess","-1804838610":"Avoid years that are associated with you","-64849469":"Dates are often easy to guess","-2006915194":"Avoid dates and years that are associated with you","-2124205211":"A word by itself is easy to guess","-1095202689":"All-uppercase is almost as easy to guess as all-lowercase","-2137856661":"Reversed words aren't much harder to guess","-1885413063":"Predictable substitutions like '@' instead of 'a' don't help very much","-369258265":"This password is on the blacklist","-577777971":"You have reached the rate limit of requests per second. Please try later.","-206321775":"Fiat","-522767852":"DEMO","-433761292":"Switching to default account.","-405439829":"Sorry, you can't view this contract because it doesn't belong to this account.","-1590712279":"Gaming","-16448469":"Virtual","-2093768906":"{{name}} has released your funds.
    Would you like to give your feedback?","-705744796":"Your demo account balance has reached the maximum limit, and you will not be able to place new trades. Reset your balance to continue trading from your demo account.","-2063700253":"disabled","-1585069798":"Please click the following link to complete your Appropriateness Test.","-367759751":"Your account has not been verified","-596690079":"Enjoy using Deriv?","-265932467":"We’d love to hear your thoughts","-1815573792":"Drop your review on Trustpilot.","-823349637":"Go to Trustpilot","-1204063440":"Set my account currency","-1601813176":"Would you like to increase your daily limits to {{max_daily_buy}} {{currency}} (buy) and {{max_daily_sell}} {{currency}} (sell)?","-1751632759":"Get a faster mobile trading experience with the <0>{{platform_name_go}} app!","-1164554246":"You submitted expired identification documents","-498364310":"Enable passkey","-187109231":"Level up your security","-1132350982":"Strengthen your account’s security today with the latest passkeys feature.","-219846634":"Let’s verify your ID","-529038107":"Install","-1738575826":"Please switch to your real account or create one to access the cashier.","-1329329028":"You’ve not set your 30-day turnover limit","-132893998":"Your access to the cashier has been temporarily disabled as you have not set your 30-day turnover limit. Please go to Self-exclusion and set the limit.","-1852207910":"MT5 withdrawal disabled","-764323310":"MT5 withdrawals have been disabled on your account. Please check your email for more details.","-1744163489":"Please verify your proof of income","-382676325":"To continue trading with us, please submit your proof of income.","-1902997828":"Refresh now","-753791937":"A new version of Deriv is available","-1775108444":"This page will automatically refresh in 5 minutes to load the latest version.","-1175685940":"Please contact us via live chat to enable withdrawals.","-493564794":"Please complete your financial assessment.","-1125797291":"Password updated.","-157145612":"Please log in with your updated password.","-1728185398":"Resubmit proof of address","-612396514":"Please resubmit your proof of address.","-1519764694":"Your proof of address is verified.","-1629185222":"Submit now","-1961967032":"Resubmit proof of identity","-117048458":"Please submit your proof of identity.","-1196422502":"Your proof of identity is verified.","-1392958585":"Please check your email.","-136292383":"Your proof of address verification is pending","-386909054":"Your proof of address verification has failed","-430041639":"Your proof of address did not pass our verification checks, and we’ve placed some restrictions on your account. Please resubmit your proof of address.","-87177461":"Please go to your account settings and complete your personal details to enable deposits.","-904632610":"Reset your balance","-470018967":"Reset balance","-156611181":"Please complete the financial assessment in your account settings to unlock it.","-1925176811":"Unable to process withdrawals in the moment","-980696193":"Withdrawals are temporarily unavailable due to system maintenance. You can make withdrawals when the maintenance is complete.","-1647226944":"Unable to process deposit in the moment","-488032975":"Deposits are temporarily unavailable due to system maintenance. You can make deposits when the maintenance is complete.","-2136953532":"Scheduled cashier maintenance","-849587074":"You have not provided your tax identification number","-47462430":"This information is necessary for legal and regulatory requirements. Please go to your account settings, and fill in your latest tax identification number.","-2067423661":"Stronger security for your Deriv account","-1719731099":"With two-factor authentication, you’ll protect your account with both your password and your phone - so only you can access your account, even if someone knows your password.","-949074612":"Please contact us via live chat.","-2087822170":"You are offline","-1669693571":"Check your connection.","-1706642239":"<0>Proof of ownership <1>required","-553262593":"<0><1>Your account is currently locked <2><3>Please upload your proof of <4>ownership to unlock your account. <5>","-1834929362":"Upload my document","-1043638404":"<0>Proof of ownership <1>verification failed","-1766760306":"<0><1>Please upload your document <2>with the correct details. <3>","-8892474":"Start assessment","-1330929685":"Please submit your proof of identity and proof of address to verify your account and continue trading.","-99461057":"Please submit your proof of address to verify your account and continue trading.","-577279362":"Please submit your proof of identity to verify your account and continue trading.","-197134911":"Your proof of identity is expired","-152823394":"Your proof of identity has expired. Please submit a new proof of identity to verify your account and continue trading.","-822813736":"We're unable to complete with the Wallet upgrade. Please try again later or contact us via live chat.","-978414767":"We require additional information for your Deriv MT5 account(s). Please take a moment to update your information now.","-482715448":"Go to Personal details","-2072411961":"Your proof of address has been verified","-384887227":"Update the address in your profile.","-1470677931":"CFDs on financial instruments.","-1595662064":"Zero spread CFDs on financial and derived instruments","-1998049070":"If you agree to our use of cookies, click on Accept. For more information, <0>see our policy.","-402093392":"Add Deriv Account","-1721181859":"You’ll need a {{deriv_account}} account","-1989074395":"Please add a {{deriv_account}} account first before adding a {{dmt5_account}} account. Deposits and withdrawals for your {{dmt5_label}} account are done by transferring funds to and from your {{deriv_label}} account.","-689237734":"Proceed","-1642457320":"Help centre","-1966944392":"Network status: {{status}}","-181484419":"Responsible trading","-650505513":"Full screen","-1823504435":"View notifications","-1954045170":"No currency assigned","-1591792668":"Account Limits","-34495732":"Regulatory information","-1323441180":"I hereby confirm that my request for opening an account with Deriv to trade OTC products issued and offered exclusively outside Brazil was initiated by me. I fully understand that Deriv is not regulated by CVM and by approaching Deriv I intend to set up a relation with a foreign company.","-1396326507":"Unfortunately, {{website_name}} is not available in your country.","-288996254":"Unavailable","-1308346982":"Derived","-1019903756":"Synthetic","-735306327":"Manage accounts","-1813972756":"Account creation paused for 24 hours","-366030582":"Sorry, you're unable to create an account at this time. As you declined our previous risk warnings, we need you to wait for 24 hours after your first account creation attempt before you can proceed.<0/><0/>","-534047566":"Thank you for your understanding. You can create your account on {{real_account_unblock_date}} or later.","-399816343":"Trading Experience Assessment<0/>","-1822498621":"As per our regulatory obligations, we are required to assess your trading knowledge and experience.<0/><0/>Please click ‘OK’ to continue","-71049153":"Keep your account secure with a password","-1965920446":"Start trading","-1485242688":"Step {{step}}: {{step_title}} ({{step}} of {{steps}})","-1829842622":"You can open an account for each cryptocurrency.","-987221110":"Choose a currency you would like to trade with.","-1066574182":"Choose a currency","-1146960797":"Fiat currencies","-1914534236":"Choose your currency","-200560194":"Please switch to your {{fiat_currency}} account to change currencies.","-1829493739":"Choose the currency you would like to trade with.","-1814647553":"Add a new","-1269362917":"Add new","-650480777":"crypto account","-175638343":"Choose an account or add a new one","-1768223277":"Your account is ready","-1215717784":"<0>You have successfully changed your currency to {{currency}}.<0>Make a deposit now to start trading.","-1775006840":"Make a deposit now to start trading.","-983734304":"We need proof of your identity and address before you can start trading.","-917733293":"To get trading, please confirm where you live.","-1282628163":"You'll be able to get trading as soon as verification is complete.","-952649119":"Log In","-1456176427":"Set a currency for your real account","-1329687645":"Create a cryptocurrency account","-1429178373":"Create a new account","-1740162250":"Manage account","-1016775979":"Choose an account","-1362081438":"Adding more real accounts has been restricted for your country.","-1602122812":"24-hour Cool Down Warning","-1519791480":"CFDs and other financial instruments come with a high risk of losing money rapidly due to leverage. You should consider whether you understand how CFDs and other financial instruments work and whether you can afford to take the risk of losing your money. <0/><0/>\n As you have declined our previous warning, you would need to wait 24 hours before you can proceed further.","-1010875436":"CFDs and other financial instruments come with a high risk of losing money rapidly due to leverage. You should consider whether you understand how CFDs and other financial instruments work and whether you can afford to take the high risk of losing your money. <0/><0/> To continue, kindly note that you would need to wait 24 hours before you can proceed further.","-1725418054":"By clicking ‘Accept’ and proceeding with the account opening, you should note that you may be exposing yourself to risks. These risks, which may be significant, include the risk of losing the entire sum invested, and you may not have the knowledge and experience to properly assess or mitigate them.","-730377053":"You can’t add another real account","-2100785339":"Invalid inputs","-2061807537":"Something’s not right","-272953725":"Your details match an existing account. If you need help, contact us via <0>live chat.","-1534648620":"Your password has been changed","-596199727":"We will now redirect you to the login page.","-437918412":"No currency assigned to your account","-1193651304":"Country of residence","-707550055":"We need this to make sure our service complies with laws and regulations in your country.","-280139767":"Set residence","-601615681":"Select theme","-1152511291":"Dark","-1428458509":"Light","-1976089791":"Your Deriv account has been unlinked from your {{social_identity_provider}} account. You can now log in to Deriv using your new email address and password.","-505449293":"Enter a new password for your Deriv account.","-243732824":"Take me to Demo account","-1269078299":"I will setup my real account later.","-1342699195":"Total profit/loss:","-1941013000":"This complaints policy, which may change from time to time, applies to your account(s) registered with {{legal_entity_name_svg}}, {{legal_entity_name_fx}}, and {{legal_entity_name_v}}.","-594812204":"This complaints policy, which may change from time to time, applies to your account(s) registered with {{legal_entity_name_svg}}.","-813256361":"We are committed to treating our clients fairly and providing them with excellent service.<0/><1/>We would love to hear from you on how we can improve our services to you. Any information you provide will be treated in the strictest confidence. Rest assured that you will be heard, valued, and always treated fairly.","-1622847732":"If you have an inquiry regarding your trading account with {{legal_entity_name}}, you can contact us through our <0>Help centre or by chatting with a representative via <1>Live Chat.<2/><3/>We are committed to resolving your query in the quickest time possible and appreciate your patience in allowing us time to resolve the matter.<4/><5/>We strive to provide the best possible service and support to our customers. However, in the event that we are unable to resolve your query or if you feel that our response is unsatisfactory, we want to hear from you. We welcome and encourage you to submit an official complaint to us so that we can review your concerns and work towards a resolution.","-1406192787":"If you are not satisfied with the outcome, you can escalate your complaint to the <0>Financial Commission.","-2115348800":"1. Introduction","-744009523":"2. Fair treatment","-866831420":"3.1. Submission of a complaint","-1102904026":"3.2. Handling your complaint","-603378979":"3.3. Resolving your complaint","-697569974":"3.4. Your decision","-1280998762":"4. Complaints","-1886635232":"A complaint is any expression of dissatisfaction by a client regarding our products or services that requires a formal response.<0/><1/>If what you submit does not fall within the scope of a complaint, we may reclassify it as a query and forward it to the relevant department for handling. However, if you believe that your query should be classified as a complaint due to its relevance to the investment services provided by {{legal_entity_name}}, you may request that we reclassify it accordingly.","-1771496016":"To submit a complaint, please send an email to <0>complaints@deriv.com, providing as much detail as possible. To help us investigate and resolve your complaint more efficiently, please include the following information:","-1197243525":"<0>•A clear and detailed description of your complaint, including any relevant dates, times, and transactions","-1795134892":"<0>•Any relevant screenshots or supporting documentation that will assist us in understanding the issue","-2053887036":"4.4. Handling your complaint","-717170429":"Once we have received the details of your complaint, we shall review it carefully and keep you updated on the handling process. We might request further information or clarifications to facilitate the resolution of the complaint.","-1841922393":"4.5. Resolving your complaint","-1327119795":"4.6. Your decision","-2019654103":"If we are unable to resolve your complaint or you are not satisfied with the outcome, you can escalate your complaint to the Office of the Arbiter for Financial Services.<0/><1/><2>Filing complaints with the Office of the Arbiter for Financial Services","-687172857":"<0>•You may file a complaint with the Arbiter for Financial Services only if you are not satisfied with our decision or the decision wasn’t made within 15 business days.","-262934706":"<0>•If the complaint is accepted by the Arbiter, you will receive another email with further details relating to the payment of the €25 complaint fee and the processes that follow.","-993572476":"<0>b.The Financial Commission has 5 days to acknowledge that your complaint was received and 14 days to answer the complaint through our Internal Dispute Resolution (IDR) procedure.","-1769159081":"<0>c.You will be able to file a complaint with the Financial Commission only if you are not satisfied with our decision or the decision wasn’t made within 14 days.","-58307244":"3. Determination phase","-356618087":"<0>b.The DRC may request additional information from you or us, who must then provide the requested information within 7 days.","-945718602":"<0>b.If you agree with a DRC decision, you will need to accept it within 14 days. If you do not respond to the DRC decision within 14 days, the complaint is considered closed.","-1500907666":"<0>d.If the decision is made in our favour, you must provide a release for us within 7 days of when the decision is made, and the complaint will be considered closed.","-429248139":"5. Disclaimer","-818926350":"The Financial Commission accepts appeals for 45 days following the date of the incident and only after the trader has tried to resolve the issue with the company directly.","-1825471709":"A whole new trading experience on a powerful yet easy to use platform.","-981017278":"Automated trading at your fingertips. No coding needed.","-583559763":"Menu","-673424733":"Demo account","-162753510":"Add real account","-1685795001":"Demo Wallet","-319395348":"Looking for CFDs? Go to Trader’s Hub","-778309978":"The link you clicked has expired. Ensure to click the link in the latest email in your inbox. Alternatively, enter your email below and click <0>Resend email for a new link.","-2101368724":"Transaction processing","-1772981256":"We'll notify you when it's complete.","-198662988":"Make a deposit to trade the world's markets!","-2007055538":"Information updated","-941870889":"The cashier is for real accounts only","-352838513":"It looks like you don’t have a real {{regulation}} account. To use the cashier, switch to your {{active_real_regulation}} real account, or get an {{regulation}} real account.","-1858915164":"Ready to deposit and trade for real?","-1208519001":"You need a real Deriv account to access the cashier.","-715867914":"Successfully deposited","-1271218821":"Account added","-197631101":"Your funds will be available for trading once the verification of your account is complete.","-835056719":"We’ve received your documents","-55435892":"We’ll need 1 - 3 days to review your documents and notify you by email. You can practice with demo accounts in the meantime.","-554054753":"Get started","-1916578937":"<0>Explore the exciting new features that your Wallet offers.","-1724438599":"<0>You're almost there!","-32454015":"Select a payment method to make a deposit into your account.<0 />Need help? Contact us via <1>live chat","-310434518":"The email input should not be empty.","-1471705969":"<0>{{title}}: {{trade_type_name}} on {{symbol}}","-1771117965":"Trade opened","-1856112961":"The URL you requested isn’t available","-304807228":"<0>You’re not logged in, or<0>Our services are unavailable in your country.","-1567989247":"Submit your proof of identity and address","-523602297":"Forex majors","-1303090739":"Up to 1:1500","-19213603":"Metals","-1264604378":"Up to 1:1000","-1728334460":"Up to 1:300","-646902589":"(US_30, US_100, US_500)","-705682181":"Malta","-1835174654":"1:30","-1647612934":"Spreads from","-1912437030":"about required verifications.","-466784048":"Regulator/EDR","-2098459063":"British Virgin Islands","-1326848138":"British Virgin Islands Financial Services Commission (License no. SIBA/L/18/1114)","-1711743223":"Forex (standard/micro), stocks, stock indices, commodities, cryptocurrencies and ETFs","-1372141447":"Straight-through processing","-1969608084":"Forex and Cryptocurrencies","-800771713":"Labuan Financial Services Authority (licence no. MB/18/0024)","-1497128311":"80+","-1501230046":"0.6 pips","-1689815930":"You will need to submit proof of identity and address once you reach certain thresholds.","-1175785439":"Deriv (SVG) LLC (company no. 273 LLC 2020)","-1344709651":"40+","-139026353":"A selfie of yourself.","-1228847561":"Verification in review.","-618322245":"Verification successful.","-149461870":"Forex: standard/exotic","-1995163270":"ETFs","-1220727671":"Standard - SVG","-865172869":"Financial - BVI","-1851765767":"Financial - Vanuatu","-558597854":"Financial - Labuan","-2052425142":"Swap-Free - SVG","-1192904361":"Deriv X Demo","-283929334":"Deriv cTrader Demo","-1269597956":"MT5 Platform","-1302404116":"Maximum leverage","-239789243":"(License no. SIBA/L/18/1114)","-941636117":"MetaTrader 5 Linux app","-1434036215":"Demo Financial","-659955365":"Swap-Free","-1416247163":"Financial STP","-1637969571":"Demo Swap-Free","-1882063886":"Demo CFDs","-1347908717":"Demo Financial SVG","-1780324582":"SVG","-860609405":"Password","-742647506":"Fund transfer","-712681566":"Peer-to-peer exchange","-1267880283":"{{field_name}} is required","-2084509650":"{{field_name}} is not properly formatted.","-790488576":"Forgot password?","-476558960":"If you don’t have open positions","-1385484963":"Confirm to change your {{platform}} password","-1990902270":"This will change the password to all of your {{platform}} accounts.","-12535938":"*Volatility 250 Index, Volatility 150 Index, Boom 300 and Crash 300 Index","-2104148631":"Commissions apply","-201485855":"Up to","-700260448":"demo","-1769158315":"real","-1922462747":"Trader's hub","-16858060":"You have a new Deriv MT5 password to log in to your Deriv MT5 accounts on the web and mobile apps.","-1868608634":"Current password","-2092058806":"8 to 16 characters","-2051033705":"A special character such as ( _ @ ? ! / # )","-1762249687":"A lowercase letter","-535365199":"Enter your {{platform}} password to add a {{platform_name}} {{account}} account.","-184453418":"Enter your {{platform}} password","-393388362":"We’re reviewing your documents. This should take about 1 to 3 days.","-2057918502":"Hint: You may have entered your Deriv password, which is different from your {{platform}} password.","-267598687":"Congratulations, you have successfully created your <0/>{{category}} {{platform}} {{type}} account. To start trading, <1 />transfer funds <2 />from your Deriv account into this account.","-1475660820":"Your Deriv MT5 {{type}} account is ready. ","-1184248732":"Congratulations, you have successfully created your <0/>{{category}} {{platform}} {{type}} account. ","-1928229820":"Reset Deriv X investor password","-1969916895":"Your password must contain between 8-16 characters that include uppercase and lowercase letters, and at least one number and special character ( _ @ ? ! / # ).","-1087845020":"main","-1950683866":"investor","-1874242353":"Fund top up","-89838213":"You can top up your demo account with an additional <0> if your balance is <1> or less.","-1211122723":"{{ platform }} {{ account_title }} account","-78895143":"Current balance","-149993085":"New current balance","-1615126227":"Manage up to {{max_count}} Deriv cTrader accounts. While you can convert any of your Deriv cTrader accounts into a strategy account, please take note of the following:","-1547739386":"To ensure you can always create and manage strategies with fees, <0>keep at least one account free from being a strategy provider. This way, you’ll always have an account ready for collecting fees, allowing you to have up to four strategies where you may impose fees.","-2145356061":"Download Deriv X on your phone to trade with the Deriv X account","-1547458328":"Run cTrader on your browser","-747382643":"Get another cTrader account","-1986258847":"Server maintenance starts at 01:00 GMT every Sunday, and this process may take up to 2 hours to complete. Service may be disrupted during this time.","-499504077":"Choose a cTrader account to transfer","-251202291":"Broker","-678964540":"to","-206829624":"(1:x)","-616293830":"Enjoy dynamic leverage of <0>up to 1:1500 when trading selected instruments in the forex, commodities, cryptocurrencies, and stock indices markets. Our dynamic leverage adjusts automatically to your trading position, based on asset type and trading volume.","-2042845290":"Your investor password has been changed.","-1882295407":"Your password has been changed.","-254497873":"Use this password to grant viewing access to another user. While they may view your trading account, they will not be able to trade or take any other actions.","-161656683":"Current investor password","-374736923":"New investor password","-1793894323":"Create or reset investor password","-21438174":"Add your Deriv cTrader account under Deriv (SVG) LLC (company no. 273 LLC 2020).","-2026018074":"Add your Deriv MT5 <0>{{account_type_name}} account under Deriv (SVG) LLC (company no. 273 LLC 2020).","-162320753":"Add your Deriv MT5 <0>{{account_type_name}} account under Deriv (BVI) Ltd, regulated by the British Virgin Islands Financial Services Commission (License no. SIBA/L/18/1114).","-271828350":"Get more out of Deriv MT5 Financial","-2125860351":"Choose a jurisdiction for your Deriv MT5 CFDs account","-1460321521":"Choose a jurisdiction for your {{account_type}} account","-637537305":"Download {{ platform }} on your phone to trade with the {{ platform }} {{ account }} account","-964130856":"{{existing_account_title}}","-879259635":"Enter your Deriv MT5 password to upgrade your account(s).","-1504907646":"Deriv MT5 password","-361998267":"We've introduced additional password requirements to increase your account security. Your password should:","-996995493":"Be between 8 to 16 characters.","-219163415":"Contain at least one special character.","-1446636186":"By clicking on <0>Next you agree to move your {{platform}} {{type_1}} and {{type_2}} {{from_account}} account(s) under Deriv {{account_to_migrate}} Ltd’s <1>terms and conditions.","-1766387013":"Upgrade your MT5 account(s)","-990927225":"Enter your Deriv MT5 password","-1486399361":"Trade with MT5 mobile app","-301350824":"Note: Don't have the MT5 app? Tap the <0>Trade with MT5 mobile app button to download. Once you have\n installed the app, return to this screen and hit the same button to log in.","-648956272":"Use this password to log in to your Deriv X accounts on the web and mobile apps.","-1814308691":"Please click on the link in the email to change your {{platform}} password.","-601303096":"Scan the QR code to download Deriv {{ platform }}.","-1357917360":"Web terminal","-1282933308":"Not {{barrier}}","-968190634":"Equals {{barrier}}","-1747377543":"Under {{barrier}}","-256210543":"Trading is unavailable at this time.","-1386326276":"Barrier is a required field.","-1418742026":"Higher barrier must be higher than lower barrier.","-92007689":"Lower barrier must be lower than higher barrier.","-1095538960":"Please enter the start time in the format \"HH:MM\".","-1975910372":"Minute must be between 0 and 59.","-866277689":"Expiry time cannot be in the past.","-1455298001":"Now","-1150099396":"We’re working to have this available for you soon. If you have another account, switch to that account to continue trading. You may add a Deriv MT5 Financial.","-28115241":"{{platform_name_trader}} is not available for this account","-453920758":"Go to {{platform_name_mt5}} dashboard","-402175529":"History","-1013917510":"The reset time is {{ reset_time }}","-925402280":"Indicative low spot","-1075414250":"High spot","-902712434":"Deal cancellation","-988484646":"Deal cancellation (executed)","-444882676":"Deal cancellation (active)","-13423018":"Reference ID","-1371082433":"Reset barrier","-1402197933":"Reset time","-2035315547":"Low barrier","-1745835713":"Selected tick","-1551639437":"No history","-1214703885":"You have yet to update either take profit or stop loss","-504849554":"It will reopen at","-59803288":"In the meantime, try our synthetic indices. They simulate real-market volatility and are open 24/7.","-1278109940":"See open markets","-694105443":"This market is closed","-104603605":"You cannot trade as your documents are still under review. We will notify you by email once your verification is approved.","-439389714":"We’re working on it","-770929448":"Go to {{platform_name_smarttrader}}","-347156282":"Submit Proof","-138538812":"Log in or create a free account to place a trade.","-2036388794":"Create free account","-1813736037":"No further trading is allowed on this contract type for the current trading session. For more info, refer to our <0>terms and conditions.","-1043795232":"Recent positions","-153220091":"{{display_value}} Tick","-802374032":"Hour","-1700010072":"This feature is unavailable for tick intervals. Switch to minutes, hours, or days.","-663862998":"Markets","-1145293111":"This market will reopen at","-1341681145":"When this is active, you can cancel your trade within the chosen time frame. Your stake will be returned without loss.","-2069438609":"No matches found","-97673874":"No closed trades","-1727419550":"Your closed trades will be shown here.","-225500551":"Entry & exit details","-1022682526":"Your favourite markets will appear here.","-315741954":"{{amount}} trade types","-232254547":"Custom","-1251526905":"Last 7 days","-1539223392":"Last 90 days","-1123299427":"Your stake will continue to grow as long as the current spot price remains within a specified <0>range from the <1>previous spot price. Otherwise, you lose your stake and the trade is terminated.","-1052279158":"Your <0>payout is the sum of your initial stake and profit.","-274058583":"<0>Take profit is an additional feature that lets you manage your risk by automatically closing the trade when your profit reaches the target amount. This feature is unavailable for ongoing accumulator contracts.","-1819891401":"You can close your trade anytime. However, be aware of <0>slippage risk.","-859589563":"If you select “<0>Odd”, you will win the payout if the last digit of the last tick is an odd number (i.e. 1, 3, 5, 7, or 9).","-1911850849":"If the exit spot is equal to the barrier, you don’t win the payout.","-618782785":"Use multipliers to leverage your potential returns. Predict if the asset price will move upward (bullish) or downward (bearish). We’ll charge a commission when you open a multipliers trade.","-565391674":"If you select \"<0>Up\", your total profit/loss will be the percentage increase in the underlying asset price, times the multiplier and stake, minus commissions.","-1158764468":"If you select “<0>Over”, you will win the payout if the last digit of the last tick is greater than your prediction.","-1268105691":"If you select “<0>Under”, you will win the payout if the last digit of the last tick is less than your prediction.","-444119935":"If you select \"<0>Rise\", you win the payout if the exit spot is strictly higher than the entry spot.","-521457890":"If you select “<0>Touch”, you win the payout if the market touches the barrier at any time during the contract period.","-1020271578":"If you select “<0>Down”, you’ll earn a payout if the spot price never rises above the barrier.","-403573339":"Your payout is equal to the <0>payout per point multiplied by the difference between the <1>final price and the barrier. You will only earn a profit if your payout is higher than your initial stake.","-1307465836":"You may sell the contract up to 15 seconds before expiry. If you do, we’ll pay you the <0>contract value.","-1121315439":"Vanilla options allow you to predict an upward (bullish) or downward (bearish) direction of the underlying asset by purchasing a “Call” or a “Put”.","-1763848396":"Put","-1119872505":"How to trade ","-586636553":"Watch this video to learn about this trade type.","-2017825013":"Got it","-1117111580":"Removed from favorites","-197162398":"CLOSED","-1913695340":"Order Details","-1882287418":"How do I earn a payout?","-725670935":"Take profit and stop loss are unavailable while deal cancellation is enabled.","-1331298683":"Take profit can’t be adjusted for ongoing accumulator contracts.","-509210647":"Try searching for something else.","-99964540":"When your profit reaches or exceeds the set amount, your trade will be closed automatically.","-542594338":"Max. payout","-1622900200":"Enabled","-1769815370":"The barrier will be fixed at the set price.","-2062696378":"Above spot:","-650959802":"The barrier will move relative to the current spot, maintaining a set distance above it.","-445997898":"The barrier will move relative to the current spot, maintaining a set distance below it.","-1116872874":"Fixed price:","-635746838":"Below spot","-548979988":"Fixed price","-2131851017":"Growth rate","-339236213":"Multiplier","-1396928673":"Risk Management","-1358367903":"Stake","-1024650723":"Note: Cannot be adjusted for ongoing accumulator contracts.","-1853307892":"Set your trade","-1221049974":"Final price","-843831637":"Stop loss","-583023237":"This is the resale value of your contract, based on the prevailing market conditions (e.g, the current spot), including additional commissions if any.","-1476381873":"The latest asset price when the trade closure is processed by our servers.","-584445859":"This is when your contract will expire based on the duration or end time you’ve selected. If the duration is more than 24 hours, the cut-off time and expiry date will apply instead.","-1247327943":"This is the spot price of the last tick at expiry.","-1422269966":"You can choose a growth rate with values of 1%, 2%, 3%, 4%, and 5%.","-1186791513":"Payout is the sum of your initial stake and profit.","-1482134885":"We calculate this based on the strike price and duration you’ve selected.","-1682624802":"It is a percentage of the previous spot price. The percentage rate is based on your choice of the index and the growth rate.","-1545819495":"Your trade will be closed automatically at the nearest available asset price when your loss reaches a certain percentage of your stake, but your loss never exceeds your stake. This percentage depends on the chosen underlying asset and the Multiplier.","-1293590531":"If you select “Call”, you’ll earn a payout if the final price is above the strike price at expiry. Otherwise, you won’t receive a payout.","-1432332852":"If you select ‘Put”, you’ll earn a payout if the final price is below the strike price at expiry. Otherwise, you won’t receive a payout.","-468501352":"If you select this feature, your trade will be closed automatically at the nearest available asset price when your profit reaches or exceeds the take profit amount. Your profit may be more than the amount you entered depending on the market price at closing.","-993480898":"Accumulators","-123659792":"Vanillas","-1226595254":"Turbos","-922253974":"Rise/Fall","-1361254291":"Higher/Lower","-1691868913":"Touch/No Touch","-330437517":"Matches/Differs","-657360193":"Over/Under","-231957809":"Win maximum payout if the exit spot is higher than or equal to the upper barrier.","-464144986":"Win maximum payout if the exit spot is lower than or equal to the lower barrier.","-1031456093":"Win up to maximum payout if exit spot is between lower and upper barrier, in proportion to the difference between upper barrier and exit spot.","-968162707":"No payout if exit spot is above or equal to the upper barrier.","-2089488446":"If you select \"Ends Between\", you win the payout if the exit spot is strictly higher than the Low barrier AND strictly lower than the High barrier.","-1876950330":"If you select \"Ends Outside\", you win the payout if the exit spot is EITHER strictly higher than the High barrier, OR strictly lower than the Low barrier.","-546460677":"If the exit spot is equal to either the Low barrier or the High barrier, you don't win the payout.","-1929209278":"If you select \"Even\", you will win the payout if the last digit of the last tick is an even number (i.e., 2, 4, 6, 8, or 0).","-2038865615":"If you select \"Odd\", you will win the payout if the last digit of the last tick is an odd number (i.e., 1, 3, 5, 7, or 9).","-1959473569":"If you select \"Lower\", you win the payout if the exit spot is strictly lower than the barrier.","-1350745673":"If the exit spot is equal to the barrier, you don't win the payout.","-93996528":"By purchasing the \"Close-to-Low\" contract, you'll win the multiplier times the difference between the close and low over the duration of the contract.","-420387848":"The high is the highest point ever reached by the market during the contract period.","-1722190480":"By purchasing the \"High-to-Low\" contract, you'll win the multiplier times the difference between the high and low over the duration of the contract.","-1281286610":"If you select \"Matches\", you will win the payout if the last digit of the last tick is the same as your prediction.","-1113825265":"Additional features are available to manage your positions: “<0>Take profit” and “<0>Stop loss” allow you to adjust your level of risk aversion.","-1104397398":"Additional features are available to manage your positions: “<0>Take profit”, “<0>Stop loss” and “<0>Deal cancellation” allow you to adjust your level of risk aversion.","-1272255095":"If the exit spot is equal to the barrier or the new barrier (if a reset occurs), you don't win the payout.","-1392065699":"If you select \"Rise\", you win the payout if the exit spot is strictly higher than the entry spot.","-1762566006":"If you select \"Fall\", you win the payout if the exit spot is strictly lower than the entry spot.","-1435306976":"If you select \"Allow equals\", you win the payout if exit spot is higher than or equal to entry spot for \"Rise\". Similarly, you win the payout if exit spot is lower than or equal to entry spot for \"Fall\".","-1812957362":"If you select \"Stays Between\", you win the payout if the market stays between (does not touch) either the High barrier or the Low barrier at any time during the contract period","-220379757":"If you select \"Goes Outside\", you win the payout if the market touches either the High barrier or the Low barrier at any time during the contract period.","-299450697":"If you select \"High Tick\", you win the payout if the selected tick is the highest among the next five ticks.","-1416078023":"If you select \"Touch\", you win the payout if the market touches the barrier at any time during the contract period.","-1565216130":"If you select <0>\"Up\", you’ll earn a payout if the spot price never drops below the barrier.","-1336860323":"If you select <0>\"Down\", you’ll earn a payout if the spot price never rises above the barrier.","-1547935605":"Your payout is equal to the <0>payout per point multiplied by the difference between the <0>final price and the barrier. You will only earn a profit if your payout is higher than your initial stake.","-351875097":"Number of ticks","-729830082":"View less","-1649593758":"Trade info","-1382749084":"Go back to trading","-1239477911":"second","-1585766960":"min","-1652791614":"mins","-1977959027":"hours","-442488432":"day","-337314714":"days","-1435392215":"About deal cancellation","-1192773792":"Don't show this again","-471757681":"Risk management","-771725194":"Deal Cancellation","-1669741470":"The payout at expiry is equal to the payout per point multiplied by the difference between the final price and the strike price.","-1186082278":"Your payout is equal to the payout per point multiplied by the difference between the final price and barrier.","-1890561510":"Cut-off time","-878534036":"If you select \"Call\", you’ll earn a payout if the final price is above the strike price at expiry. Otherwise, you won’t receive a payout.","-1587076792":"If you select \"Put\", you’ll earn a payout if the final price is below the strike price at expiry. Otherwise, you won’t receive a payout.","-565990678":"Your contract will expire on this date (in GMT), based on the End time you’ve selected.","-477936848":"We use next-tick-execution mechanism, which is the next asset price when the trade opening is processed by our servers.","-148680560":"Spot price of the last tick upon reaching expiry.","-1123926839":"Contracts will expire at exactly 14:00:00 GMT on your selected expiry date.","-1904828224":"We’ll offer to buy your contract at this price should you choose to sell it before its expiry. This is based on several factors, such as the current spot price, duration, etc. However, we won’t offer a contract value if the remaining duration is below 24 hours.","-127118348":"Choose {{contract_type}}","-543478618":"Try checking your spelling or use a different term","-338707425":"Minimum duration is 1 day","-1003473648":"Duration: {{duration}} day","-700280380":"Deal cancel. fee","-8998663":"Digit: {{last_digit}} ","-718750246":"Your stake will grow at {{growth_rate}}% per tick as long as the current spot price remains within ±{{tick_size_barrier_percentage}} from the previous spot price.","-690963898":"Your contract will be automatically closed when your payout reaches this amount.","-511541916":"Your contract will be automatically closed upon reaching this number of ticks.","-438655760":"<0>Note: You can close your trade anytime. Be aware of slippage risk.","-774638412":"Stake must be between {{min_stake}} {{currency}} and {{max_stake}} {{currency}}","-434270664":"Current Price","-1956787775":"Barrier Price:","-1513281069":"Barrier 2","-390994177":"Should be between {{min}} and {{max}}","-1231210510":"Tick","-2055106024":"Toggle between advanced and simple duration settings","-1012793015":"End time","-1804019534":"Expiry: {{date}}","-2037881712":"Your contract will be closed automatically at the next available asset price on <0>.","-629549519":"Commission <0/>","-2131859340":"Stop out <0/>","-1686280757":"<0>{{commission_percentage}}% of (<1/> * {{multiplier}})","-732683018":"When your profit reaches or exceeds this amount, your trade will be closed automatically.","-989393637":"Take profit can't be adjusted after your contract starts.","-194424366":"above","-857660728":"Strike Prices","-1346404690":"You receive a payout at expiry if the spot price never touches or breaches the barrier throughout the contract duration. Otherwise, your contract will be terminated early.","-1572548510":"Ups & Downs","-71301554":"Ins & Outs","-952298801":"Look Backs","-763273340":"Digits","-420223912":"Clean up Blocks","-301596978":"Collapse Blocks","-2002533437":"Custom function","-215053350":"with:","-1257232389":"Specify a parameter name:","-1885742588":"with: ","-188442606":"function {{ function_name }} {{ function_params }} {{ dummy }}","-313112159":"This block is similar to the one above, except that this returns a value. The returned value can be assigned to a variable of your choice.","-1783320173":"Prematurely returns a value within a function","-1485521724":"Conditional return","-1482801393":"return","-46453136":"get","-1838027177":"first","-1182568049":"Get list item","-1675454867":"This block gives you the value of a specific item in a list, given the position of the item. It can also remove the item from the list.","-381501912":"This block creates a list of items from an existing list, using specific item positions.","-426766796":"Get sub-list","-1679267387":"in list {{ input_list }} find {{ first_or_last }} occurence of item {{ input_value }}","-2087996855":"This block gives you the position of an item in a given list.","-422008824":"Checks if a given list is empty","-1343887675":"This block checks if a given list is empty. It returns “True” if the list is empty, “False” if otherwise.","-1548407578":"length of {{ input_list }}","-1786976254":"This block gives you the total number of items in a given list.","-2113424060":"create list with item {{ input_item }} repeated {{ number }} times","-1955149944":"Repeat an item","-434887204":"set","-197957473":"as","-851591741":"Set list item","-1874774866":"ascending","-1457178757":"Sorts the items in a given list","-350986785":"Sort list","-324118987":"make text from list","-155065324":"This block creates a list from a given string of text, splitting it with the given delimiter. It can also join items in a list into a string of text.","-459051222":"Create list from text","-977241741":"List Statement","-451425933":"{{ break_or_continue }} of loop","-323735484":"continue with next iteration","-1592513697":"Break out/continue","-713658317":"for each item {{ variable }} in list {{ input_list }}","-1825658540":"Iterates through a given list","-952264826":"repeat {{ number }} times","-887757135":"Repeat (2)","-1608672233":"This block is similar to the block above, except that the number of times it repeats is determined by a given variable.","-533154446":"Repeat (1)","-1059826179":"while","-1893063293":"until","-279445533":"Repeat While/Until","-1003706492":"User-defined variable","-359097473":"set {{ variable }} to {{ value }}","-1588521055":"Sets variable value","-980448436":"Set variable","-1538570345":"Get the last trade information and result, then trade again.","-222725327":"Here is where you can decide if your bot should continue trading.","-1638446329":"Result is {{ win_or_loss }}","-1968029988":"Last trade result","-1588406981":"You can check the result of the last trade with this block.","-1459154781":"Contract Details: {{ contract_detail }}","-1652241017":"Reads a selected property from contract details list","-985351204":"Trade again","-2082345383":"These blocks transfer control to the Purchase conditions block.","-172574065":"This block will transfer the control back to the Purchase conditions block, enabling you to purchase another contract.","-403103225":"restart","-837044282":"Ask Price {{ contract_type }}","-1033917049":"This block returns the purchase price for the selected trade type.","-1863737684":"2. Purchase conditions","-228133740":"Specify contract type and purchase conditions.","-1098726473":"This block is mandatory. Only one copy of this block is allowed. You can place the Purchase block (see below) here as well as conditional blocks to define your purchase conditions.","-1777988407":"Payout {{ contract_type }}","-511116341":"This block returns the potential payout for the selected trade type","-1943211857":"Potential payout","-1738427539":"Purchase","-813464969":"buy","-53668380":"True if active contract can be sold before expiration at current market price","-43337012":"Sell profit/loss","-2112866691":"Returns the profit/loss from selling at market price","-2132417588":"This block gives you the potential profit or loss if you decide to sell your contract.","-1360483055":"set {{ variable }} to Bollinger Bands {{ band_type }} {{ dummy }}","-20542296":"Calculates Bollinger Bands (BB) from a list with a period","-1951109427":"Bollinger Bands (BB)","-857226052":"BB is a technical analysis indicator that’s commonly used by traders. The idea behind BB is that the market price stays within the upper and lower bands for 95% of the time. The bands are the standard deviations of the market price, while the line in the middle is a simple moving average line. If the price reaches either the upper or lower band, there’s a possibility of a trend reversal.","-325196350":"set {{ variable }} to Bollinger Bands Array {{ band_type }} {{ dummy }}","-199689794":"Similar to BB. This block gives you a choice of returning the values of either the lower band, higher band, or the SMA line in the middle.","-920690791":"Calculates Exponential Moving Average (EMA) from a list with a period","-960641587":"EMA is a type of moving average that places more significance on the most recent data points. It’s also known as the exponentially weighted moving average. EMA is different from SMA in that it reacts more significantly to recent price changes.","-1557584784":"set {{ variable }} to Exponential Moving Average Array {{ dummy }}","-32333344":"Calculates Moving Average Convergence Divergence (MACD) from a list","-628573413":"MACD is calculated by subtracting the long-term EMA (26 periods) from the short-term EMA (12 periods). If the short-term EMA is greater or lower than the long-term EMA than there’s a possibility of a trend reversal.","-1133676960":"Fast EMA Period {{ input_number }}","-883166598":"Period {{ input_period }}","-450311772":"set {{ variable }} to Relative Strength Index {{ dummy }}","-1861493523":"Calculates Relative Strength Index (RSI) list from a list of values with a period","-880048629":"Calculates Simple Moving Average (SMA) from a list with a period","-1150972084":"Market direction","-276935417":"This block is used to determine if the market price moves in the selected direction or not. It gives you a value of “True” or “False”.","-764931948":"in candle list get # from end {{ input_number }}","-924607337":"Returns the last digit of the latest tick","-560033550":"Returns the list of last digits of 1000 recent tick values","-74062476":"Make a List of {{ candle_property }} values in candles list with interval: {{ candle_interval_type }}","-1556495906":"Returns a list of specific values from a candle list according to selected time interval","-166816850":"Create a list of candle values (1)","-1174859923":"Read the selected candle value","-1972165119":"Read candle value (1)","-1956100732":"You can use this block to analyze the ticks, regardless of your trades","-443243232":"The content of this block is called on every tick. Place this block outside of any root block.","-641399277":"Last Tick","-1628954567":"Returns the value of the last tick","-1332756793":"This block gives you the value of the last tick.","-2134440920":"Last Tick String","-1466340125":"Tick value","-467913286":"Tick value Description","-785831237":"This block gives you a list of the last 1000 tick values.","-1546430304":"Tick List String Description","-1788626968":"Returns \"True\" if the given candle is black","-436010611":"Make a list of {{ candle_property }} values from candles list {{ candle_list }}","-1384340453":"Returns a list of specific values from a given candle list","-584859539":"Create a list of candle values (2)","-2010558323":"Read {{ candle_property }} value in candle {{ input_candle }}","-2846417":"This block gives you the selected candle value.","-1587644990":"Read candle value (2)","-1202212732":"This block returns account balance","-1737837036":"Account balance","-1963883840":"Put your blocks in here to prevent them from being removed","-1284013334":"Use this block if you want some instructions to be ignored when your bot runs. Instructions within this block won’t be executed.","-1217253851":"Log","-1987568069":"Warn","-104925654":"Console","-1956819233":"This block displays messages in the developer's console with an input that can be either a string of text, a number, boolean, or an array of data.","-1450461842":"Load block from URL: {{ input_url }}","-1088614441":"Loads blocks from URL","-1747943728":"Loads from URL","-1008209188":"Sends a message to Telegram","-1218671372":"Displays a notification and optionally play selected sound","-2099284639":"This block gives you the total profit/loss of your trading strategy since your bot started running. You can reset this by clicking “Clear stats” on the Transaction Stats window, or by refreshing this page in your browser.","-683825404":"Total Profit String","-718220730":"Total Profit String Description","-1861858493":"Number of runs","-264195345":"Returns the number of runs","-303451917":"This block gives you the total number of times your bot has run. You can reset this by clicking “Clear stats” on the Transaction Stats window, or by refreshing this page in your browser.","-2132861129":"Conversion Helper Block","-74095551":"Seconds Since Epoch","-15528039":"Returns the number of seconds since January 1st, 1970","-729807788":"This block returns the number of seconds since January 1st, 1970.","-1370107306":"{{ dummy }} {{ stack_input }} Run after {{ number }} second(s)","-558838192":"Delayed run","-1975250999":"This block converts the number of seconds since the Unix Epoch (1 January 1970) into a string of text representing the date and time.","-702370957":"Convert to date/time","-982729677":"Convert to timestamp","-311268215":"This block converts a string of text that represents the date and time into seconds since the Unix Epoch (1 January 1970). The time and time zone offset are optional. Example: 2019-01-01 21:03:45 GMT+0800 will be converted to 1546347825.","-1374685318":"Your contract is closed automatically when your loss is more than or equals to this amount. This block can only be used with the multipliers trade type.","-1797602591":"Stop Loss: {{ currency }} {{ stop_loss }}","-1214929127":"Stop loss must be a positive number.","-1626615625":"Take Profit (Multiplier)","-1871944173":"Accumulator trade options","-625636913":"Amount must be a positive number.","-780745489":"If the contract type is “Both”, then the Purchase Conditions should include both Rise and Fall using the “Conditional Block\"","-2142851225":"Multiplier trade options","-1466383897":"Duration: {{ duration_unit }} {{ duration_value }}","-440702280":"Trade options","-1193894978":"Define your trade options such as duration and stake. Some options are only applicable for certain trade types.","-46523443":"Duration value is not allowed. To run the bot, please enter a value between {{min}} to {{max}}.","-1483427522":"Trade Type: {{ trade_type_category }} > {{ trade_type }}","-323348124":"1. Trade parameters","-1671903503":"Run once at start:","-783173909":"Trade options:","-376956832":"Here is where you define the parameters of your contract.","-1244007240":"if {{ condition }} then","-1577206704":"else if","-33796979":"true","-1434883449":"This is a single block that returns a boolean value, either true or false.","-1946404450":"Compares two values","-979918560":"This block converts the boolean value (true or false) to its opposite.","-2047257743":"Null","-1274387519":"Performs selected logic operation","-766386234":"This block performs the \"AND\" or the \"OR\" logic operation.","-790995537":"test {{ condition }}","-1860211657":"if false {{ return_value }}","-1643760249":"This block tests if a given value is true or false and returns “True” or “False” accordingly.","-1551875333":"Test value","-52486882":"Arithmetical operations","-1010436425":"This block adds the given number to the selected variable","-999773703":"Change variable","-1272091683":"Mathematical constants","-1396629894":"constrain {{ number }} low {{ low_number }} high {{ high_number }}","-425224412":"This block constrains a given number so that it is within a set range.","-2072551067":"Constrain within a range","-43523220":"remainder of {{ number1 }} ÷ {{ number2 }}","-1291857083":"Returns the remainder after a division","-592154850":"Remainder after division","-736665095":"Returns the remainder after the division of the given numbers.","-1266992960":"Math Number Description","-77191651":"{{ number }} is {{ type }}","-817881230":"even","-142319891":"odd","-1000789681":"whole","-1735674752":"Test a number","-1017805068":"This block tests a given number according to the selection and it returns a value of “True” or “False”. Available options: Even, Odd, Prime, Whole, Positive, Negative, Divisible","-1858332062":"Number","-1053492479":"Enter an integer or fractional number into this block. Please use `.` as a decimal separator for fractional numbers.","-927097011":"sum","-1653202295":"max","-1555878023":"average","-1748351061":"mode","-992067330":"Aggregate operations","-1691561447":"This block gives you a random fraction between 0.0 to 1.0","-523625686":"Random fraction number","-933024508":"Rounds a given number to an integer","-1656927862":"This block rounds a given number according to the selection: round, round up, round down.","-1495304618":"absolute","-61210477":"Operations on a given number","-181644914":"This block performs the selected operations to a given number.","-840732999":"to {{ variable }} append text {{ input_text }}","-1469497908":"Appends a given text to a variable","-1851366276":"Text Append","-1666316828":"Appends a given text to a variable.","-1902332770":"Transform {{ input_text }} to {{ transform_type }}","-1489004405":"Title Case","-904432685":"Changes text case accordingly","-882381096":"letter #","-1027605069":"letter # from end","-2066990284":"random letter","-337089610":"in text {{ input_text1 }} find {{ first_or_last }} occurence of text {{ input_text2 }}","-1966694141":"Searches through a string of text for a specific occurrence of a given character or word, and returns the position.","-697543841":"Text join","-141160667":"length of {{ input_text }}","-1133072029":"Text String Length","-1109723338":"print {{ input_text }}","-736668830":"Print","-1631669591":"string","-1768939692":"number","-1821552998":"trim spaces from {{ side }} of {{ input_text }}","-801766026":"right side","-474779821":"Trims spaces","-1750478127":"New variable name","-2047029150":"Unable to load the block file.","-1410769167":"Target must be an XML file","-609157479":"This URL is already loaded","-260939264":"Collapsed","-894560707":"function","-1867119688":"Duplicate","-1710107207":"Add Comment","-1549535410":"Remove Comment","-918450098":"Blocks","-241945454":"Proposals are not ready","-1087890592":"Maximum loss amount reached","-1030545878":"You are rate limited for: {{ message_type }}, retrying in {{ delay }}s (ID: {{ request }})","-490766438":"You are disconnected, retrying in {{ delay }}s","-339973827":"The market is closed","-1389975609":"unknown","-1900515692":"Duration must be a positive integer","-245297595":"Please login","-1445046468":"Given candle is not valid","-1891622945":"{{hourPast}}h ago","-1919680487":"workspace","-1703118772":"The {{block_type}} block is misplaced from {{missing_space}}.","-1785726890":"purchase conditions","-1993203952":"Trade options accumulators","-461955353":"purchase price","-172348735":"profit","-1624674721":"contract type","-1644154369":"entry spot time","-510792478":"entry spot price","-1974651308":"exit spot time","-1600267387":"exit spot price","-514917720":"barrier","-1072292603":"No Change","-795152863":"green","-1640576332":"blue","-804983649":"yellow","-94281841":"red","-1242470654":"Earned money","-137444201":"Buy","-841561409":"Put Spread","-1429914047":"Low","-1893628957":"Open Time","-1896106455":"10 minutes","-999492762":"15 minutes","-1978767852":"30 minutes","-293628675":"1 hour","-385604445":"2 hours","-1965813351":"4 hours","-525321833":"1 day","-151151292":"Asians","-1048378719":"Reset Call/Reset Put","-1282312809":"High/Low Ticks","-1237186896":"Only Ups/Only Downs","-529846150":"Seconds","-1635771697":"middle","-1529389221":"Histogram","-1819860668":"MACD","-1750896349":"D'Alembert","-102980621":"The Oscar's Grind Strategy is a low-risk positive progression strategy that first appeared in 1965. By using this strategy, the size of your contract will increase after successful trades, but remains unchanged after unsuccessful trades.","-462715374":"Untitled Bot","-280147477":"All transactions","-130601012":"Please select duration","-1577570698":"Start date","-1904030160":"Transaction performed by (App ID: {{app_id}})","-1876891031":"Currency","-513103225":"Transaction time","-2066666313":"Credit/Debit","-1981004241":"Sell time","-1196431745":"Contract cost","-3423966":"Take profit<0 />Stop loss","-1131753095":"The {{trade_type_name}} contract details aren't currently available. We're working on making them available soon.","-360975483":"You've made no transactions of this type during this period.","-2082644096":"Current stake","-1942828391":"Max payout","-335816381":"Ends In/Ends Out","-1789807039":"Asian Up/Asian Down","-558031309":"High Tick/Low Tick","-447037544":"Buy price:","-737348236":"Contract cost:","-1694314813":"Contract value:","-113940416":"Current stake:","-1999539705":"Deal cancel. fee:","-155989831":"Decrement value","-338379841":"Indicative price:","-2027409966":"Initial stake:","-1769852749":"N/A","-726626679":"Potential profit/loss:","-1511825574":"Profit/Loss:","-499175967":"Strike Price","-706219815":"Indicative price","-1669418686":"AUD/CAD","-1548588249":"AUD/CHF","-1552890620":"AUD/JPY","-681231560":"AUD/PLN","-64938413":"AUD/USD","-1430522808":"EUR/AUD","-2020477069":"EUR/CAD","-1201853162":"EUR/CHF","-1318070255":"EUR/GBP","-1197505739":"EUR/JPY","-405907358":"EUR/USD","-1536293064":"NZD/JPY","-79700881":"NZD/USD","-642323838":"USD/CAD","-428199705":"USD/CHF","-424108348":"USD/JPY","-548255282":"USD/NOK","-1834131208":"USD/PLN","-524302516":"Silver/USD","-764731776":"Platinum/USD","-853582174":"France 40","-1096386695":"UK 100","-617646862":"Germany 40","-2077690248":"Japan 225","-512194910":"US Tech 100","-381746202":"US 500","-1935463381":"Swiss 20","-1941767726":"Euro 50","-1925264914":"Volatility 25 Index","-708579504":"Volatility 50 Index","-975255670":"Volatility 75 Index","-1736314513":"Crash 300 Index","-342128411":"Crash 500 Index","-9704319":"Crash 1000 Index","-465860988":"Bull Market Index","-280323742":"EUR Basket","-563812039":"Volatility 10 (1s) Index","-82971929":"Volatility 25 (1s) Index","-433962508":"Volatility 75 (1s) Index","-764111252":"Volatility 100 (1s) Index","-816110209":"Volatility 150 (1s) Index","-1374309449":"Volatility 200 (1s) Index","-1288044380":"Volatility 250 (1s) Index","-1164978320":"Jump 10 Index","-575272887":"BCH/USD","-295406873":"BTC/ETH","-1713556301":"ZMR/USD","-2046638412":"XRP/USD","-1263203461":"BTC/USD","-1112522776":"DSH/USD","-460689370":"LTC/USD","-132112961":"Sharkfin","-1715390759":"I want to do this later","-56163366":"I don't have any of these","-175164838":"{{seconds_passed}}s ago","-514136557":"{{minutes_passed}}m ago","-1420737287":"{{hours_passed}}h ago","-2092611555":"Sorry, this app is unavailable in your current location.","-1488537825":"If you have an account, log in to continue.","-1603581277":"minutes","-886317740":"The <0>date of birth on your identity document doesn't match your profile.","-1606307809":"We were unable to verify the identity document with the details provided.","-475787720":"The verification status was empty, rejected for lack of information.","-1627868670":"Your identity document has expired.","-1302288704":"The document’s owner is deceased.","-895884696":"The <0>name and <0>date of birth on your identity document don't match your profile.","-1231856133":"The verification status is not available, provider says: Needs Technical Investigation.","-433687715":"For enhanced security, we need to reverify your identity. Kindly resubmit your proof of identity to unlock your account.","-1637538521":"Your document appears to be invalid.","-876579004":"The name on your document doesn’t match your profile.","-746520172":"Some details on your document appear to be invalid, missing, or unclear.","-2146200521":"The serial number of your document couldn’t be verified.","-1945323197":"Your document appears to be in black and white. Please upload a colour photo of your document.","-631393256":"Your document contains markings or text that should not be on your document.","-609103016":"The image quality of your document is too low. Please provide a hi-res photo of your identity document.","-530935718":"We’re unable to verify the document you provided because some details appear to be missing. Please try again or provide another document.","-1027031626":"We’re unable to verify the document you provided because it appears to be damaged. Please try again or upload another document.","-1671621833":"The front of your document appears to be missing. Please provide both sides of your identity document.","-727588232":"Your document appears to be a scanned copy that contains markings or text that shouldn’t be on your document.","-1435064387":"Your document appears to be a printed copy.","-624316211":"Your document appears to be a photo of a device screen.","-1714959941":"This chart display is not ideal for tick contracts","-1254554534":"Please change the chart duration to tick for a better trading experience.","-1658230823":"Contract was sold for <0 />.","-1905867404":"Contract cancelled"} \ No newline at end of file diff --git a/packages/translations/src/translations/ach.json b/packages/translations/src/translations/ach.json index 48f5ea06ab8b..3caaadf316c8 100644 --- a/packages/translations/src/translations/ach.json +++ b/packages/translations/src/translations/ach.json @@ -153,6 +153,7 @@ "157871994": "crwdns2738409:0crwdne2738409:0", "158355408": "crwdns2783059:0crwdne2783059:0", "160746023": "crwdns1259157:0crwdne1259157:0", + "160760697": "crwdns6013648:0{{company}}crwdne6013648:0", "160863687": "crwdns1259159:0crwdne1259159:0", "164112826": "crwdns1259161:0crwdne1259161:0", "164564432": "crwdns1259163:0crwdne1259163:0", @@ -187,7 +188,6 @@ "195136585": "crwdns5798578:0crwdne5798578:0", "195972178": "crwdns1259207:0crwdne1259207:0", "196810983": "crwdns2301171:0crwdne2301171:0", - "196998347": "crwdns1259209:0crwdne1259209:0", "197190401": "crwdns1259211:0crwdne1259211:0", "201016731": "crwdns5798610:0crwdne5798610:0", "201091938": "crwdns1259213:0crwdne1259213:0", @@ -304,6 +304,7 @@ "312300092": "crwdns1259387:0crwdne1259387:0", "313741895": "crwdns1259391:0crwdne1259391:0", "315306603": "crwdns1259393:0crwdne1259393:0", + "315516003": "crwdns6013626:0crwdne6013626:0", "316694303": "crwdns1259395:0crwdne1259395:0", "318705408": "crwdns5766520:0crwdne5766520:0", "318865860": "crwdns1259399:0crwdne1259399:0", @@ -344,6 +345,7 @@ "351744408": "crwdns1259457:0crwdne1259457:0", "353731490": "crwdns1259461:0crwdne1259461:0", "354945172": "crwdns1259463:0crwdne1259463:0", + "355647475": "crwdns6013628:0crwdne6013628:0", "357477280": "crwdns1259465:0crwdne1259465:0", "357672069": "crwdns3698870:0crwdne3698870:0", "359053005": "crwdns1259467:0crwdne1259467:0", @@ -546,7 +548,6 @@ "567163880": "crwdns1259773:0{{platform}}crwdne1259773:0", "567755787": "crwdns1259775:0crwdne1259775:0", "569057236": "crwdns1259777:0crwdne1259777:0", - "571921777": "crwdns1259779:0crwdne1259779:0", "572576218": "crwdns1361655:0crwdne1361655:0", "573173477": "crwdns1259781:0{{ input_candle }}crwdne1259781:0", "575668969": "crwdns3891482:0crwdne3891482:0", @@ -956,7 +957,6 @@ "970915884": "crwdns1260393:0crwdne1260393:0", "974888153": "crwdns4308524:0crwdne4308524:0", "975608902": "crwdns5285612:0crwdne5285612:0", - "975668699": "crwdns1260397:0{{company}}crwdne1260397:0", "975747761": "crwdns5554036:0crwdne5554036:0", "975950139": "crwdns1260399:0crwdne1260399:0", "977647549": "crwdns6010484:0{{platform}}crwdne6010484:0", @@ -1431,6 +1431,7 @@ "1405584799": "crwdns1261093:0{{ candle_interval_type }}crwdne1261093:0", "1407191858": "crwdns1719401:0crwdne1719401:0", "1408844944": "crwdns1261095:0crwdne1261095:0", + "1410016796": "crwdns6013630:0crwdne6013630:0", "1411373212": "crwdns2738161:0crwdne2738161:0", "1411419173": "crwdns5798294:0{{ accumulator }}crwdne5798294:0", "1412405902": "crwdns5070110:0crwdne5070110:0", @@ -1754,6 +1755,7 @@ "1736292549": "crwdns1261581:0crwdne1261581:0", "1737352280": "crwdns1261583:0crwdne1261583:0", "1738094481": "crwdns2101841:0crwdne2101841:0", + "1738206798": "crwdns6013632:0crwdne6013632:0", "1738611950": "crwdns3859828:0crwdne3859828:0", "1738681493": "crwdns1261585:0crwdne1261585:0", "1739086943": "crwdns1781117:0crwdne1781117:0", @@ -1897,7 +1899,6 @@ "1866811212": "crwdns1261809:0crwdne1261809:0", "1867217564": "crwdns1261813:0crwdne1261813:0", "1867783237": "crwdns1261815:0crwdne1261815:0", - "1869315006": "crwdns1261817:0crwdne1261817:0", "1869486036": "crwdns3264388:0crwdne3264388:0", "1869787212": "crwdns1261819:0crwdne1261819:0", "1870933427": "crwdns1261821:0crwdne1261821:0", @@ -2811,7 +2812,6 @@ "-541392118": "crwdns168023:0crwdne168023:0", "-599998434": "crwdns3708386:0crwdne3708386:0", "-247122507": "crwdns168025:0crwdne168025:0", - "-1443721737": "crwdns168027:0crwdne168027:0", "-901712457": "crwdns168029:0crwdne168029:0", "-166472881": "crwdns168033:0crwdne168033:0", "-666905139": "crwdns160448:0crwdne160448:0", @@ -2828,7 +2828,6 @@ "-1675848843": "crwdns69698:0crwdne69698:0", "-283017497": "crwdns165861:0crwdne165861:0", "-1294455996": "crwdns3536900:0crwdne3536900:0", - "-1838982691": "crwdns2783119:0crwdne2783119:0", "-532693866": "crwdns2783121:0crwdne2783121:0", "-1196049878": "crwdns160450:0crwdne160450:0", "-1326406485": "crwdns160452:0crwdne160452:0", @@ -2837,9 +2836,9 @@ "-1459042184": "crwdns160458:0crwdne160458:0", "-1603543465": "crwdns160460:0crwdne160460:0", "-614516651": "crwdns160462:0crwdne160462:0", - "-203002433": "crwdns81531:0crwdne81531:0", "-720315013": "crwdns160468:0{{currency}}crwdne160468:0", "-2052373215": "crwdns160470:0crwdne160470:0", + "-203002433": "crwdns81531:0crwdne81531:0", "-379487596": "crwdns1381153:0{{selected_percentage}}crwdnd1381153:0{{format_amount}}crwdnd1381153:0{{currency__display_code}}crwdne1381153:0", "-1957498244": "crwdns169121:0crwdne169121:0", "-1059419768": "crwdns160478:0crwdne160478:0", @@ -3401,7 +3400,6 @@ "-705744796": "crwdns158018:0crwdne158018:0", "-2063700253": "crwdns1918511:0crwdne1918511:0", "-1585069798": "crwdns168057:0crwdne168057:0", - "-1287141934": "crwdns168073:0crwdne168073:0", "-367759751": "crwdns168053:0crwdne168053:0", "-596690079": "crwdns170552:0crwdne170552:0", "-265932467": "crwdns170554:0crwdne170554:0", @@ -3815,6 +3813,13 @@ "-99964540": "crwdns5757138:0crwdne5757138:0", "-542594338": "crwdns2225583:0crwdne2225583:0", "-1622900200": "crwdns5990880:0crwdne5990880:0", + "-1769815370": "crwdns6013634:0crwdne6013634:0", + "-2062696378": "crwdns6013636:0crwdne6013636:0", + "-650959802": "crwdns6013638:0crwdne6013638:0", + "-445997898": "crwdns6013640:0crwdne6013640:0", + "-1116872874": "crwdns6013642:0crwdne6013642:0", + "-635746838": "crwdns6013644:0crwdne6013644:0", + "-548979988": "crwdns6013646:0crwdne6013646:0", "-2131851017": "crwdns2225581:0crwdne2225581:0", "-339236213": "crwdns81045:0crwdne81045:0", "-1396928673": "crwdns5990882:0crwdne5990882:0", diff --git a/packages/translations/src/translations/ar.json b/packages/translations/src/translations/ar.json index bcc965ecc64a..52c0309ad0f4 100644 --- a/packages/translations/src/translations/ar.json +++ b/packages/translations/src/translations/ar.json @@ -5,7 +5,7 @@ "2091451": "Deriv Bot - شريكك في التداول الآلي", "3125515": "استخدم كلمة مرور Deriv MT5 الخاصة بك لتسجيل الدخول إلى حساباتك على Deriv MT5 عبر تطبيقات سطح المكتب والويب والهاتف المحمول.", "3215342": "آخر 30 يومًا", - "3420069": "لتفادي أي تأخير، قم بإدخال <0>اسمك و<0>تاريخ ميلادك بنفس الصيغة الموجودة في هويتك.", + "3420069": "لتفادي أي تأخير، قم بإدخال <0>اسمك و<0>تاريخ ميلادك بشكل مطابق لهويتك.", "4547840": "<0>قم بتوثيق حسابك لتتمكن من تحويل الأموال. <1>قم بالتوثيق الآن", "5149403": "تعرف على المزيد حول أنواع التداول", "7100308": "يجب أن تكون الساعة بين 0 و 23.", @@ -33,7 +33,7 @@ "28581045": "قم بإضافة حساب MT5 حقيقي", "33433576": "يرجى استخدام المحفظة الإلكترونية لسحب أموالك.", "35089987": "قم بتحميل الصورة الأمامية والخلفية لرخصة القيادة الخاصة بك.", - "40632954": "لماذا لا يعمل بطاقتي / محفظتي الإلكترونية؟", + "40632954": "لماذا لا تعمل بطاقتي/ محفظتي الإلكترونية؟", "41737927": "شكرًا لك", "44877997": "تصريح الإقامة", "45453595": "Binary Coin", @@ -41,7 +41,7 @@ "46523711": "تم التحقق من وثيقة إثبات هويتك", "49404821": "إذا اشتريت خيار \"<0> {{trade_type}} \" ، فستتلقى عائدًا عند انتهاء الصلاحية إذا كان السعر النهائي هو {{payout_status}} سعر الإضراب. وإلا ، فإن خيار \"<0> {{trade_type}} \" ستنتهي صلاحيته بلا قيمة.", "53801223": "Hong Kong 50", - "53964766": "5. اضغط على احفظ لتنزيل الروبوت الخاص بك. يمكنك اختيار تنزيل برنامج الروبوت الخاص بك على جهازك أو Google Drive.", + "53964766": "5. اضغط على حفظ لتنزيل الروبوت الخاص بك. يمكنك اختيار تنزيل برنامج الروبوت الخاص بك على جهازك أو على Google Drive.", "54185751": "أقل من 100 ألف دولار", "55340304": "هل ترغب في الاحتفاظ بالعقد الحالي؟", "55916349": " كافة الخيارات", @@ -86,13 +86,13 @@ "85389154": "الخطوات اللازمة لمتابعة التحقق على هاتفك المحمول", "90266322": "2. ابدأ محادثة مع روبوت Telegram الذي تم إنشاؤه حديثًا وتأكد من إرسال بعض الرسائل إليه قبل المتابعة إلى الخطوة التالية. (على سبيل المثال Hello Bot!)", "91993812": "استراتيجية Martingale Strategy هي تقنية تداول كلاسيكية تم استخدامها لأكثر من مائة عام ، وقد اشتهر بها عالم الرياضيات الفرنسي Paul Pierre Levy في القرن الثامن عشر.", - "93154671": "1. اضغط على Reset في الجزء السفلي من لوحة الإحصائيات.", + "93154671": "1. اضغط على اعادة ضبط في الجزء السفلي من لوحة الإحصائيات.", "96381225": "فشل التحقق من الهوية", "98473502": "نحن غير ملزمون بتنفيذ اختبار الملائمة، وليس علينا تقديم أي تحذيرات بشأن المخاطر.", "98972777": "عنصر عشوائي", "100239694": "قم بتحميل الجزء الأمامي من البطاقة من جهاز الكمبيوتر الخاص بك", "102226908": "لا يمكن ترك الحقل فارغًا", - "105871033": "يبدو أن عمرك في المستند الذي قدمته أقل من 18 عاما. يسمح لنا فقط بتقديم خدماتنا للعملاء الذين تزيد أعمارهم عن 18 عاما ، لذلك سنحتاج إلى إغلاق حسابك. إذا كان لديك رصيد في حسابك ، فاتصل بنا عبر الدردشة الحية وسنساعدك على سحب أموالك قبل إغلاق حسابك.", + "105871033": "يبدو أن عمرك في الوثيقة التي قدمتها أقل من 18 عامًا. يسمح لنا بتقديم خدماتنا فقط للعملاء الذين تزيد أعمارهم عن 18 عاما، لذلك سيتعين علينا إغلاق حسابك. إذا كان لديك رصيد في حسابك ، يُرجى التواصل معنا عبر الدردشة الحية وسنساعدك في سحب أموالك قبل إغلاق الحساب.", "107537692": "تنطبق هذه الحدود على صفقات الخيارات الخاصة بك فقط. على سبيل المثال، يشير <0>الحد الأقصى للخسارة الإجمالية إلى الخسائر في جميع تداولاتك على منصات تداول الخيارات.", "108916570": "المدة: {{duration}} يوم", "109073671": "الرجاء استخدام محفظة إلكترونية قد استخدمتها لعمليات الإيداع سابقًا. تأكد من أن المحفظة الإلكترونية تدعم عمليات السحب. يُرجى الاطلاع على قائمة المحافظ الإلكترونية التي تدعم عمليات السحب <0>هنا.", @@ -153,6 +153,7 @@ "157871994": "انتهت صلاحية الرابط", "158355408": "قد تكون بعض الخدمات غير متاحة مؤقتًا.", "160746023": "تيثر كرمز أومني (USDT) هو إصدار من تيثر يتم استضافته على طبقة أومني على بلوكشين بيتكوين.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "لم يتم التحقق من وجود كاميرا", "164112826": "تسمح لك هذه المجموعة بتحميل الكتل من عنوان URL إذا قمت بتخزينها على خادم بعيد، وسيتم تحميلها فقط عند تشغيل الروبوت الخاص بك.", "164564432": "الودائع غير متاحة مؤقتًا بسبب صيانة النظام. يمكنك عمل الودائع الخاصة بك عند اكتمال الصيانة.", @@ -187,7 +188,6 @@ "195136585": "مخطط Trading View", "195972178": "احصل على شخصية", "196810983": "إذا كانت المدة أكثر من 24 ساعة، فسيتم تطبيق الوقت النهائي وتاريخ انتهاء الصلاحية بدلاً من ذلك.", - "196998347": "نحتفظ بأموال العملاء في حسابات مصرفية منفصلة عن حساباتنا التشغيلية والتي لن تشكل، في حالة الإفلاس، جزءًا من أصول الشركة. هذا يلبي متطلبات <0>لجنة المقامرة لفصل أموال العملاء على المستوى: <1>حماية متوسطة.", "197190401": "تاريخ انتهاء الصلاحية", "201016731": "<0>عرض المزيد", "201091938": "30 يومًا", @@ -304,6 +304,7 @@ "312300092": "يقوم بقص المسافات داخل سلسلة أو نص معين.", "313741895": "تُرجع هذه الكتلة «True» إذا كانت الشمعة الأخيرة سوداء. يمكن وضعها في أي مكان على اللوحة باستثناء الكتلة الجذرية لمعايير التجارة.", "315306603": "لديك حساب لم يتم تعيين عملة له. يرجى اختيار عملة للتداول باستخدام هذا الحساب.", + "315516003": "المسافة إلى البقعة", "316694303": "هل الشمعة سوداء؟", "318705408": "حساب Demo Zero Spread", "318865860": "اغلاق", @@ -344,6 +345,7 @@ "351744408": "يختبر ما إذا كانت السلسلة النصية فارغة", "353731490": "تم إنجاز المهمة", "354945172": "إرسال المستند", + "355647475": "البقعة الحالية", "357477280": "لم يتم العثور على وجه", "357672069": "فشل التحقق من الدخل", "359053005": "يرجى إدخال اسم الرمز.", @@ -546,7 +548,6 @@ "567163880": "قم بإنشاء كلمة مرور {{platform}}", "567755787": "رقم التعريف الضريبي مطلوب.", "569057236": "في أي بلد تم إصدار المستند الخاص بك؟", - "571921777": "مستوى حماية الأموال", "572576218": "اللغات", "573173477": "هل الشمعة {{ input_candle }} سوداء؟", "575668969": "3. بالنسبة للتداولات التي تؤدي إلى ربح، ستتم زيادة حصة الصفقة التالية بمقدار 2 دولار أمريكي. سيستمر Deriv Bot في إضافة 2 دولار أمريكي لكل صفقة ناجحة. انظر A1.", @@ -956,7 +957,6 @@ "970915884": "رجل", "974888153": "High-Low", "975608902": "تداول عقود الفروقات، احصل على حساب Deriv Apps أولاً.", - "975668699": "أؤكد وأوافق على <0>شروط وأحكام {{company}}", "975747761": "جاري", "975950139": "بلد الإقامة", "977647549": "ملاحظة: يمكنك استخدام كلمة المرور هذه لجميع الحسابات {{platform}} الخاصة بك.", @@ -1431,6 +1431,7 @@ "1405584799": "مع الفاصل الزمني: {{ candle_interval_type }}", "1407191858": "دي تريدر/ DTrader", "1408844944": "انقر فوق رمز علامة الجمع لتوسيع وظائف هذه المجموعة.", + "1410016796": "أسفل البقعة:", "1411373212": "تحتوي كلمات المرور القوية على 8 أحرف على الأقل. اجمع بين الأحرف الكبيرة والصغيرة والأرقام والرموز.", "1411419173": "معدل النمو: {{ accumulator }}", "1412405902": "اطلع على الملاحظات المهمة", @@ -1754,6 +1755,7 @@ "1736292549": "تحديث الرمز البريدي", "1737352280": "لم يتم استدعاء Bot.init", "1738094481": "<0>المدة: الحركة اللحظية 1", + "1738206798": "فوق البقعة", "1738611950": "حول Reverse Martingale", "1738681493": "قم بإزالة النظارات، إذا لزم الأمر", "1739086943": "وول ستريت 30", @@ -1897,7 +1899,6 @@ "1866811212": "قم بالإيداع بعملتك المحلية عبر وكيل دفع معتمد ومستقل في بلدك.", "1867217564": "يجب أن يكون الفهرس عددًا صحيحًا موجبًا", "1867783237": "من الأعلى إلى الإغلاق", - "1869315006": "شاهد كيف نحمي أموالك لفتح حساب الصراف.", "1869486036": "تتلقى <0>عائدًا عند <0>انتهاء الصلاحية إذا لم يلمس السعر الفوري <0>الحاجز أو يخترقه خلال فترة العقد. إذا حدث ذلك، فسيتم إنهاء عقدك مبكرًا.", "1869787212": "Even", "1870933427": "التشفير", @@ -2811,7 +2812,6 @@ "-541392118": "لم تتم المصادقة على حسابك. يرجى تقديم <0>إثبات الهوية <1>وإثبات العنوان لمصادقة حسابك والوصول إلى الصراف الخاص بك.", "-599998434": "لا يمكنك إجراء تحويل الأموال لأن مستنداتك لا تزال قيد المراجعة. سنخطرك عبر البريد الإلكتروني في غضون 3 أيام بمجرد الموافقة على التحقق.", "-247122507": "أمين الصندوق الخاص بك مقفل. يرجى إكمال <0>التقييم المالي لفتحه.", - "-1443721737": "أمين الصندوق الخاص بك مقفل. تعرف <0>على كيفية حماية أموالك قبل المتابعة.", "-901712457": "تم تعطيل وصولك إلى Cashier مؤقتًا لأنك لم تقم بتعيين حد دوران لمدة 30 يومًا. يرجى الانتقال إلى <0>الاستبعاد الذاتي وتعيين حد الدوران لمدة 30 يومًا.", "-166472881": "<0>تفاصيلك الشخصية غير مكتملة. يرجى الانتقال إلى إعدادات حسابك وإكمال تفاصيلك الشخصية لتمكين عمليات الإيداع والسحب.", "-666905139": "الإيداعات مقفلة", @@ -2828,7 +2828,6 @@ "-1675848843": "خطأ", "-283017497": "أعد المحاولة", "-1294455996": "برنامج Deriv P2P غير متوفر", - "-1838982691": "غير معروف", "-532693866": "حدث خطأ ما. يرجى تحديث الصفحة والمحاولة مرة أخرى.", "-1196049878": "السطر الأول من عنوان المنزل", "-1326406485": "الرمز البريدي/ZIP", @@ -2837,9 +2836,9 @@ "-1459042184": "قم بتحديث تفاصيلك الشخصية", "-1603543465": "لا يمكننا التحقق من صحة تفاصيلك الشخصية نظرًا لوجود بعض المعلومات المفقودة.", "-614516651": "هل تحتاج إلى مساعدة؟ <0>اتصل بنا.", - "-203002433": "قم بالإيداع الآن", "-720315013": "ليس لديك أموال في حساب {{currency}} الخاص بك", "-2052373215": "يرجى إجراء إيداع لاستخدام هذه الميزة.", + "-203002433": "قم بالإيداع الآن", "-379487596": "{{selected_percentage}}% من الرصيد المتاح ({{format_amount}} {{currency__display_code}})", "-1957498244": "أكثر", "-1059419768": "الملاحظات", @@ -3401,7 +3400,6 @@ "-705744796": "تجاوز رصيد حسابك التجريبي الحد الأقصى، ولن تتمكن من تنفيذ صفقات جديدة. يرجى إعادة ضبط الرصيد للمتابعة في التداول من حسابك التجريبي.", "-2063700253": "معاق", "-1585069798": "يرجى النقر فوق الارتباط التالي لإكمال اختبار الملاءمة.", - "-1287141934": "اكتشف المزيد", "-367759751": "لم يتم التحقق من حسابك", "-596690079": "هل تستمتع باستخدام Deriv؟", "-265932467": "نحن نحب أن نسمع أفكارك", @@ -3815,6 +3813,13 @@ "-99964540": "عندما يصل ربحك إلى المبلغ المحدد أو يتجاوزه، سيتم إغلاق صفقتك تلقائيًا.", "-542594338": "الحد الأقصى للدفع", "-1622900200": "ممكّنة", + "-1769815370": "ستكون الحواجز ثابتة عند السعر المحدد.", + "-2062696378": "فوق البقعة:", + "-650959802": "ستتحرك الحواجز بالنسبة للبقعة الحالية، مع الحفاظ على مسافة ثابتة فوقها.", + "-445997898": "ستتحرك الحواجز بالنسبة للبقعة الحالية، مع الحفاظ على مسافة ثابتة أسفلها.", + "-1116872874": "سعر ثابت:", + "-635746838": "أسفل البقعة", + "-548979988": "سعر ثابت", "-2131851017": "معدل النمو", "-339236213": "Multiplier", "-1396928673": "إدارة المخاطر", diff --git a/packages/translations/src/translations/bn.json b/packages/translations/src/translations/bn.json index 0a798dbd90f0..42bbba5e31ac 100644 --- a/packages/translations/src/translations/bn.json +++ b/packages/translations/src/translations/bn.json @@ -153,6 +153,7 @@ "157871994": "লিংকের মেয়াদ শেষ", "158355408": "কিছু পরিষেবা সাময়িকভাবে অনুপলব্ধ হতে পারে।", "160746023": "একটি ওমনি টোকেন (ইউএসডিটি) হিসাবে টিথার একটি সংস্করণ যা বিটকয়েন ব্লকচেইনের ওমনি লেয়ারে হোস্ট করা হয়।", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "ক্যামেরা সনাক্ত হয়নি", "164112826": "এই ব্লকটি আপনাকে একটি URL থেকে ব্লক লোড করতে দেয় যদি তাদের একটি দূরবর্তী সার্ভারে সংরক্ষণ করেন এবং আপনার বট রান শুধুমাত্র তখনই লোড হবে।", "164564432": "সিস্টেম রক্ষণাবেক্ষণের কারণে আমানত সাময়িকভাবে অনুপলব্ধ। রক্ষণাবেক্ষণ সম্পূর্ণ হলে ডিপোজিট করতে পারেন।", @@ -187,7 +188,6 @@ "195136585": "Trading View চার্ট", "195972178": "অক্ষর পান", "196810983": "যদি সময়কাল 24 ঘণ্টার বেশি হয়, তবে এর পরিবর্তে কাট-অফ সময় এবং মেয়াদ শেষের তারিখ প্রযোজ্য হবে।", - "196998347": "আমাদের অপারেশনাল অ্যাকাউন্ট থেকে পৃথক ব্যাংক অ্যাকাউন্টে গ্রাহক তহবিল ধরে থাকি, যা দেউলিয়াতা ঘটলে, কোম্পানির সম্পদের অংশ গঠন করবে না। এটি স্তরের গ্রাহক তহবিলের পৃথকীকরণের জন্য <0>জুয়া কমিশনের প্রয়োজনীয়তাগুলি পূরণে: <1>মাঝারি সুরক্ষা।", "197190401": "মেয়াদ উত্তীর্ণের তারিখ", "201016731": "<0>আরো দেখুন", "201091938": "30 দিন", @@ -304,6 +304,7 @@ "312300092": "একটি প্রদত্ত স্ট্রিং বা পাঠ্যের মধ্যে স্পেসগুলি ট্রিম করে।", "313741895": "শেষ মোমবাতি কালো হলে এই ব্লকটি “True” ফেরত দেয়। এটি ট্রেড প্যারামিটার রুট ব্লক ব্যতীত ক্যানভাসে যে কোন জায়গায় স্থাপন করা যেতে পারে।", "315306603": "আপনার এমন একটি অ্যাকাউন্ট আছে যার কারেন্সি নির্ধারিত নেই। অনুগ্রহ করে এই অ্যাকাউন্টের সাথে ট্রেড করার জন্য একটি মুদ্রা নির্বাচন করুন।", + "315516003": "বর্তমান স্পট থেকে দূরত্ব", "316694303": "মোমবাতি কি কালো?", "318705408": "ডেমো জিরো স্প্রেড", "318865860": "বন্ধ", @@ -344,6 +345,7 @@ "351744408": "প্রদত্ত টেক্সট স্ট্রিং ফাঁকা থাকলে পরীক্ষা করা হবে", "353731490": "কাজ সম্পন্ন", "354945172": "নথি জমা দিন", + "355647475": "বর্তমান স্পট", "357477280": "কোন মুখ পাওয়া যায়নি", "357672069": "আয় যাচাইকরণ ব্যর্থ", "359053005": "অনুগ্রহ করে একটি টোকেনের নাম লিখুন।", @@ -546,7 +548,6 @@ "567163880": "একটি {{platform}} পাসওয়ার্ড তৈরি করুন", "567755787": "ট্যাক্স আইডেন্টিফিকেশন নাম্বার প্রয়োজন।", "569057236": "কোন দেশে আপনার নথি জারি করা হয়েছিল?", - "571921777": "ফান্ড সুরক্ষা স্তর", "572576218": "ভাষাসমূহ", "573173477": "মোমবাতি {{ input_candle }} কি কালো?", "575668969": "3. যে ট্রেডের ফলে লাভ হয়, পরবর্তী ট্রেডের জন্য শেয়ার 2 USD বৃদ্ধি করা হবে। Deriv Bot প্রতিটি সফল ট্রেডের জন্য 2 USD যোগ করতে থাকবে। A1 দেখুন।", @@ -956,7 +957,6 @@ "970915884": "একটি", "974888153": "High-Low", "975608902": "CFD ট্রেড করতে, প্রথমে একটি Deriv Apps অ্যাকাউন্ট পান।", - "975668699": "আমি নিশ্চিতকরণ এবং {{company}} এর <0>শর্তাবলী স্বীকার", "975747761": "চলমান", "975950139": "বসবাসের দেশ", "977647549": "দ্রষ্টব্য: আপনি আপনার সমস্ত {{platform}} অ্যাকাউন্টের জন্য এই পাসওয়ার্ডটি ব্যবহার করতে পারেন।", @@ -1431,6 +1431,7 @@ "1405584799": "ব্যবধান সহ: {{ candle_interval_type }}", "1407191858": "ডি ট্রেডার", "1408844944": "এই ব্লকের কার্যকারিতা প্রসারিত করতে প্লাস আইকনে ক্লিক করুন।", + "1410016796": "Low স্পট:", "1411373212": "স্ট্রং পাসওয়ার্ডগুলিতে কমপক্ষে 8 টি অক্ষর থাকে, বড় হাতের এবং ছোট হাতের অক্ষর, সংখ্যা এবং চিহ্নগুলি একত্রিত করে।", "1411419173": "বৃদ্ধির হার: {{ accumulator }}", "1412405902": "গুরুত্বপূর্ণ নোট দেখুন", @@ -1754,6 +1755,7 @@ "1736292549": "পোস্টাল কোড হালনাগাদ", "1737352280": "Bot.init বলা হয় না", "1738094481": "<0>সময়কাল : টিকস 1", + "1738206798": "Above spot", "1738611950": "Reverse Martingale সম্পর্কে", "1738681493": "প্রয়োজন হলে আপনার চশমা সরান", "1739086943": "ওয়াল স্ট্রিট 30", @@ -1897,7 +1899,6 @@ "1866811212": "আপনার দেশে অনুমোদিত, স্বাধীন পেমেন্ট এজেন্টের মাধ্যমে আপনার স্থানীয় মুদ্রায় ডিপোজিট করুন।", "1867217564": "সূচক একটি ধনাত্মক পূর্ণসংখ্যা হতে হবে", "1867783237": "উচ্চ-থেকে-বন্ধ", - "1869315006": "ক্যাশিয়ার আনলক করার জন্য আমরা কীভাবে আপনার তহবিলগুলি রক্ষা করি তা দেখুন।", "1869486036": "চুক্তির সময়কালে স্পট মূল্য কখনও স্পর্শ না করলে বা লঙ্ঘন না করলে <0>মেয়াদ শেষ হলে আপনি একটি <0>পেআউট পাবেন। যদি তা হয়, আপনার চুক্তি তাড়াতাড়ি শেষ হয়ে যাবে।", "1869787212": "Even", "1870933427": "ক্রিপ্টো", @@ -2811,7 +2812,6 @@ "-541392118": "আপনার অ্যাকাউন্ট প্রমাণীকরণ করা হয়নি। আপনার অ্যাকাউন্ট প্রমাণীকরণ এবং আপনার ক্যাশিয়ার অ্যাক্সেস করার জন্য আপনার <0>পরিচয় <1>প্রমাণ এবং ঠিকানা প্রমাণ জমা দিন।", "-599998434": "আপনার নথিগুলি এখনও পর্যালোচনাধীন হওয়ায় আপনি তহবিল স্থানান্তর করতে পারবেন না। আপনার যাচাইকরণ অনুমোদিত হওয়ার পরে আমরা আপনাকে 3 দিনের মধ্যে ইমেইলের মাধ্যমে অবহিত করব।", "-247122507": "তোমার ক্যাশিয়ার লক হয়ে গেছে। এটি আনলক করার জন্য দয়া করে <0>আর্থিক মূল্যায়ন সম্পূর্ণ করুন।", - "-1443721737": "তোমার ক্যাশিয়ার লক হয়ে গেছে। আপনার অগ্রসর হওয়ার আগে <0>আমরা কীভাবে আপনার তহবিল সুরক্ষিত রাখি তা দেখুন।", "-901712457": "আপনি আপনার 30-দিনের টার্নওভার সীমা সেট না করার কারণে ক্যাশিয়ারের কাছে আপনার অ্যাক্সেস সাময়িকভাবে অক্ষম করা হয়েছে। অনুগ্রহ করে <0>স্ব-বর্জন এ যান এবং আপনার 30-দিনের টার্নওভার সীমা সেট করুন।", "-166472881": "আপনার <0>ব্যক্তিগত বিবরণ অসম্পূর্ণ। অনুগ্রহ করে আপনার অ্যাকাউন্ট সেটিংসে যান এবং ডিপোজিট এবং তোলার সক্রিয় করার জন্য আপনার ব্যক্তিগত বিবরণ সম্পূর্ণ করুন।", "-666905139": "ডিপোজিট লক করা আছে", @@ -2828,7 +2828,6 @@ "-1675848843": "ত্রুটি", "-283017497": "পুনরায় চেষ্টা", "-1294455996": "Deriv P2P অনুপলব্ধ", - "-1838982691": "অজানা", "-532693866": "কিছু একটা ভুল হয়েছে। অনুগ্রহ করে পৃষ্ঠাটি রিফ্রেশ করুন এবং আবার চেষ্টা করুন।", "-1196049878": "হোম অ্যাড্রেসের প্রথম লাইন", "-1326406485": "পোস্টাল কোড/জিপ", @@ -2837,9 +2836,9 @@ "-1459042184": "আপনার ব্যক্তিগত বিবরণ হালনাগাদ করুন", "-1603543465": "কিছু তথ্য অনুপস্থিত থাকায় আমরা আপনার ব্যক্তিগত বিবরণ যাচাই করতে পারি না।", "-614516651": "সাহায্য দরকার? <0>আমাদের সাথে যোগাযোগ করুন।", - "-203002433": "এখনই ডিপোজিট করুন", "-720315013": "আপনার {{currency}} অ্যাকাউন্টে আপনার কোন তহবিল নেই", "-2052373215": "এই বৈশিষ্ট্যটি ব্যবহার করার জন্য অনুগ্রহ করে একটি ডিপোজিট করুন।", + "-203002433": "এখনই ডিপোজিট করুন", "-379487596": "উপলব্ধ ব্যালেন্সের {{selected_percentage}}% ({{format_amount}} {{currency__display_code}})", "-1957498244": "অধিক", "-1059419768": "নোট", @@ -3401,7 +3400,6 @@ "-705744796": "আপনার ডেমো অ্যাকাউন্ট ব্যালেন্স সর্বোচ্চ সীমা পৌঁছেছে, এবং আপনি নতুন ট্রেড স্থাপন করতে সক্ষম হবে না। আপনার ডেমো অ্যাকাউন্ট থেকে ট্রেডিং চালিয়ে যেতে আপনার ব্যালেন্স রিসেট করুন।", "-2063700253": "নিষ্ক্রিয়", "-1585069798": "আপনার উপযুক্ততা পরীক্ষা সম্পন্ন করার জন্য নিম্নলিখিত লিঙ্কে ক্লিক করুন।", - "-1287141934": "আরও জানুন", "-367759751": "আপনার অ্যাকাউন্ট যাচাই করা হয়নি", "-596690079": "Deriv ব্যবহার কি উপভোগ করছেন?", "-265932467": "আমরা আপনার চিন্তা শুনতে চাই", @@ -3815,6 +3813,13 @@ "-99964540": "যখন আপনার লাভ সেট পরিমাণ পৌঁছায় বা অতিক্রম করে, তখন আপনার ট্রেড স্বয়ংক্রিয়ভাবে বন্ধ হবে।", "-542594338": "সর্বোচ্চ পেআউট", "-1622900200": "সক্ষম", + "-1769815370": "বিঘ্নটি সেট করা মূল্য অনুযায়ী স্থির থাকবে।", + "-2062696378": "Above spot:", + "-650959802": "বিঘ্নটি বর্তমান স্পটের আপেক্ষিকভাবে চলবে, সেট করা দূরত্ব উপরে বজায় রেখে।", + "-445997898": "বিঘ্নটি বর্তমান স্পটের আপেক্ষিকভাবে চলবে, সেট করা দূরত্ব নিচে বজায় রেখে।", + "-1116872874": "স্থির মূল্য:", + "-635746838": "Low স্পট", + "-548979988": "স্থির মূল্য", "-2131851017": "বৃদ্ধির হার", "-339236213": "Multiplier", "-1396928673": "ঝুঁকি পরিচালনা", diff --git a/packages/translations/src/translations/de.json b/packages/translations/src/translations/de.json index 30b2f7099100..f3611df75dce 100644 --- a/packages/translations/src/translations/de.json +++ b/packages/translations/src/translations/de.json @@ -153,6 +153,7 @@ "157871994": "Link abgelaufen", "158355408": "Einige Dienste können vorübergehend nicht verfügbar sein.", "160746023": "Tether als Omni-Token (USDT) ist eine Version von Tether, die auf der Omni-Schicht der Bitcoin-Blockchain gehostet wird.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Kamera wurde nicht erkannt", "164112826": "Mit diesem Block können Sie Blöcke von einer URL laden, wenn Sie sie auf einem Remote-Server gespeichert haben. Sie werden nur geladen, wenn Ihr Bot ausgeführt wird.", "164564432": "Einzahlungen sind aufgrund von Systemwartungsarbeiten vorübergehend nicht verfügbar. Sie können Ihre Einzahlungen tätigen, wenn die Wartung abgeschlossen ist.", @@ -187,7 +188,6 @@ "195136585": "TradingView-Diagramm", "195972178": "Holen Sie sich den Charakter", "196810983": "Beträgt die Dauer mehr als 24 Stunden, gelten stattdessen die Annahmeschlusszeit und das Verfallsdatum.", - "196998347": "Wir halten die Kundengelder auf Bankkonten getrennt von unseren Betriebskonten, die im Falle einer Insolvenz nicht zum Vermögen des Unternehmens gehören würden. Dies entspricht den Anforderungen der <0>Gambling Commission für die Trennung von Kundengeldern auf dem Niveau: <1>mittlerer Schutz.", "197190401": "Ablaufdatum", "201016731": "<0>Mehr sehen", "201091938": "30 Tage", @@ -304,6 +304,7 @@ "312300092": "Schneidet die Leerzeichen innerhalb einer bestimmten Zeichenfolge oder eines Textes ab.", "313741895": "Dieser Block gibt \"True\" zurück, wenn die letzte Kerze schwarz ist. Es kann an einer beliebigen Stelle auf der Leinwand platziert werden, außer im Rootblock der Handelsparameter.", "315306603": "Sie haben ein Konto, dem keine Währung zugewiesen ist. Bitte wählen Sie eine Währung aus, um mit diesem Konto zu handeln.", + "315516003": "Entfernung zum aktuellen Spot", "316694303": "Ist die Kerze schwarz?", "318705408": "Demo Zero Spread", "318865860": "nahe", @@ -344,6 +345,7 @@ "351744408": "Testet, ob eine bestimmte Textzeichenfolge leer ist", "353731490": "Arbeit erledigt", "354945172": "Dokument einreichen", + "355647475": "Aktueller Spot", "357477280": "Kein Gesicht gefunden", "357672069": "Einkommensüberprüfung fehlgeschlagen", "359053005": "Bitte geben Sie einen Token-Namen ein.", @@ -546,7 +548,6 @@ "567163880": "Erstellen Sie ein neues {{platform}}-Passwort", "567755787": "Steuer-Identifikationsnummer ist erforderlich.", "569057236": "In welchem Land wurde Ihr Dokument ausgestellt?", - "571921777": "Schutzniveau der Fonds", "572576218": "Sprachen", "573173477": "Ist Kerze {{ input_candle }} schwarz?", "575668969": "3. Für Trades, die zu einem Gewinn führen, wird der Einsatz für den nächsten Trade um 2 USD erhöht. Deriv Bot wird weiterhin 2 USD für jeden erfolgreichen Handel hinzufügen. Siehe A1.", @@ -956,7 +957,6 @@ "970915884": "EIN", "974888153": "High-Low", "975608902": "Um CFDs zu handeln, müssen Sie zunächst ein Derivat Apps-Konto einrichten.", - "975668699": "Ich bestätige und akzeptiere die <0>Allgemeinen Geschäftsbedingungen von {{company}}", "975747761": "Fortlaufend", "975950139": "Land des Wohnsitzes", "977647549": "Hinweis: Sie können dieses Passwort für alle Ihre {{platform}}-Konten verwenden.", @@ -1431,6 +1431,7 @@ "1405584799": "mit Intervall: {{ candle_interval_type }}", "1407191858": "D-Händler", "1408844944": "Klicken Sie auf das Plus-Symbol, um die Funktionalität dieses Blocks zu erweitern.", + "1410016796": "Low Spot:", "1411373212": "Starke Passwörter enthalten mindestens 8 Zeichen. Kombinieren Sie Groß- und Kleinbuchstaben, Zahlen und Symbole.", "1411419173": "Wachstumsrate: {{ accumulator }}", "1412405902": "Siehe wichtige Hinweise", @@ -1754,6 +1755,7 @@ "1736292549": "Postleitzahl aktualisieren", "1737352280": "Bot.init wird nicht aufgerufen", "1738094481": "<0>Dauer: Ticks 1", + "1738206798": "Above spot", "1738611950": "Über Reverse Martingale", "1738681493": "Nehmen Sie gegebenenfalls Ihre Brille ab", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "Zahlen Sie in Ihrer Landeswährung über eine autorisierte, unabhängige Zahlungsstelle in Ihrem Land ein.", "1867217564": "Der Index muss eine positive Ganzzahl sein", "1867783237": "High-to-Close", - "1869315006": "Erfahren Sie, wie wir Ihr Geld schützen, um den Kassenbereich freizuschalten.", "1869486036": "Sie erhalten bei <0>Fälligkeit eine <0>Auszahlung, wenn der Kassakurs die <0>Barriere während der Vertragslaufzeit nicht berührt oder durchbricht. Sollte dies der Fall sein, wird Ihr Kontrakt vorzeitig aufgelöst.", "1869787212": "Even", "1870933427": "Krypto", @@ -2811,7 +2812,6 @@ "-541392118": "Ihr Konto wurde nicht authentifiziert. Bitte reichen Sie Ihren <0>Identitäts - und <1>Adressnachweis ein, um Ihr Konto zu authentifizieren und auf Ihre Kasse zuzugreifen.", "-599998434": "Sie können keine Überweisung tätigen, da Ihre Dokumente noch geprüft werden. Wir werden Sie innerhalb von 3 Tagen per E-Mail benachrichtigen, sobald Ihre Überprüfung genehmigt ist.", "-247122507": "Ihr Kassierer ist gesperrt. Bitte füllen Sie die <0>finanzielle Bewertung aus, um sie freizuschalten.", - "-1443721737": "Ihr Kassierer ist gesperrt. Informieren Sie <0>sich, wie wir Ihr Geld schützen, bevor Sie fortfahren.", "-901712457": "Ihr Zugang zum Kassenbereich wurde vorübergehend deaktiviert, da Sie Ihr 30-tägiges Umsatzlimit nicht festgelegt haben. Bitte gehen Sie zu <0>Selbstausschluss und legen Sie Ihr 30-tägiges Umsatzlimit fest.", "-166472881": "Ihre <0>persönlichen Daten sind unvollständig. Bitte gehen Sie zu Ihren Kontoeinstellungen und geben Sie Ihre persönlichen Daten ein, um Ein- und Auszahlungen zu ermöglichen.", "-666905139": "Einzahlungen sind gesperrt", @@ -2828,7 +2828,6 @@ "-1675848843": "Fehler", "-283017497": "Versuchen Sie es erneut", "-1294455996": "Deriv P2P nicht verfügbar", - "-1838982691": "UNBEKANNT", "-532693866": "Es ist ein Fehler aufgetreten. Bitte aktualisieren Sie die Seite und versuchen Sie es erneut.", "-1196049878": "Erste Zeile der Privatadresse", "-1326406485": "PLZ/PLZ", @@ -2837,9 +2836,9 @@ "-1459042184": "Aktualisieren Sie Ihre persönlichen Daten", "-1603543465": "Wir können Ihre persönlichen Daten nicht überprüfen, da einige Informationen fehlen.", "-614516651": "Brauchen Sie Hilfe? <0>Nehmen Sie Kontakt mit uns auf.", - "-203002433": "Jetzt einzahlen", "-720315013": "Sie haben kein Guthaben auf Ihrem {{currency}}-Konto", "-2052373215": "Bitte tätigen Sie eine Einzahlung, um diese Funktion nutzen zu können.", + "-203002433": "Jetzt einzahlen", "-379487596": "{{selected_percentage}}% des verfügbaren Saldos ({{format_amount}} {{currency__display_code}})", "-1957498244": "mehr", "-1059419768": "Hinweise", @@ -3401,7 +3400,6 @@ "-705744796": "Ihr Demo-Kontoguthaben hat das maximale Limit erreicht und Sie können keine neuen Trades tätigen. Setzen Sie Ihr Guthaben zurück, um den Handel von Ihrem Demo-Konto aus fortzusetzen.", "-2063700253": "Behinderte", "-1585069798": "Bitte klicken Sie auf den folgenden Link, um Ihren Angemessenheitstest abzuschließen.", - "-1287141934": "Finde mehr heraus", "-367759751": "Ihr Konto wurde nicht verifiziert", "-596690079": "Haben Sie Spaß bei der Verwendung von Deriv?", "-265932467": "Wir würden uns freuen, Ihre Gedanken zu hören", @@ -3815,6 +3813,13 @@ "-99964540": "Wenn Ihr Gewinn den festgelegten Betrag erreicht oder überschreitet, wird Ihr Handel automatisch geschlossen.", "-542594338": "Max. Auszahlung", "-1622900200": "Aktiviert", + "-1769815370": "Die Barriere wird zum festgelegten Preis fixiert.", + "-2062696378": "Above spot:", + "-650959802": "Die Barriere wird relativ zum aktuellen Spot verschoben, wobei ein fester Abstand darüber eingehalten wird.", + "-445997898": "Die Barriere wird relativ zum aktuellen Spot verschoben, wobei ein fester Abstand darunter eingehalten wird.", + "-1116872874": "Festpreis:", + "-635746838": "Below spot", + "-548979988": "Festpreis", "-2131851017": "Wachstumsrate", "-339236213": "Multiplier", "-1396928673": "Risikomanagement", diff --git a/packages/translations/src/translations/es.json b/packages/translations/src/translations/es.json index 4c448a939670..9ea81e857a67 100644 --- a/packages/translations/src/translations/es.json +++ b/packages/translations/src/translations/es.json @@ -153,6 +153,7 @@ "157871994": "Enlace expirado", "158355408": "Algunos servicios pueden no estar disponibles temporalmente.", "160746023": "Tether como token Omni (USDT) es una versión de Tether que está alojada en la capa Omni de la cadena de bloques de Bitcoin.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Cámara no detectada", "164112826": "Este bloque le permite cargar bloques desde una URL si los tiene almacenados en un servidor remoto, y se cargarán solo cuando se ejecute su bot.", "164564432": "Los depósitos no están disponibles temporalmente debido al mantenimiento del sistema. Puede realizar sus depósitos cuando se complete el mantenimiento.", @@ -187,7 +188,6 @@ "195136585": "Gráfico de Trading View", "195972178": "Obtener caracter", "196810983": "Si la duración es superior a 24 horas, la Hora límite y la Fecha de caducidad se aplicarán en su lugar.", - "196998347": "Mantenemos los fondos de los clientes en cuentas bancarias separadas de nuestras cuentas operativas, las cuales, en caso de insolvencia, no formarán parte de los activos de la empresa. Esto cumple con los requisitos de la <0>Comisión de Juego para la segregación de los fondos de los clientes a un nivel de: <1>protección media.", "197190401": "Fecha de caducidad", "201016731": "<0>Ver más", "201091938": "30 días", @@ -304,6 +304,7 @@ "312300092": "Recorta los espacios dentro de una cadena o texto dado.", "313741895": "Este bloque devuelve un valor booleano de \"verdadero\" si la última vela es negra. Se puede colocar en cualquier lugar del lienzo, excepto dentro del bloque raíz de parámetros de trading.", "315306603": "Tiene una cuenta sin una moneda asignada. Elija una moneda para poder operar con esa cuenta.", + "315516003": "Distancia al punto actual", "316694303": "¿La vela es negra?", "318705408": "Zero Spread Demo", "318865860": "cerrar", @@ -344,6 +345,7 @@ "351744408": "Comprueba si una cadena de texto dada está vacía", "353731490": "Trabajo hecho", "354945172": "Enviar documento", + "355647475": "Inversión actual", "357477280": "Rostro no encontrado", "357672069": "Verificación de ingresos fallida", "359053005": "Por favor ingrese el nombre del token.", @@ -546,7 +548,6 @@ "567163880": "Crear una contraseña {{platform}}", "567755787": "Se requiere el Número de Identificación Fiscal.", "569057236": "¿En qué país se emitió su documento?", - "571921777": "Nivel de protección de fondos", "572576218": "Idiomas", "573173477": "¿La vela {{ input_candle }} es negra?", "575668969": "3. En el caso de las operaciones que generen ganancias, la inversión de la próxima operación se incrementará en 2 USD. Deriv Bot seguirá añadiendo 2 USD por cada operación exitosa. Consulte A1.", @@ -956,7 +957,6 @@ "970915884": "UN", "974888153": "High-Low", "975608902": "Para operar CFD, primero obtenga una cuenta de Deriv Apps.", - "975668699": "Confirmo y acepto <0>los Términos y Condiciones de {{company}}", "975747761": "En curso", "975950139": "País de residencia", "977647549": "Nota: Puede utilizar esta contraseña para todas sus cuentas de {{platform}}.", @@ -1431,6 +1431,7 @@ "1405584799": "con intervalo: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "Haga clic en el ícono más para ampliar la funcionalidad de este bloque.", + "1410016796": "Punto Low:", "1411373212": "Las contraseñas seguras contienen al menos 8 caracteres. Combinan letras mayúsculas y minúsculas, números y símbolos.", "1411419173": "Tasa de crecimiento: {{ accumulator }}", "1412405902": "Ver notas importantes", @@ -1754,6 +1755,7 @@ "1736292549": "Actualizar código postal", "1737352280": "Bot.init no fue llamado", "1738094481": "<0>Duración: Ticks 1", + "1738206798": "Above spot", "1738611950": "Acerca de Reverse Martingale", "1738681493": "Quítese las gafas, si es necesario", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "Deposite en su moneda local a través de un agente de pago independiente autorizado en su país.", "1867217564": "El índice debe ser un número entero positivo", "1867783237": "High-to-Close", - "1869315006": "Vea cómo protegemos sus fondos para desbloquear el cajero.", "1869486036": "Recibirá un <0>pago en la <0>expiración si el precio al contado nunca toca o supera la <0>barrera durante el periodo del contrato. Si lo hace, su contrato finalizará anticipadamente.", "1869787212": "Even", "1870933427": "Cripto", @@ -2811,7 +2812,6 @@ "-541392118": "Su cuenta no ha sido autenticada. Envíe su <0>prueba de identidad y <1>prueba de domicilio para autenticar su cuenta y acceder a su cajero.", "-599998434": "No puede realizar una transferencia de fondos porque sus documentos aún están siendo revisados. Le notificaremos por correo electrónico en un plazo de 3 días una vez aprobada su verificación.", "-247122507": "Su cajero está bloqueado. Complete la <0>evaluación financiera para desbloquearlo.", - "-1443721737": "Su cajero está bloqueado. Vea <0>cómo protegemos sus fondos antes de continuar.", "-901712457": "Su acceso al Cajero se ha desactivado temporalmente porque no ha establecido su límite de facturación de 30 días. Vaya a <0>Autoexclusión y establezca su límite de facturación de 30 días.", "-166472881": "Sus <0>datos personales están incompletos. Vaya a la configuración de su cuenta y complete sus datos personales para permitir depósitos y retiros.", "-666905139": "Los depósitos están bloqueados", @@ -2828,7 +2828,6 @@ "-1675848843": "Error", "-283017497": "Reintentar", "-1294455996": "Deriv P2P no disponible", - "-1838982691": "DESCONOCIDO", "-532693866": "Algo ha ido mal. Por favor, actualice la página e inténtelo de nuevo.", "-1196049878": "Primera línea de dirección", "-1326406485": "Código postal / CP", @@ -2837,9 +2836,9 @@ "-1459042184": "Actualice sus datos personales", "-1603543465": "No podemos validar sus datos personales porque falta información.", "-614516651": "¿Necesita ayuda? <0>Contáctenos.", - "-203002433": "Deposite ahora", "-720315013": "No tiene fondos en su cuenta {{currency}}", "-2052373215": "Haga un depósito para usar esta función.", + "-203002433": "Deposite ahora", "-379487596": "{{selected_percentage}}% del saldo disponible ({{format_amount}} {{currency__display_code}})", "-1957498244": "más", "-1059419768": "Notas", @@ -3401,7 +3400,6 @@ "-705744796": "El saldo de su cuenta demo ha alcanzado el límite máximo y no podrá realizar nuevas operaciones. Restablezca su saldo para continuar operando desde su cuenta demo.", "-2063700253": "desactivado", "-1585069798": "Haga clic en el siguiente enlace para completar su Prueba de idoneidad.", - "-1287141934": "Obtenga más información", "-367759751": "Su cuenta aún no ha sido verificada", "-596690079": "¿Disfruta usando Deriv?", "-265932467": "Nos encantaría conocer su opinión", @@ -3815,6 +3813,13 @@ "-99964540": "Cuando su ganancia alcance o supere esta cantidad fijada, su operación se cerrará automáticamente.", "-542594338": "Pago máximo", "-1622900200": "Activado", + "-1769815370": "La barrera se fijará al precio establecido.", + "-2062696378": "Above spot:", + "-650959802": "La barrera se moverá en relación con la inversión actual, manteniendo una distancia fija por encima de ella.", + "-445997898": "La barrera se moverá en relación con la inversión actual, manteniendo una distancia fija por debajo de ella.", + "-1116872874": "Precio fijo:", + "-635746838": "Punto Low", + "-548979988": "Precio fijo", "-2131851017": "Tasa de crecimiento", "-339236213": "Multiplier", "-1396928673": "Gestión de riesgos", diff --git a/packages/translations/src/translations/fr.json b/packages/translations/src/translations/fr.json index 18ab239f1457..0b6c2d088cb3 100644 --- a/packages/translations/src/translations/fr.json +++ b/packages/translations/src/translations/fr.json @@ -153,6 +153,7 @@ "157871994": "Lien expiré", "158355408": "Certains services peuvent être temporairement indisponibles.", "160746023": "Tether en tant que jeton Omni (USDT) est une version de Tether qui est hébergée sur la couche Omni de la blockchain Bitcoin.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Caméra non détectée", "164112826": "Ce bloc vous permet de charger des blocs à partir d'une URL si vous les avez stockés sur un serveur distant, et ils ne seront chargés que lorsque votre bot s'exécutera.", "164564432": "Les dépôts sont temporairement indisponibles en raison d'une maintenance du système. Vous pourrez effectuer vos dépôts lorsque la maintenance sera terminée.", @@ -187,7 +188,6 @@ "195136585": "Affichage du graphique Trading View", "195972178": "Obtenez le caractère", "196810983": "Si la durée est supérieure à 24 heures, l'heure limite et la date d'expiration s'appliquent.", - "196998347": "Nous détenons les fonds de nos clients sur des comptes bancaires séparés de nos comptes opérationnels qui ne feraient pas, en cas d'insolvabilité, partie des actifs de la société. Cela répond aux exigences de la <0>Gambling Commission en matière de ségrégation des fonds des clients au niveau: <1>protection moyenne.", "197190401": "Date d’expiration", "201016731": "<0>Voir plus", "201091938": "30 jours", @@ -304,6 +304,7 @@ "312300092": "Découpe les espaces dans une chaîne ou un texte donné.", "313741895": "Ce bloc renvoie «Vrai» si la dernière bougie est noire. Il peut être placé n'importe où sur le canevas, sauf dans le bloc racine des paramètres du Trade.", "315306603": "Vous avez un compte auquel aucune devise n'est affectée. Veuillez choisir une devise pour trader avec ce compte.", + "315516003": "Distance par rapport au point actuel", "316694303": "La bougie est-elle noire ?", "318705408": "Demo Zero Spread", "318865860": "clôture", @@ -344,6 +345,7 @@ "351744408": "Teste si une chaîne de texte donnée est vide", "353731490": "Travail accompli", "354945172": "Soumettre le document", + "355647475": "Point actuel", "357477280": "Aucun visage trouvé", "357672069": "Échec de la vérification des revenus", "359053005": "Veuillez entrer un nom de token.", @@ -546,7 +548,6 @@ "567163880": "Créer un mot de passe {{platform}}", "567755787": "Le numéro fiscal est requis.", "569057236": "Dans quel pays votre document a-t-il été délivré ?", - "571921777": "Niveau de protection des fonds", "572576218": "Langues", "573173477": "La bougie {{ input_candle }} est-elle noire?", "575668969": "3. Pour les transactions qui se soldent par un profit, la mise du prochain contrat sera augmentée de 2 USD. Deriv Bot continuera à ajouter 2 USD à chaque transaction fructueuse. Voir A1.", @@ -956,7 +957,6 @@ "970915884": "UN", "974888153": "High-Low", "975608902": "Pour négocier des CFD, obtenez d’abord un compte Deriv Apps.", - "975668699": "Je confirme et j'accepte les <0>conditions générales de {{company}}", "975747761": "En cours", "975950139": "Pays de résidence", "977647549": "Note: Vous pouvez utiliser ce mot de passe pour tous vos comptes {{platform}}.", @@ -1431,6 +1431,7 @@ "1405584799": "avec intervalle: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "Cliquez sur l'icône plus (+) pour étendre les fonctionnalités de ce bloc.", + "1410016796": "En dessous du point :", "1411373212": "Les mots de passe forts contiennent au moins 8 caractères. Combinez des lettres majuscules et minuscules, des chiffres et des symboles.", "1411419173": "Taux de croissance : {{ accumulator }}", "1412405902": "Voir les remarques importantes", @@ -1754,6 +1755,7 @@ "1736292549": "Mettre à jour le code postal", "1737352280": "Bot.init n’est pas appelé", "1738094481": "<0>Durée : Ticks 1", + "1738206798": "Au-dessus du point", "1738611950": "À propos de la stratégie Reverse Martingale", "1738681493": "Retirez vos lunettes, si nécessaire", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "Effectuez un dépôt dans votre devise locale via un agent de paiement agréé et indépendant dans votre pays.", "1867217564": "L'index doit être un entier positif", "1867783237": "High-to-Close", - "1869315006": "Découvrez comment nous protégeons vos fonds pour débloquer la caisse.", "1869486036": "Vous recevez un <0>paiement à l'<0>expiration si le prix au comptant n'atteint pas ou ne franchit pas la <0>barrière pendant la durée du contrat. Si tel est le cas, votre contrat sera résilié de manière anticipée.", "1869787212": "Even", "1870933427": "Crypto", @@ -2811,7 +2812,6 @@ "-541392118": "Votre compte n'a pas été authentifié. Veuillez soumettre votre <0>proof of identity et <1>proof of address pour authentifier votre compte et accéder à votre caisse.", "-599998434": "Vous ne pouvez pas effectuer de transfert de fonds, car vos documents sont encore en cours de vérification. Nous vous informerons par e-mail dans les 3 jours suivant l'approbation de votre vérification.", "-247122507": "Votre caisse est verrouillée. Veuillez compléter l'<0>évaluation financière pour la déverrouiller.", - "-1443721737": "Votre caisse est verrouillée. Voyez <0>how we protect your funds avant de poursuivre.", "-901712457": "Votre accès à Cashier a été temporairement désactivé car vous n'avez pas défini votre limite de rotation de 30 jours. Veuillez vous rendre sur <0>Self-exclusion et définir votre limite de rotation de 30 jours.", "-166472881": "Vos <0>données personnelles sont incomplètes. Veuillez vous rendre dans les paramètres de votre compte et compléter vos données personnelles pour permettre dépôts et retraits.", "-666905139": "Les dépôts sont verrouillés", @@ -2828,7 +2828,6 @@ "-1675848843": "Erreur", "-283017497": "Réessayer", "-1294455996": "Deriv P2P est indisponible", - "-1838982691": "INCONNU", "-532693866": "Un problème est survenu. Veuillez actualiser la page et réessayer.", "-1196049878": "Première ligne de l’adresse du domicile", "-1326406485": "Code postal", @@ -2837,9 +2836,9 @@ "-1459042184": "Mettez à jour vos données personnelles", "-1603543465": "Nous ne pouvons pas valider vos données personnelles car il manque des informations.", "-614516651": "Besoin d'aide? <0>Contactez-nous.", - "-203002433": "Faire un dépôt maintenant", "-720315013": "Vous n'avez pas de fonds dans votre compte {{currency}}", "-2052373215": "Veuillez effectuer un dépôt pour utiliser cette fonction.", + "-203002433": "Faire un dépôt maintenant", "-379487596": "{{selected_percentage}} % du solde disponible ({{format_amount}} {{currency__display_code}})", "-1957498244": "plus", "-1059419768": "Remarques ", @@ -3401,7 +3400,6 @@ "-705744796": "Le solde de votre compte démo a atteint la limite maximale et vous ne pourrez pas effectuer de nouvelles transactions. Réinitialisez votre solde pour continuer à trader depuis votre compte démo.", "-2063700253": "désactivé", "-1585069798": "Veuillez cliquer sur le lien suivant pour compléter votre test d'adéquation.", - "-1287141934": "En savoir plus", "-367759751": "Votre compte n'a pas été vérifié", "-596690079": "Vous aimez utiliser Deriv ?", "-265932467": "Nous aimerions connaître votre avis", @@ -3815,6 +3813,13 @@ "-99964540": "Lorsque votre profit atteint ou dépasse le montant fixé, votre contrat est automatiquement clôturé.", "-542594338": "Paiement max.", "-1622900200": "Activé", + "-1769815370": "La barrière sera fixée au prix déterminé.", + "-2062696378": "Au-dessus du point :", + "-650959802": "La barrière se déplacera par rapport au point actuel, maintenant une distance fixe au-dessus.", + "-445997898": "La barrière se déplacera par rapport au point actuel, maintenant une distance fixe en dessous.", + "-1116872874": "Prix fixe :", + "-635746838": "En dessous du point", + "-548979988": "Prix fixe", "-2131851017": "Taux de croissance", "-339236213": "Multiplier", "-1396928673": "Gestion des risques", diff --git a/packages/translations/src/translations/it.json b/packages/translations/src/translations/it.json index b16e37e031ff..04c1c6149467 100644 --- a/packages/translations/src/translations/it.json +++ b/packages/translations/src/translations/it.json @@ -153,6 +153,7 @@ "157871994": "Link scaduto", "158355408": "Alcuni servizi potrebbero essere temporaneamente non disponibili.", "160746023": "Tether come Omni token (USDT) è una versione di Tether ospitata sul livello Omni sulla blockchain Bitcoin.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Nessuna fotocamera trovata", "164112826": "Questo blocco permette di caricare altri blocchi da un URL dove sono memorizzati o da un server remoto e saranno caricati solamente quando il bot è attivo.", "164564432": "I depositi non sono momentaneamente disponibili a causa della manutenzione del sistema; potrai effettuarli a manutenzione finita.", @@ -187,7 +188,6 @@ "195136585": "Grafico Trading View", "195972178": "Ottieni carattere", "196810983": "Se la durata supera le 24 ore, saranno utilizzate invece l'ora limite e la data di scadenza.", - "196998347": "I fondi dei clienti sono conservati in conti bancari separati da quelli operativi, i quali non faranno parte, in caso di insolvenza, dell'asset della società. Ciò rispecchia i requisiti della <0>Commissione sul gioco d'azzardo per la segregazione dei fondi dei clienti a livello: <1>protezione media.", "197190401": "Data di scadenza", "201016731": "<0>Vedi di più", "201091938": "30 giorni", @@ -304,6 +304,7 @@ "312300092": "Elimina gli spazi contenuti in una determinata stringa o porzione di testo.", "313741895": "Questo blocco risulterà nuovamente \"Vero\" se l'ultima candela è nera. Può essere posizionato in qualunque punto dell'area di disegno tranne entro il blocco principale dei parametri di trading.", "315306603": "Al tuo conto non è stata assegnata alcuna valuta. Selezionane una per iniziare il trading con questo conto.", + "315516003": "Distanza dal punto", "316694303": "La candela è nera?", "318705408": "Demo Zero Spread", "318865860": "chiudi", @@ -344,6 +345,7 @@ "351744408": "Verifica se una determinata stringa è vuota", "353731490": "Lavoro concluso", "354945172": "Invia documento", + "355647475": "Punto attuale", "357477280": "Nessun volto rilevato", "357672069": "Verifica del reddito fallita", "359053005": "Inserisci il nome di un token.", @@ -546,7 +548,6 @@ "567163880": "Crea password {{platform}}", "567755787": "Il numero di identificazione fiscale è obbligatorio.", "569057236": "In quale Paese è stato emesso il documento?", - "571921777": "Livello di protezione dei fondi", "572576218": "Lingue", "573173477": "La candela {{ input_candle }} è nera?", "575668969": "3. Per le transazioni che producono un profitto, la puntata per la transazione successiva sarà aumentata di 2 USD. Deriv Bot continuerà ad aggiungere 2 USD per ogni trade di successo. Vedere A1.", @@ -956,7 +957,6 @@ "970915884": "UN", "974888153": "High-Low", "975608902": "Per fare trading con i CFD, crea prima un conto Deriv Apps.", - "975668699": "Confermo e accetto i <0>termini e condizioni di {{company}}", "975747761": "In corso", "975950139": "Paese di residenza", "977647549": "Nota: Puoi usare questa password per tutti i conti {{platform}}.", @@ -1431,6 +1431,7 @@ "1405584799": "con intervallo: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "Fai clic sull'icona con il segno + per estendere la funzionalità di questo blocco.", + "1410016796": "Sotto il punto:", "1411373212": "Le password complesse contengono almeno 8 caratteri. Combina lettere maiuscole e minuscole, numeri e simboli.", "1411419173": "Tasso di crescita: {{ accumulator }}", "1412405902": "Vedi note importanti", @@ -1754,6 +1755,7 @@ "1736292549": "Aggiorna CAP", "1737352280": "Bot.init non viene richiamato", "1738094481": "<0>Durazione: Ticks 1", + "1738206798": "Sopra il punto", "1738611950": "Informazioni sulla Reverse Martingale", "1738681493": "Togli gli occhiali, se necessario", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "Deposita fondi nella tua valuta locale tramite un agente di pagamento autorizzato e indipendente del tuo Paese.", "1867217564": "L'indice deve essere un numero intero positivo", "1867783237": "High-to-Close", - "1869315006": "Scopri come proteggiamo i fondi per sbloccare la cassa.", "1869486036": "Riceve un <0>pagamento alla <0>scadenza se il prezzo spot non tocca o non supera la <0>barriera durante il periodo contrattuale. In caso contrario, il suo contratto verrà risolto anticipatamente.", "1869787212": "Even", "1870933427": "Cripto", @@ -2811,7 +2812,6 @@ "-541392118": "Il conto non è stato autenticato. Invia un <0>documento di prova dell'identità e <1>un documento di prova dell'indirizzo per autenticare il conto e accedere alla cassa.", "-599998434": "Non puoi effettuare un trasferimento di fondi poiché i tuoi documenti sono ancora in fase di revisione. Ti invieremo una notifica via e-mail entro 3 giorni dall'approvazione della verifica.", "-247122507": "La cassa è bloccata. Completa la <0>valutazione finanziaria per sbloccarla.", - "-1443721737": "La cassa è bloccata. Scopri come <0>proteggiamo i tuoi fondi prima di continuare.", "-901712457": "L'accesso alla cassa è stato temporaneamente disabilitato perché non hai impostato il limite di 30 giorni per il turnover: per impostarlo, vai alla sezione <0>Autoesclusione.", "-166472881": "I <0>dati personali sono incompleti. Vai sulle impostazioni del conto e completa i dati personali per abilitare depositi e prelievi.", "-666905139": "I depositi sono bloccati", @@ -2828,7 +2828,6 @@ "-1675848843": "Errore", "-283017497": "Riprova", "-1294455996": "Deriv P2P non disponibile", - "-1838982691": "SCONOSCIUTO", "-532693866": "Qualcosa è andato storto. La preghiamo di aggiornare la pagina e di riprovare.", "-1196049878": "Prima riga dell'indirizzo", "-1326406485": "Codice postale/CAP", @@ -2837,9 +2836,9 @@ "-1459042184": "Aggiorna i dati personali", "-1603543465": "Non è possibile validare i dati personali perché mancano alcune informazioni.", "-614516651": "Hai bisogno di aiuto? <0>Contattaci.", - "-203002433": "Deposita adesso", "-720315013": "Non sono presenti fondi nel conto in {{currency}}", "-2052373215": "Effettua un deposito per utilizzare questa funzione.", + "-203002433": "Deposita adesso", "-379487596": "{{selected_percentage}}% del saldo disponibile ({{format_amount}} {{currency__display_code}})", "-1957498244": "altro", "-1059419768": "Note", @@ -3401,7 +3400,6 @@ "-705744796": "Il saldo del conto demo ha raggiunto il limite massimo, pertanto non potrai effettuare nuovi trade. Ripristina il saldo per continuare a fare trading con il conto di prova.", "-2063700253": "disabilitato", "-1585069798": "Fai clic su questo link per eseguire il test di adeguatezza.", - "-1287141934": "Scopri di più", "-367759751": "Il conto non è stato verificato", "-596690079": "Ti piace usare Deriv?", "-265932467": "Ci piacerebbe sentire i vostri pensieri", @@ -3815,6 +3813,13 @@ "-99964540": "Quando il tuo profitto raggiunge o supera l'importo stabilito, il tuo trade verrà chiuso automaticamente.", "-542594338": "Payout massimo", "-1622900200": "Abilitato", + "-1769815370": "La barriera sarà fissata al prezzo stabilito.", + "-2062696378": "Sopra il punto:", + "-650959802": "La barriera si sposterà in relazione al punto attuale, mantenendo una distanza stabilita sopra di esso.", + "-445997898": "La barriera si sposterà in relazione al punto attuale, mantenendo una distanza stabilita sotto di esso.", + "-1116872874": "Prezzo fisso:", + "-635746838": "Sotto il punto", + "-548979988": "Prezzo fisso", "-2131851017": "Tasso di crescita", "-339236213": "Multiplier", "-1396928673": "Gestione del rischio", diff --git a/packages/translations/src/translations/km.json b/packages/translations/src/translations/km.json index c63945f9d206..3e02d82e7bee 100644 --- a/packages/translations/src/translations/km.json +++ b/packages/translations/src/translations/km.json @@ -129,53 +129,54 @@ "133655768": "ចំណាំ៖ ប្រសិនបើអ្នកចង់ស្វែងយល់បន្ថែមអំពី Bot Builder អ្នកអាចបន្តទៅកាន់ផ្ទាំង <0>ការបង្រៀន។", "134126193": "ព្យាយាមស្វែងរកទីផ្សារ ឬពាក្យគន្លឹះ", "136790425": "ព្យាយាមផ្លាស់ប្តូរ ឬលុបតម្រងចេញ ដើម្បីមើលទីតាំងដែលមានអាចប្រើបាន។", - "137589354": "ដើម្បីវាយតំលៃជាមួយនឹងភាពប្រើប្រាស់របស់អ្នកនៅវដ្តទៅហើយប្រសិនបើផលិតក្រាហ្វិករបស់យើងត្រូវឲ្យបានបញ្ចូលពន្ធប្រភេន។", - "138055021": "សន្ទស្សន៍ប្រភេទ Synthetic", - "139454343": "បញ្ជាក់ដើម្បីធ្វើការកំណត់ព័ត៌រង្វាច់របស់អ្នក", + "137589354": "ដើម្បីវាយតម្លៃបទពិសោធន៍ការជួញដូររបស់អ្នក និងមើលថាតើផលិតផលរបស់យើងសាកសមសម្រាប់អ្នកឬទេ។ សូមផ្តល់ចម្លើយត្រឹមត្រូវ និងពេញលេញ ព្រោះវាអាចប៉ះពាល់ដល់លទ្ធផលនៃការវាយតម្លៃនេះ។", + "138055021": "សន្ទស្សន៍ Synthetic", + "139454343": "បញ្ជាក់ដែនកំណត់របស់ខ្ញុំ", "141265840": "ព័ត៌មានអំពីការផ្ទេរប្រាក់", - "141626595": "បញ្ចូលយើងចំណេះដឹងដែលមានកាមេរ៉ាធាតុ", - "142050447": "កំណត់ {{ variable }} ដើម្បីបង្កើនអត្ថបទដោយប្រើពាក្យនិងលេខតាមច្បាប់ដែលបានកំណត់។", - "142390699": "ភ្លេច​វីយ៉ាអូពីទូរស័ព្ទរបស់អ្នក", - "143970826": "បរាជ័យបន្ធគាត់តាមរយៈការបង់ប្រាក់", - "145511192": "s គឺជាភាគចំណែកដើម។", - "145633981": "មិនអាចយកនិងប្រើប្រាស់បានទេដោយសារឯកសាររបស់អ្នកនៅក្នុងការពិនិត្យមើលនេះ", - "145736466": "ថតរូប រូបសែលហ្វី (selfie)", - "147327552": "គ្មានចំណូលចិត្តទេ។", + "141626595": "ត្រូវប្រាកដថាឧបករណ៍របស់អ្នកមានកាមេរ៉ាដែលដំណើរការបាន", + "142050447": "កំណត់ {{ variable }} ដើម្បីបង្កើតអត្ថបទជាមួយ", + "142390699": "បានភ្ជាប់ទៅទូរស័ព្ទរបស់អ្នក", + "143970826": "មានបញ្ហាក្នុងការទូទាត់ប្រាក់មែនទេ?", + "145511192": "s គឺជាដើមទុកផ្តើមដំបូង។", + "145633981": "មិនអាចប្រើបានទេ ដោយសារឯកសាររបស់អ្នកកំពុងស្ថិតក្រោមការត្រួតពិនិត្យនៅឡើយ", + "145736466": "ថតរូបសែលហ្វី", + "147327552": "គ្មានបញ្ជីចំណូលចិត្តទេ", "150156106": "រក្សាទុកការផ្លាស់ប្តូរ", - "150486954": "ឈ្មោះអតិថិជន", - "151279367": "2. កំណត់ លក្ខខណ្ឌទិញ។ ក្នុងឧទាហរណ៍នេះ, ប៉ុនរបស់អ្នកនឹងទិញកុងត្រា ឡើង នៅពេលវាចាប់ផ្តើម និងបន្ទាប់ពីកុងត្រាមានកន្លែងបិទ។", + "150486954": "ឈ្មោះនិមិត្តសញ្ញា", + "151279367": "2. កំណត់ លក្ខខណ្ឌទិញ។ ក្នុងឧទាហរណ៍នេះ bot របស់អ្នកនឹងទិញកិច្ចសន្យា Rise នៅពេលវាចាប់ផ្តើម និងបន្ទាប់ពីកិច្ចសន្យាបិទ។", "151646545": "មិនអាចអានឯកសារ {{name}}", "152415091": "គណិតវិទ្យា", - "152524253": "ធ្វើពាណិជ្ជកម្មទីផ្សារពិភពលោកជាមួយនឹងវេទិកាដែលងាយស្រួលប្រើដ៏ពេញនិយមរបស់យើង។", + "152524253": "ធ្វើការជួញដូរទីផ្សារពិភពលោកផ្សេងៗជាមួយនឹងវេទិកាដែលងាយស្រួលប្រើដ៏ពេញនិយមរបស់យើង។", "153485708": "Zero Spread - BVI", "154274415": "ប្រាក់ទូទាត់នៅពេលផុតកំណត់គឺស្មើនឹងការយកប្រាក់ទូទាត់ក្នុងមួយពិន្ទុមកគុណនឹងភាពខុសគ្នារវាងតម្លៃចុងក្រោយ និងកម្រិតបន្ទាត់តម្លៃគោលដៅ។", - "157593038": "​ចំនួនគំរូចនិន្នាទីពី {{ start_number }} ដល់ {{ end_number }}", + "157593038": "ចំនួនគត់ចាប់ព្រាវពី {{ start_number }} ទៅ {{ end_number }}", "157871994": "តំណផុតកំណត់", - "158355408": "សេវាកម្មមួយចំនួនអាចនឹងមិនមានជាបណ្តោះអាសន្ន។", - "160746023": "Tether as an Omni token (USDT) គឺជាកំណែនៃ Tether ដែលត្រូវបានបង្ហោះនៅលើស្រទាប់ Omni នៅលើ Bitcoin blockchain ។", - "160863687": "កាមេរ៉ាមិនត្រូវបានរកឃើញទេ។", - "164112826": "ប្លុកនេះអនុញ្ញាតឱ្យអ្នកផ្ទុកប្លុកពី URL ប្រសិនបើអ្នកផ្ទុកពួកវានៅលើម៉ាស៊ីនមេពីចម្ងាយ ហើយពួកវានឹងត្រូវបានផ្ទុកតែនៅពេលដែល bot របស់អ្នកដំណើរការប៉ុណ្ណោះ។", - "164564432": "ការ​ដាក់​ប្រាក់​មិន​អាច​ប្រើ​បាន​ជា​បណ្ដោះ​អាសន្ន​ដោយ​សារ​តែ​ការ​ថែទាំ​ប្រព័ន្ធ។ អ្នកអាចដាក់ប្រាក់បញ្ញើរបស់អ្នកនៅពេលដែលការថែទាំត្រូវបានបញ្ចប់។", + "158355408": "សេវាកម្មមួយចំនួនអាចនឹងប្រើប្រាស់មិនបានជាបណ្តោះអាសន្ន។", + "160746023": "Tether ជា Omni token (USDT) គឺជាកំណែមួយនៃ Tether ដែលបង្កើតឡើងដោយវេទិកា Omni layer នៅលើ Bitcoin blockchain ។", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", + "160863687": "រកមិនឃើញកាមេរ៉ាទេ", + "164112826": "ប្លុកនេះអនុញ្ញាតឱ្យអ្នកផ្ទុកប្លុកពី URL បាន ប្រសិនបើអ្នកផ្ទុកពួកវានៅលើម៉ាស៊ីនមេពីចម្ងាយ ហើយពួកវានឹងត្រូវបានផ្ទុកតែនៅពេលដែល bot របស់អ្នកដំណើរការប៉ុណ្ណោះ។", + "164564432": "ការ​ដាក់​ប្រាក់​មិន​អាច​ប្រើ​បាន​ជា​បណ្ដោះ​អាសន្ន​ដោយ​សារ​តែ​ការ​ថែទាំ​ប្រព័ន្ធ។ អ្នកអាចដាក់ប្រាក់បញ្ញើរបស់អ្នកនៅពេលដែលការថែទាំត្រូវបានបញ្ចប់រួចរាល់។", "165294347": "សូមកំណត់ប្រទេសដែលរស់នៅរបស់អ្នកនៅក្នុងការកំណត់គណនីរបស់អ្នក ដើម្បីចូលទៅកាន់ អ្នកគិតលុយ។", "165312615": "ដំណើរការបន្ត​តាម​ទូរស័ព្ទ", - "165682516": "ប្រសិនបើអ្នកមិនខ្វល់ពីការចែករំលែក តើវេទិកាពាណិជ្ជកម្មណាមួយផ្សេងទៀតដែលអ្នកប្រើ?", - "167094229": "• ភាគចំណែកបច្ចុប្បន្ន: ប្រើអថេរនេះដើម្បីរក្សាតម្លៃភាគចំណែក។ អ្នកអាចផ្ដល់ចំនួនណាមួយដែលអ្នកចង់បាន ប៉ុន្តែវាត្រូវតែជាចំនួនវិជ្ជមាន។", + "165682516": "ប្រសិនបើអ្នកមិនប្រកាន់ទេ តើអ្នកអាចប្រាប់ខ្ញុំបានទេថា តើវេទិកាជួញដូរណាមួយផ្សេងទៀតដែលអ្នកប្រើ?", + "167094229": "• ដើមទុនបច្ចុប្បន្ន៖ ប្រើអថេរនេះដើម្បីរក្សាទុកចំនួនដើមទុន។ អ្នកអាចកំណត់ចំនួនប្រាក់ណាមួយដែលអ្នកចង់បាន ប៉ុន្តែវាត្រូវតែជាលេខវិជ្ជមាន។", "170185684": "មិនអើពើ", - "170244199": "ខ្ញុំបិទគណនីរបស់ខ្ញុំដោយសារហេតុផលផ្សេងទៀត។", + "170244199": "ខ្ញុំកំពុងបិទគណនីរបស់ខ្ញុំដោយហេតុផលផ្សេងទៀត។", "171307423": "ការងើបឡើងវិញ", - "171579918": "ទៅការកំចាត់ខ្លួនឯង", + "171579918": "ចូលទៅកាន់ប្រព័ន្ធការពារខ្លួន", "171638706": "អថេរ", "173991459": "យើងកំពុងផ្ញើសំណើរបស់អ្នកទៅ blockchain ។", - "174793462": "តម្លៃអនុវត្ត", - "176078831": "បានបន្ថែម", - "176319758": "ភាគហ៊ុនសរុបអតិបរមាឆ្លងកាត់ 30 ថ្ងៃ", + "174793462": "ប្រតិបត្តិ", + "176078831": "បន្ថែមហើយ", + "176319758": "ប្រាក់ដើមសរុបខ្ពស់បំផុតក្នុងរយៈពេល 30 ថ្ងៃចុងក្រោយ", "176654019": "$100,000 - $250,000", - "177099483": "ការផ្ទៀងផ្ទាត់អាសយដ្ឋានរបស់អ្នកកំពុងរង់ចាំ និងយើងបានដាក់កំណត់មួយចំនួនលើគណនីរបស់អ្នក។ កំណត់ទាំងនេះនឹងត្រូវដកចេញពេលអាសយដ្ឋានរបស់អ្នកត្រូវបានផ្ទៀងផ្ទាត់។", + "177099483": "ការផ្ទៀងផ្ទាត់អាសយដ្ឋានរបស់អ្នកកំពុងដំណើរការ ហើយយើងបានដាក់កម្រិតមួយចំនួនលើគណនីរបស់អ្នក។ ការរឹតបន្តឹងនឹងត្រូវបានដកចេញនៅពេលដែលអាសយដ្ឋានរបស់អ្នកត្រូវបានផ្ទៀងផ្ទាត់រួច។", "177467242": "កំណត់ជម្រើសពាណិជ្ជកម្មរបស់អ្នកដូចជា Accumulator និងភាគហ៊ុន។ ប្លុកនេះអាចប្រើបានតែជាមួយប្រភេទពាណិជ្ជកម្ម Accumulator ប៉ុណ្ណោះ។ ប្រសិនបើអ្នកជ្រើសរើសប្រភេទពាណិជ្ជកម្មផ្សេងទៀត ប្លុកនេះនឹងត្រូវបានជំនួសដោយប្លុកជម្រើសពាណិជ្ជកម្ម។", - "179083332": "កាលបរិច្ឆេ", - "181107754": "គណនីថ្មី <0>{{platform}} {{eligible_account_to_migrate}} របស់អ្នកត្រូវបានរៀបចំរួចរាល់សម្រាប់ការជួញដូរ។", + "179083332": "កាលបរិច្ឆេទ", + "181107754": "គណនី <0>{{platform}} {{eligible_account_to_migrate}} ថ្មីរបស់អ្នកគឺរួចរាល់ហើយសម្រាប់ការជួញដូរ។", "181346014": "កំណត់ចំណាំ", - "181881956": "ប្រភេទកិច្ចសន្យ: {{ contract_type }}", + "181881956": "ប្រភេទកិច្ចសន្យា៖ {{ contract_type }}", "182630355": "សូមអរគុណចំពោះការបញ្ជូនព័ត៌មានរបស់អ្នក។", "184024288": "អក្សរតូច", "189705706": "ប្លុកនេះប្រើអថេរ \"i\" ដើម្បីគ្រប់គ្រងការកំណត់ចំនួនលំដាប់។ ក្នុងលំដាប់តែម្តងៗនេះ តម្លៃនៃ \"i\" ត្រូវបានកំណត់ដោយធាតុនៅក្នុងបញ្ជីដែលបានផ្ដល់ឱ្យ។", @@ -187,7 +188,6 @@ "195136585": "គំនូសតាង Trading View", "195972178": "ទទួលបានតួអក្សរ", "196810983": "ប្រសិនបើរយៈពេលលើសពី 24 ម៉ោង ពេលវេលាកំណត់បិទ និងកាលបរិច្ឆេទផុតកំណត់នឹងត្រូវបានប្រើជំនួសវិញ។", - "196998347": "យើងបានរក្សាទុនអតិថិជននៅក្នុងគណនីធនាគារដែលបំបែកខុសពីគណនីប្រតិបត្តិការរបស់យើង ដែលមិននឹងក្លាយជាផ្នែកមួយនៃទ្រព្យសម្បត្តិរបស់ក្រុមហ៊ុននៅពេលមានការដួលរលំ។ នេះបំពេញតាមតំរូវការរបស់ <0>Gambling Commission សម្រាប់ការបំបែកទុនអតិថិជននៅកម្រិត: <1>ការការពារមធ្យម។", "197190401": "ថ្ងៃ​ផុតកំណត់", "201016731": "<0>មើលច្រើនទៀត", "201091938": "30 ថ្ងៃ។", @@ -304,6 +304,7 @@ "312300092": "កាត់​ដកឃ្លា​ក្នុង​ខ្សែអក្សរ ឬ​អត្ថបទ​ដែល​បាន​ផ្តល់​ឲ្យ។", "313741895": "ប្លុកនេះត្រឡប់ \"ពិត\" ប្រសិនបើទៀនចុងក្រោយមានពណ៌ខ្មៅ។ វាអាចត្រូវបានដាក់នៅកន្លែងណាមួយនៅលើផ្ទាំងក្រណាត់ លើកលែងតែនៅក្នុងប្លុកឫសប៉ារ៉ាម៉ែត្រពាណិជ្ជកម្ម។", "315306603": "អ្នកមានគណនីដែលមិនបានកំណត់រូបិយប័ណ្ណ។ សូមជ្រើសរើសរូបិយប័ណ្ណដើម្បីធ្វើពាណិជ្ជកម្មជាមួយគណនីនេះ។", + "315516003": "ចម្ងាយទៅកាន់កន្លែង", "316694303": "តើទៀនខ្មៅទេ?", "318705408": "គណនីសាកល្បង Zero Spread", "318865860": "ជិត", @@ -344,6 +345,7 @@ "351744408": "សាកល្បងប្រសិនបើខ្សែអក្សរដែលបានផ្តល់ឱ្យទទេ", "353731490": "ការបញ្ចប់រួចរាល់", "354945172": "ដាក់ស្នើឯកសារ", + "355647475": "កន្លែងបច្ចុប្បន្ន", "357477280": "រកមិនឃើញមុខទេ", "357672069": "ការផ្ទៀងផ្ទាត់ប្រាក់ចំណូលបានបរាជ័យ", "359053005": "សូមបញ្ចូលឈ្មោះនិមិត្តសញ្ញា។", @@ -546,7 +548,6 @@ "567163880": "បង្កើតពាក្យសោរគប់កម្មវិធី {{platform}}", "567755787": "ត្រូវការលេខសម្គាល់តាមធនាការពាក្យសម្បត្តិ។", "569057236": "ក្នុងប្រទេសណែនាំតន្ត្រីទិញរបស់អ្នកត្រូវបានបង្កើនឡើងដើម្បីទទួលយកឯកសារ?", - "571921777": "កំរិតការផ្ទះភ្ជាប់សម្រាប់ការកាត់បន្ទុក", "572576218": "ភាសា", "573173477": "តើវីរុស {{ input_candle }} មានលក្ខណៈក្រុមចំនួនស្ពានទម្រង់?", "575668969": "3. សម្រាប់ការជួញដូរដែលនាំមកនូវប្រាក់ចំណេញ ភាគហ៊ុនឬប្រាក់ដើមសម្រាប់ការជួញដូរបន្ទាប់នឹងត្រូវបានកើនឡើង 2 USD ។ Deriv Bot នឹងបន្តបន្ថែម 2 USD សម្រាប់រាល់ការជួញដូរដែលជោគជ័យ។ សូមមើល A1 ។", @@ -956,7 +957,6 @@ "970915884": "AN", "974888153": "ខិតបើទំហំចុងលើរបស់ការបិទក្រោយប្រភេទក្រោយនេះ", "975608902": "ដើម្បីដោះដូរ CFDs សូមទទួលបានគណនីកម្មវិធី Deriv ជាមុនសិន។", - "975668699": "ខ្ញុំបញ្ជាក់ និងទទួលយក <0>លក្ខខណ្ឌ របស់ {{company}}", "975747761": "កំពុងដំណើរការ", "975950139": "ប្រទេសស្នាក់នៅ", "977647549": "ចំណាំ៖ អ្នកអាចប្រើពាក្យសម្ងាត់នេះសម្រាប់គណនី {{platform}} របស់អ្នកទាំងអស់។", @@ -1431,6 +1431,7 @@ "1405584799": "ជាមួយចន្លោះ: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "ចុចរូបនិមិត្តបូកដើម្បីពង្រីកមុខងារនៃប្លុកនេះ", + "1410016796": "នៅខាងក្រោមកន្លែង:", "1411373212": "ពាក្យសម្ងាត់ហៅកាន់ការងារបន្តិកយឺតក្រមអក្សរតូចនិងអក្សរធំច្រើន ចំនួនលំនាំអាប់សេរីក្នុងលំនាំដើមអក្សរនិងសញ្ញាដ្យាន។", "1411419173": "អនុក្រឹតក្នុងអនុគមន៏: {{ accumulator }}", "1412405902": "មើលកំណត់ចំណាំសំខាន់", @@ -1754,6 +1755,7 @@ "1736292549": "ធ្វើបច្ចុប្បន្នភាពលេខប្រៃសណីយ៍", "1737352280": "Bot.init មិនបានហៅមកនោះទេ", "1738094481": "<0>ប្រវេទរការពាក់សល់៖ ធា 1", + "1738206798": "នៅលើកន្លែង", "1738611950": "អំពី Reverse Martingale", "1738681493": "ដកវ៉ែនតារបស់អ្នកប្រសិនបើចាំបាច់", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "ដាក់ប្រាក់ជាមួយរូបិយប័ណ្ណក្នុងស្រុករបស់អ្នក តាមរយៈភ្នាក់ងារទូទាត់ដែលមានស្ថាប័ននៅក្នុងប្រទេសរបស់អ្នក។", "1867217564": "សន្ទស្សន៍ត្រូវតែជាចំនួនគត់វិជ្ជមាន", "1867783237": "ពីខ្ពស់ទៅទាប", - "1869315006": "មើលពីរបៀបដែលយើងការពារមូលនិធិរបស់អ្នកដើម្បីដោះសោអ្នកគិតលុយ។", "1869486036": "អ្នកនឹងទទួលបាន <0>ប្រាក់បៀរ។ លើការចុលឆាប់មិនបានបើសិនទេប្រតិបត្តិដោយអ្នក។", "1869787212": "គូដូចគ្នា", "1870933427": "គ្រីបតូ", @@ -2811,7 +2812,6 @@ "-541392118": "គណនីរបស់អ្នកមិនត្រូវបានផ្ទៀងផ្ទាត់។ សូមផ្ទុក <0>បញ្ជាក់អត្តសញ្ញាណ<\\/0> និង <1>បញ្ជាក់អាសយដ្ឋាន<\\/1> របស់អ្នក ដើម្បីផ្ទៀងផ្ទាត់គណនីរបស់អ្នក និងចូលប្រើបណ្ដាញឌីរីបរបស់អ្នក។", "-599998434": "អ្នកមិនអាចធ្វើការផ្ទេរប្រាក់ទាំងអស់ដោយសារឯកសាររបស់អ្នកនៅនៅក្នុងការពិនិត្យមើល។ យើងនឹងផ្ញើអ៊ីម៉ែលដោយពេលវេលាសម្រាប់បញ្ជាក់ពីការផ្ទៀងផ្ទាត់របស់អ្នកក្នុងរយះពេល ៣ ថ្ងៃតួអស់បន្ទាប់មក។", "-247122507": "អ្នកសាច់ប្រាក់របស់អ្នកត្រូវបានចាក់សោ។ សូមបំពេញ <0>ការវាយតម្លៃហិរញ្ញវត្ថុ ដើម្បីបើកវា។", - "-1443721737": "អ្នកសាច់ប្រាក់របស់អ្នកត្រូវបានចាក់សោ។ មើល <0>របៀបយើងការពារប្រាក់របស់អ្នក មុនពេលអ្នកបន្ត។", "-901712457": "ការចូលប្រើអ្នកសាច់ប្រាក់របស់អ្នកត្រូវបានផ្អាកបណ្ដោះអាសន្ន ពីព្រោះអ្នកមិនបានកំណត់ដែនកំណត់ការវិលត្រឡប់ 30-ថ្ងៃរបស់អ្នក។ សូមទៅកាន់ <0>ការប្តូរចិត្តដោយខ្លួនឯង ហើយកំណត់ដែនកំណត់ការវិលត្រឡប់ 30-ថ្ងៃរបស់អ្នក។", "-166472881": "ពត៌មានផ្ទាល់ខ្លួនរបស់អ្នកមិនបានបំពេញ។ សូមទៅកាន់ការកំណត់គណនីរបស់អ្នក និងបំពេញពត៌មានផ្ទាល់ខ្លួនរបស់អ្នក ដើម្បីអនុញ្ញាតការដាក់ប្រាក់ និងការដកប្រាក់។", "-666905139": "ត្រូវការបង្ហាញអាយុពីប្រអប់ដំណើរការ", @@ -2828,7 +2828,6 @@ "-1675848843": "កំហុស", "-283017497": "ព្យាយាមម្ដងទៀត", "-1294455996": "Deriv P2P គឺមិនមានឲ្យប្រើប្រាស់របស់អ្នកនៅកង់នេះ។", - "-1838982691": "មិនស្គាល់", "-532693866": "មានបញ្ហាម្រវិលឡើង។ សូមដំណើរការបន្តិចបើសូមចុច Refresh ហើយព្យាយាមម្តងហើយ។", "-1196049878": "អាសយដ្ឋានផ្ទុកគេហទំព័រដៃ", "-1326406485": "លេខកូដប្រៃសណីយ៍​​ប្រែក្រោយ", @@ -2837,9 +2836,9 @@ "-1459042184": "ធ្វើបច្ចុប្បន្នភាពព័ត៌មានលម្អិតផ្ទាល់ខ្លួនរបស់អ្នក", "-1603543465": "យើងមិនអាចផ្ទៀងផ្ទាត់ព័ត៌មានលម្អិតផ្ទាល់ខ្លួនរបស់អ្នកបានទេ ដោយសារមានព័ត៌មានមួយចំនួនបាត់។", "-614516651": "ត្រូវការជំអ៊ីនអ្នក? <0>ទាក់ទងមកពិនិត្យមើល.", - "-203002433": "ដាក់ប្រាក់ឥឡូវនេះ", "-720315013": "អ្នកគ្មានប្រាក់នៅក្នុងគណនីរបស់អ្នកដែរ {{currency}}", "-2052373215": "សូមធ្វើការកក់ប្រាក់ដើម្បីប្រើមូលនិធិពិសេសនេះ។", + "-203002433": "ដាក់ប្រាក់ឥឡូវនេះ", "-379487596": "{{selected_percentage}}% នៃតម្លៃនៃសមាគុណរបស់អ្នកស្ថានធនាគារ ({{format_amount}} {{currency__display_code}})", "-1957498244": "ផ្សេងទៀត", "-1059419768": "កំណត់ចំណាំ", @@ -3401,7 +3400,6 @@ "-705744796": "គណនី​សាកល្បង​របស់​លោក​បាន​ប៉ុន្តែ​ថ្លៃពីអនុញ្ញាតគណនីតម្លើង។ យើងនឹងអនុញ្ញាតឱ្យលោកត្រូវចាត់ចូលព្រមយើងបន្ទាប់មកវិញ។", "-2063700253": "បានបិទ", "-1585069798": "សូមចុច​តំណ​ខាងក្រោម ដើម្បី​បញ្ចប់​ការ​តេស្ត​ភាពសមរម្យ​របស់អ្នក។", - "-1287141934": "ស្វែងរកច្រើនទៀត", "-367759751": "គណនីរបស់អ្នកមិនត្រូវបានផ្ទៀងផ្ទាត់ទេ", "-596690079": "តើអ្នករីកចម្រំងស្តុករបស់លោកពិតជាពេលល្មមភាគច្រើន?", "-265932467": "យើងពិតជាចូលចិត្តអំពីការងាររបស់អ្នក", @@ -3815,6 +3813,13 @@ "-99964540": "នៅពេលដែលប្រាក់ចំណេញរបស់អ្នកឈានដល់ ឬលើសពីចំនួនដែលបានកំណត់ ពាណិជ្ជកម្មរបស់អ្នកនឹងត្រូវបានបិទដោយស្វ័យប្រវត្តិ។", "-542594338": "ប្រាក់បង់អតិបរមា", "-1622900200": "បានបើក", + "-1769815370": "កូរស្ងាត់នឹងត្រូវបានកំណត់នៅតម្លៃនឹងបានកំណត់។", + "-2062696378": "នៅលើកន្លែង:", + "-650959802": "ការបរិច្ឆេទនឹងលើកពាក់កណ្តាលជាមួយកន្លែងបច្ចុប្បន្ន ហើយរក្សាចម្ងាយបានកំណត់នៅលើវា។", + "-445997898": "ការបារីយនៅលើកន្លែងបច្ចុប្បន្ន និងរក្សាចម្ងាយដែលបានកំណត់នៅខាងក្រោមវា។", + "-1116872874": "តម្លៃដែលបានកំណត់:", + "-635746838": "នៅខាងក្រោមកន្លែង", + "-548979988": "តម្លៃដែលបានកំណត់", "-2131851017": "អត្រាកំណើន", "-339236213": "កម្រិតជនជាតិ", "-1396928673": "ការគ្រប់គ្រង​ហានិភ័យ", diff --git a/packages/translations/src/translations/ko.json b/packages/translations/src/translations/ko.json index 130397bee317..599fdbbb0f1a 100644 --- a/packages/translations/src/translations/ko.json +++ b/packages/translations/src/translations/ko.json @@ -153,6 +153,7 @@ "157871994": "링크가 만료되었습니다", "158355408": "일부 서비스는 일시적으로 이용이 불가능할 수 있습니다.", "160746023": "옴니 토큰으로써의 테더 (USDT) 는 비트코인 블록체인의 옴니 레이어에서 호스팅되는 테더의 버전입니다.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "카메라가 인식되지 않았습니다", "164112826": "귀하께서 원격 서버에 저장하신 블록들을 이 블록을 통해 URL로부터 로드하실 수 있으며, 이러한 블록들은 오직 귀하의 봇이 구동 될 때에만 로드됩니다.", "164564432": "시스템 점검으로 인해 일시적으로 입금을 하실 수 없습니다. 시스템 점검이 완료되면 입금 하실 수 있습니다.", @@ -187,7 +188,6 @@ "195136585": "Trading View 차트", "195972178": "문자 받기", "196810983": "기간이 24시간을 초과하는 경우 마감 시간 및 만료 날짜가 대신 적용됩니다.", - "196998347": "당사는 고객 자금을 운영 계좌와 분리된 은행 계좌에 보관하며, 이는 파산 시 회사 자산의 일부로 구성되지 않습니다. 이는 <1>중간 보호의 수준으로 고객 자금의 관리에 대해 <0>도박 위원회의 요구사항을 만족합니다.", "197190401": "만기 날짜", "201016731": "<0>자세히 보기", "201091938": "30일", @@ -304,6 +304,7 @@ "312300092": "주어진 문자열 또는 문자 내의 띄어쓰기를 잘라냅니다.", "313741895": "마지막의 캔들이 검정이었다면 블록은 \"참\"으로 불러옵니다. 이 블록은 Trade 매개변수 루트 블록 내를 제외하고 캔버스의 어느 곳에나 배치될 수 있습니다.", "315306603": "통화가 할당되지 않은 계좌가 있습니다. 이 계좌로 거래하실 통화를 선택해 주시기 바랍니다.", + "315516003": "현재 가격까지의 거리", "316694303": "캔들이 검은색인가요?", "318705408": "Demo Zero Spread", "318865860": "종료", @@ -344,6 +345,7 @@ "351744408": "주어진 문자열이 비어 있는지를 검사합니다", "353731490": "작업 완료", "354945172": "문서 제출하기", + "355647475": "현재 스팟", "357477280": "얼굴을 찾을 수 없습니다", "357672069": "소득 확인 실패", "359053005": "토큰 이름을 입력해주시기 바랍니다.", @@ -546,7 +548,6 @@ "567163880": "{{platform}} 비밀번호 생성하기", "567755787": "세금 식별 번호가 필요합니다.", "569057236": "귀하의 문서가 발행된 국가는 어디입니까?", - "571921777": "자금 보호 수준", "572576218": "언어", "573173477": "{{ input_candle }} 캔들이 검정인가요?", "575668969": "3. 수익이 발생한 거래의 경우 다음 거래에 대한 판돈이 2 USD 증가합니다. 파생 봇은 거래가 성공할 때마다 2 USD를 계속 추가합니다. A1을 참조하십시오.", @@ -956,7 +957,6 @@ "970915884": " ", "974888153": "High-Low", "975608902": "CFD를 거래하려면 먼저 Deriv Apps 계정을 만드세요.", - "975668699": "저는 {{company}} 의 <0>이용약관에 동의 및 수락합니다", "975747761": "진행 중", "975950139": "거주 국가", "977647549": "참고: 귀하의 모든 {{platform}} 계좌들에 대하여 이 비밀번호를 이용하실 수 있습니다.", @@ -1431,6 +1431,7 @@ "1405584799": "간격과 함께: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "이 블록의 기능을 확장하기 위해 더하기 아이콘을 클릭하세요.", + "1410016796": "Low 스팟:", "1411373212": "강력한 암호는 8자 이상의 문자를 포함합니다. 대문자와 소문자, 숫자, 및 기호를 조합해야 합니다.", "1411419173": "성장률: {{ accumulator }}", "1412405902": "중요 노트 보기", @@ -1754,6 +1755,7 @@ "1736292549": "우편번호 업데이트", "1737352280": "Bot.init이 불려오지 않았습니다", "1738094481": "<0>기간: 틱 1", + "1738206798": "위 스팟", "1738611950": "Reverse Martingale 대하여", "1738681493": "필요시 귀하의 안경을 제거해주세요", "1739086943": "월스트리트 30 (Wall Street 30)", @@ -1897,7 +1899,6 @@ "1866811212": "귀하의 국가에서 허가되며 독립적인 지불 에이전트를 통해 귀하의 지역 통화로 예금하세요.", "1867217564": "지수는 반드시 양의 정수여야 합니다", "1867783237": "High-to-Close", - "1869315006": "캐셔를 활성화하기 위해 우리가 어떻게 귀하의 자금을 보호하는지를 확인하세요.", "1869486036": "계약 기간 동안 현물 가격이 <0>배리어에 닿거나 위반하지 않으면 <0>만기 시 <0>지불금을 받습니다. 위반할 경우 계약이 조기 종료됩니다.", "1869787212": "Even", "1870933427": "크립토", @@ -2811,7 +2812,6 @@ "-541392118": "귀하의 계좌가 아직 인증되지 않았습니다. 귀하의 계좌 인증과 캐셔로의 접근을 위해 귀하의 <0>신분증과 <1>주소증명서를 제출해 주시기 바랍니다.", "-599998434": "서류가 아직 검토 중이므로 송금할 수 없습니다. 인증이 승인되면 3일 이내에 이메일로 알려드리겠습니다.", "-247122507": "귀하의 캐셔는 잠겨져 있습니다. 잠금해제를 위해 <0>금융 평가를 완료해 주시기 바랍니다.", - "-1443721737": "귀하의 캐셔는 잠겨져 있습니다. 진행하시기 이전에 <0>우리가 어떻게 귀하의 자금을 보호하는지를 확인하세요", "-901712457": "귀하께서 30일 턴오버 한도를 설정하지 않으셨기 때문에 귀하의 캐셔로의 접근은 일시적으로 중지되어 있습니다. <0>자가제한으로 가셔서 귀하의 30일 턴오버 한도를 설정해 주시기 바랍니다.", "-166472881": "귀하의 <0>인적 세부정보가 완료되지 않았습니다. 예금과 인출을 활성화시키기 위해 귀하의 계좌 설정으로 가셔서 귀하의 인적 세부정보를 완료해 주시기 바랍니다.", "-666905139": "예금이 잠겨져 있습니다", @@ -2828,7 +2828,6 @@ "-1675848843": "오류", "-283017497": "재시도", "-1294455996": "Deriv P2P 사용 불가", - "-1838982691": "불명", "-532693866": "문제가 발생했습니다. 페이지를 새로고침하고 다시 시도하세요.", "-1196049878": "집 주소의 첫째 줄", "-1326406485": "우편번호", @@ -2837,9 +2836,9 @@ "-1459042184": "귀하의 세부 인적사항을 업데이트하세요", "-1603543465": "정보가 부족한 부분이 있어서 우리는 귀하의 인적 세부사항을 인증할 수 없습니다.", "-614516651": "도움이 필요하신가요? <0>우리에게 문의하세요.", - "-203002433": "지금 입금하기", "-720315013": "귀하께서는 {{currency}} 계좌에 자금이 없습니다", "-2052373215": "이 기능을 활용하기 위해 입금을 해 주시기 바랍니다.", + "-203002433": "지금 입금하기", "-379487596": "이용 가능한 잔액 ({{format_amount}} {{currency__display_code}}) 의 {{selected_percentage}}%", "-1957498244": "더 많은", "-1059419768": "공지", @@ -3401,7 +3400,6 @@ "-705744796": "귀하의 데모 계좌 잔액이 최대 한도에 도달 되었으며 귀하께서는 더이상 새로운 거래를 주문하실 수 없습니다. 귀하의 데모 계좌로부터 거래를 계속하기 위해 귀하의 잔액을 재설정하세요.", "-2063700253": "비활성화 되었습니다", "-1585069798": "귀하의 적합성 시험을 완료하기 위해서는 다음의 링크를 클릭해 주시기 바랍니다.", - "-1287141934": "더 알아보세요", "-367759751": "귀하의 계좌는 아직 인증되지 않았습니다", "-596690079": "Deriv를 즐겁게 사용하시고 계시나요?", "-265932467": "저희는 귀하의 생각을 듣기를 희망합니다", @@ -3815,6 +3813,13 @@ "-99964540": "당신의 이익이 설정한 금액에 도달하거나 초과하는 경우 거래가 자동으로 종료됩니다.", "-542594338": "최대 지급금", "-1622900200": "활성화됨", + "-1769815370": "장벽은 설정된 가격에 고정될 것입니다.", + "-2062696378": "위 스팟:", + "-650959802": "장벽은 현재 스팟에 상대적으로 이동하며, 위쪽에 설정된 거리를 유지합니다.", + "-445997898": "장벽은 현재 스팟에 상대적으로 이동하며, 아래쪽에 설정된 거리를 유지합니다.", + "-1116872874": "고정 가격:", + "-635746838": "아래 스팟", + "-548979988": "고정 가격", "-2131851017": "성장률", "-339236213": "Multiplier", "-1396928673": "위험 관리", diff --git a/packages/translations/src/translations/mn.json b/packages/translations/src/translations/mn.json index 3c4188dbd9bf..80ebeed8d2b6 100644 --- a/packages/translations/src/translations/mn.json +++ b/packages/translations/src/translations/mn.json @@ -153,6 +153,7 @@ "157871994": "Холбоосын хугацаа дууссан", "158355408": "Зарим үйлчилгээ түр хугацаагаар ашиглах боломжгүй болохыг анхаарна уу. ", "160746023": "Omni token (USDT) гэж Tether нь Bitcoin блокчейн дээр Omni давхарга дээр байршуулсан Tether-ийн хувилбар юм.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Камер илрээгүй", "164112826": "Энэ блок нь та тэдгээрийг алсын сервер дээр хадгалагдсан бол URL-ээс блокуудыг ачаалах боломжийг олгодог бөгөөд тэдгээр нь зөвхөн таны bot ажиллуулах үед л ачаалагдах болно.", "164564432": "Системийн засвар үйлчилгээ хийсний улмаас хадгаламж түр хугацаагаар ашиглах боломжгүй байна. Засвар үйлчилгээ дууссаны дараа та хадгаламжаа хийж болно.", @@ -187,7 +188,6 @@ "195136585": "Trading View график", "195972178": "Дүрийг аваарай", "196810983": "Хэрэв үргэлжлэх хугацаа 24 цагаас дээш бол оронд нь Тасалтын хугацаа болон Дуусах огноо хамаарна.", - "196998347": "Бид харилцагчийн хөрөнгийг үйл ажиллагааны данснаасаа тусдаа банкны дансанд хадгалдаг бөгөөд энэ нь төлбөрийн чадваргүй тохиолдолд компанийн хөрөнгийн нэг хэсгийг бүрдүүлэхгүй. Энэ нь түвшинд хэрэглэгчийн хөрөнгийг салан тусгаарлах <0>мөрийтэй тоглоомын комис сын шаардлагыг хангасан байна: <1>дунд хамгаалалт.", "197190401": "Хугацаа дуусах хугацаа", "201016731": "<0>Дэлгэрэнгүй үзэх", "201091938": "30 хоног", @@ -304,6 +304,7 @@ "312300092": "Өгөгдсөн мөр эсвэл текст доторх зайг тайруулна.", "313741895": "Энэ блок нь сүүлчийн лаа хар өнгөтэй бол “True” -ийг буцаана. Үүнийг Худалдааны параметрүүдийн root блок дотроос бусад зураг дээр хаана ч байрлуулж болно.", "315306603": "Танд валют хуваарилагдаагүй данстай. Энэ дансаар худалдаа хийх валютыг сонгоно уу.", + "315516003": "Точид байх зай", "316694303": "Лаа хар уу?", "318705408": "Демо Zero Spread", "318865860": "хаах", @@ -344,6 +345,7 @@ "351744408": "Өгөгдсөн текстийн мөр хоосон эсэхийг шалгана", "353731490": "Ажил хийгдсэн", "354945172": "Баримт бичиг илгээх", + "355647475": "Одоогийн точи", "357477280": "Нүүр олдсонгүй", "357672069": "Орлогын баталгаажуулалт амжилтгүй", "359053005": "Токен нэрийг оруулна уу.", @@ -546,7 +548,6 @@ "567163880": "{{platform}} нууц үг үүсгэх", "567755787": "Татварын үнэмлэх дугаар шаардлагатай.", "569057236": "Таны баримт бичгийг аль улсад гаргасан бэ?", - "571921777": "Сангийн хамгаалалтын түвшин", "572576218": "Хэлний сонголт", "573173477": "Лаа {{ input_candle }} хар уу?", "575668969": "3. Ашиг хүргэх арилжааны хувьд дараагийн арилжааны хувьцааг 2 ам.доллараар нэмэгдүүлнэ. Deriv Bot амжилттай арилжаа бүрт 2 ам.доллар нэмсээр байх болно. А1-ийг үзнэ үү.", @@ -956,7 +957,6 @@ "970915884": "АН", "974888153": "High-Low", "975608902": "CFD арилжаалахын тулд эхлээд Deriv Apps данс аваарай.", - "975668699": "Би {{company}} -ийн Нөхцөл, <0>нөхцөлийг баталж, хүлээн зөвшөөрч байна", "975747761": "Үргэлжлүүлэн", "975950139": "Оршин суугаа улс", "977647549": "Тэмдэглэл: Та энэ нууц үгийг бүх {{platform}} дансууддаа ашиглаж болно.", @@ -1431,6 +1431,7 @@ "1405584799": "интервалтай: {{ candle_interval_type }}", "1407191858": "ДТрейдер", "1408844944": "Энэ блокийн функцийг өргөтгөхийн тулд нэмэх дүрс дээр дарна уу.", + "1410016796": "Точийн доор:", "1411373212": "Хүчтэй нууц үг нь дор хаяж 8 тэмдэгт агуулдаг. том ба жижиг үсэг, тоо, тэмдэглэгээг нэгтгэнэ.", "1411419173": "Өсөлтийн хурд: {{ accumulator }}", "1412405902": "Чухал тэмдэглэлийг үзнэ үү", @@ -1754,6 +1755,7 @@ "1736292549": "Шуудангийн кодыг шинэчлэх", "1737352280": "Bot.inIt гэж нэрлэдэггүй", "1738094481": "<0>Үргэлжлэх хугацаа: Хачигт 1", + "1738206798": "Точийн дээр", "1738611950": "Урвуу Мартингалийн тухай", "1738681493": "Шаардлагатай бол нүдний шилээ салга", "1739086943": "Уолл Стрийт 30", @@ -1897,7 +1899,6 @@ "1866811212": "Танай улсад эрх бүхий, бие даасан төлбөрийн агентлагаар дамжуулан орон нутгийн валютаар хадгаламж байршуулна.", "1867217564": "Индекс нь эерэг бүхэл тоо байх ёстой", "1867783237": "Өндөр-ойртоос", - "1869315006": "Кассыг онгойлгохын тулд бид таны хөрөнгийг хэрхэн хамгаалж байгааг хараарай.", "1869486036": "Гэрээний хугацаанд спо <0>т үнэ хэзээ ч <0>хүрч, саад тотгорыг зөрчсөн тохиолдолд та хугацаа дуусах <0>үед төлб өр авах болно. Хэрэв тийм бол таны гэрээ эрт дуусгавар болно.", "1869787212": "Тэр ч байтугай", "1870933427": "Крипто", @@ -2811,7 +2812,6 @@ "-541392118": "Таны данс баталгаажуулагдаагүй байна. Дансаа баталгааж <0>уулах, кассан даа хан <1>дахын тулд иргэний үнэмлэх, хаягийн нотлох баримтаа ирүүлнэ үү.", "-599998434": "Таны баримт бичиг хянагдаж байгаа хэвээр байгаа тул та сангийн шилжүүлэг хийх боломжгүй. Таны баталгаажуулалтыг баталгаажуулсны дараа бид танд 3 хоногийн дотор имэйлээр мэдэгдэх болно.", "-247122507": "Таны касс түгжигдсэн байна. Үүнийг нээхийн тулд <0>санхүүгийн үнэлгээг бөглөнө үү.", - "-1443721737": "Таны касс түгжигдсэн байна. Цааш үргэлжл <0>үүлэхээсээ өмнө бид таны хөрөнгийг хэрхэн хамгаалж байгааг хараарай.", "-901712457": "Та 30 хоногийн эргэлтийн хязгаарыг тогтооогүй тул таны Касс руу нэвтрэх боломжийг түр хугацаагаар идэвхгүй болгосон байна. Өөрийгөө гадуурхах <0>гэсэн хэсэгт ороод 30 хоногийн эргэлтийн хязгаараараа тогтооно уу.", "-166472881": "Таны <0>хувийн мэдээлэл ду туу байна. Хадгаламж, зарлагын гүйлгээг идэвхжүүлэхийн тулд дансны тохиргоондоо орж хувийн мэдээллээ бөглөнө үү.", "-666905139": "Хадгаламж түгжигдсэн", @@ -2828,7 +2828,6 @@ "-1675848843": "Алдаа", "-283017497": "Дахин оролдоорой", "-1294455996": "P2P гаралтай байдал боломжгүй", - "-1838982691": "ТОДОРХОЙГҮЙ", "-532693866": "Ямар нэг зүйл буруу болсон. Хуудасыг шинэчилж дахин оролдоно уу.", "-1196049878": "Гэрийн хаягийн эхний мөр", "-1326406485": "Шуудангийн код/ZIP", @@ -2837,9 +2836,9 @@ "-1459042184": "Хувийн мэдээллийг шинэчилнэ үү", "-1603543465": "Зарим мэдээлэл алга болсон тул бид таны хувийн мэдээллийг баталгаажуулж чадахгүй.", "-614516651": "Тусламж хэрэгтэй байна уу? <0>Бидэнтэй холбоо бари арай.", - "-203002433": "Одоо хадгалуулаарай", "-720315013": "Таны {{currency}} дансанд ямар ч хөрөнгө байхгүй", "-2052373215": "Энэ функцийг ашиглахын тулд хадгаламж хийнэ үү.", + "-203002433": "Одоо хадгалуулаарай", "-379487596": "Боломжит үлдэгдлийн {{selected_percentage}}% ({{format_amount}} {{currency__display_code}})", "-1957498244": "дэлгэрэнгүй", "-1059419768": "Тэмдэглэл", @@ -3401,7 +3400,6 @@ "-705744796": "Таны демо дансны үлдэгдэл дээд хязгаарт хүрсэн бөгөөд та шинэ арилжаа хийх боломжгүй болно. Демо данснаасаа арилжаа үргэлжлүүлэхийн тулд үлдэгдлээ дахин тохируулна уу.", "-2063700253": "хөгжлийн бэрхшээлтэй", "-1585069798": "Тохиромжын тестээ дуусгахын тулд дараах холбоос дээр дарна уу.", - "-1287141934": "Илүү ихийг олж мэдээрэй", "-367759751": "Таны данс баталгаажуулагдаагүй", "-596690079": "Deriv-г ашиглах таалагдаж байна уу?", "-265932467": "Бид таны бодлыг сонсох дуртай", @@ -3815,6 +3813,13 @@ "-99964540": "Таны ашиг тогтоосон хэмжээгээр хүрэх эсвэл түүнээс хэтэрсэн тохиолдолд таны худалдаа автоматаар хаагдах болно.", "-542594338": "Макс. төлбөр", "-1622900200": "идэвхжүүлсэн", + "-1769815370": "Хаалт нь тавигдсан үнэлгээнд тогтмол байна.", + "-2062696378": "Точийн дээр:", + "-650959802": "Хаалт нь одоогийн точид тулгуурлан хөдөлж, түүний дээгүүр тогтмол зайг хадгалах болно.", + "-445997898": "Хаалт нь одоогийн точид тулгуурлан хөдөлж, түүний доогуур тогтмол зайг хадгалах болно.", + "-1116872874": "Тогтмол үнэ:", + "-635746838": "Точийн доор", + "-548979988": "Тогтмол үнэ", "-2131851017": "Өсөлтийн үзүүлэлт", "-339236213": "Multipliers", "-1396928673": "Эрсдлийн менежмент", diff --git a/packages/translations/src/translations/pl.json b/packages/translations/src/translations/pl.json index 16a45c5dbf24..2381d02c8b8f 100644 --- a/packages/translations/src/translations/pl.json +++ b/packages/translations/src/translations/pl.json @@ -153,6 +153,7 @@ "157871994": "Link wygasł", "158355408": "Niektóre usługi mogą być tymczasowo niedostępne.", "160746023": "Tether jako token Omni (USDT) to wersja Tether hostowana na poziomie Omni w oparciu o technologię blockchain Bitcoin.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Nie wykryto aparatu", "164112826": "Ten blok umożliwia załadowanie bloków z URL, jeśli przechowujesz je na zdalnym serwerze. Zostaną załadowane tylko, jeśli bot jest uruchomiony.", "164564432": "Wpłaty są tymczasowo niedostępne z powodu konserwacji systemu. Możesz dokonać wpłaty po zakończeniu konserwacji.", @@ -187,7 +188,6 @@ "195136585": "Wykres Trading View", "195972178": "Uzyskaj znak", "196810983": "Jeśli czas trwania jest dłuższy niż 24 godziny, zamiast tego zastosowanie mają godzina graniczna i data wygaśnięcia.", - "196998347": "Przechowujemy środki klientów na innych rachunkach bankowych niż nasz rachunek operacyjny. W przypadku niewypłacalności firmy rachunki te nie będą stanowiły jej aktywów. Tym samym spełnione zostają wymagania instytucji <0>Gambling Commission dotyczące oddzielenia funduszy klientów na następującym poziomie: <0>średnia ochrona.", "197190401": "Termin ważności", "201016731": "<0>Zobacz więcej", "201091938": "30 dni", @@ -304,6 +304,7 @@ "312300092": "Usuwa odstępy w danym ciągu lub tekście.", "313741895": "Ten blok zwraca wartość „Prawda”, jeśli ostatnia świeca jest czarna. Można go umieścić w dowolnym miejscu w kanwie z wyjątkiem Parametrów zakładu bloku źródłowego.", "315306603": "Masz konto bez przydzielonej waluty. Wybierz walutę, aby handlować przy użyciu tego konta.", + "315516003": "Odległość do miejsca", "316694303": "Czy świeca jest czarna?", "318705408": "Demo Zero Spread", "318865860": "zamknij", @@ -344,6 +345,7 @@ "351744408": "Sprawdza, czy określony ciąg tekstu jest pusty", "353731490": "Gotowe", "354945172": "Prześlij dokument", + "355647475": "Obecny punkt", "357477280": "Nie rozpoznano twarzy", "357672069": "Weryfikacja dochodów nie powiodła się", "359053005": "Proszę wpisać nazwę tokenu.", @@ -546,7 +548,6 @@ "567163880": "Utwórz hasło {{platform}}", "567755787": "Wymagane jest podanie Numeru Identyfikacji Podatkowej.", "569057236": "Jaki jest kraj wydania dokumentu?", - "571921777": "Poziom ochrony środków", "572576218": "Języki", "573173477": "Czy świeca {{ input_candle }} jest czarna?", "575668969": "3. W przypadku transakcji, które przyniosą zysk, stawka na następną transakcję zostanie zwiększona o 2 USD. Deriv Bot będzie nadal dodawał 2 USD za każdą udaną transakcję. Patrz A1.", @@ -956,7 +957,6 @@ "970915884": " ", "974888153": "High-Low", "975608902": "Aby handlować kontraktami CFD, najpierw załóż konto Deriv Apps.", - "975668699": "Potwierdzam i akceptuję <0>Regulamin {{company}}", "975747761": "Trwający", "975950139": "Kraj zamieszkania", "977647549": "Uwaga: Możesz użyć tego hasła do wszystkich swoich kont {{platform}} .", @@ -1431,6 +1431,7 @@ "1405584799": "z interwałem: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "Kliknij ikonę plus, aby rozszerzyć funkcjonalność tego bloku.", + "1410016796": "Poniżej punktu:", "1411373212": "Silne hasła zawierają co najmniej 8 znaków. łącz wielkie i małe litery, cyfry i symbole.", "1411419173": "Tempo wzrostu: {{ accumulator }}", "1412405902": "Zobacz ważne notatki", @@ -1754,6 +1755,7 @@ "1736292549": "Zaktualizuj kod pocztowy", "1737352280": "Nie wywołano Bot.init", "1738094481": "<0>Czas trwania: 1 tick", + "1738206798": "Powyżej punktu", "1738611950": "O Reverse Martingale", "1738681493": "Zdejmij okulary, jeśli to konieczne", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "Wpłacaj w swojej lokalnej walucie przez autoryzowanego i niezależnego pośrednika płatności w Twoim kraju.", "1867217564": "Indeks musi być dodatnią liczbą całkowitą", "1867783237": "High-to-Close", - "1869315006": "Zobacz, jak chronimy Twoje fundusze, aby odblokować sekcję Kasjer.", "1869486036": "Otrzymają Państwo <0>wypłatę w momencie <0>wygaśnięcia, jeśli cena spot nigdy nie dotknie ani nie przekroczy <0>bariery w okresie obowiązywania kontraktu. Jeśli tak się stanie, Państwa kontrakt zostanie przedterminowo rozwiązany.", "1869787212": "Even", "1870933427": "Krypto", @@ -2811,7 +2812,6 @@ "-541392118": "Twoje konto nie zostało zweryfikowane. Prześlij <0>dowód tożsamości i <1>dowód adresu, aby zweryfikować swoje konto i uzyskać dostęp do sekcji Kasjer.", "-599998434": "Nie możesz dokonać przelewu środków, ponieważ Twoje dokumenty są nadal przeglądane. Powiadomimy Cię e-mailem w ciągu 3 dni po zatwierdzeniu weryfikacji.", "-247122507": "Sekcja Kasjer jest zablokowana. Ukończ <0>ocenę finansową, aby ją odblokować.", - "-1443721737": "Sekcja kasjer jest zablokowana. Zobacz, <0>jak chronić swoje środki, zanim przejdziesz dalej.", "-901712457": "Twój dostęp do sekcji Kasjer został tymczasowo wyłączony, gdyż nie ustawiono30-dniowego limitu obrotów. Przejdź do sekcji <0>Samodzielnego wykluczenia, aby ustawić swój 30-dniowy limit obrotów.", "-166472881": "Twoje <0>dane osobowe są niekompletne. Przejdź do ustawień swojego konta i uzupełnić swoje dane osobowe, aby umożliwić wpłaty i wypłaty.", "-666905139": "Wpłaty są zablokowane", @@ -2828,7 +2828,6 @@ "-1675848843": "Błąd", "-283017497": "Spróbuj ponownie", "-1294455996": "Deriv P2P jest niedostępny", - "-1838982691": "NIEZNANY", "-532693866": "Coś poszło nie tak. Proszę odświeżyć stronę i spróbować ponownie.", "-1196049878": "Pierwsza część adresu zamieszkania", "-1326406485": "Kod pocztowy", @@ -2837,9 +2836,9 @@ "-1459042184": "Zaktualizuj swoje dane osobowe", "-1603543465": "Nie możemy zweryfikować Twoich danych osobowych, gdyż niektóre informacje są niekompletne.", "-614516651": "Potrzebujesz pomocy? <0>Skontaktuj się z nami.", - "-203002433": "Dokonaj wpłaty teraz", "-720315013": "Nie masz żadnych środków na koncie {{currency}}", "-2052373215": "Dokonaj wpłaty, aby użyć tej funkcji.", + "-203002433": "Dokonaj wpłaty teraz", "-379487596": "{{selected_percentage}}% dostępnego salda ({{format_amount}} {{currency__display_code}})", "-1957498244": "więcej", "-1059419768": "Uwagi", @@ -3401,7 +3400,6 @@ "-705744796": "Saldo na Twoim koncie demo osiągnęło maksymalny limit i nie będzie już możliwe zawieranie nowych zakładów. Zresetuj swoje konto, aby kontynuować inwestowanie ze swojego konta demo.", "-2063700253": "wyłączone", "-1585069798": "Kliknij na poniższy link, aby ukończyć ocenę zdolności.", - "-1287141934": "Dowiedz się więcej", "-367759751": "Twoje konto nie zostało zweryfikowane", "-596690079": "Lubisz używać Deriv?", "-265932467": "Chętnie poznamy Twoje zdanie", @@ -3815,6 +3813,13 @@ "-99964540": "Gdy twój zysk osiągnie lub przekroczy ustaloną kwotę, transakcja zostanie zamknięta automatycznie.", "-542594338": "Maksymalna wypłata", "-1622900200": "Włączone", + "-1769815370": "Bariera zostanie ustalona na ustalonej cenie.", + "-2062696378": "Powyżej punktu:", + "-650959802": "Bariera będzie się przemieszczać w stosunku do obecnego punktu, utrzymując ustaloną odległość powyżej.", + "-445997898": "Bariera będzie się przemieszczać w stosunku do obecnego punktu, utrzymując ustaloną odległość poniżej.", + "-1116872874": "Ustalona cena:", + "-635746838": "Poniżej punktu", + "-548979988": "Ustalona cena", "-2131851017": "Tempo wzrostu", "-339236213": "Multiplier", "-1396928673": "Zarządzanie ryzykiem", diff --git a/packages/translations/src/translations/pt.json b/packages/translations/src/translations/pt.json index 01a1745a701e..3e374e78da0e 100644 --- a/packages/translations/src/translations/pt.json +++ b/packages/translations/src/translations/pt.json @@ -153,6 +153,7 @@ "157871994": "Link expirado", "158355408": "Alguns serviços podem estar temporariamente indisponíveis.", "160746023": "A Tether enquanto token Omni (USDT) é uma versão da Tether que está alojada na Omni layer da Blockchain da Bitcoin.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Câmara não detetada", "164112826": "Este bloco permite-lhe carregar blocos a partir de um URL, se os tiver armazenados num servidor remoto, e eles serão carregados apenas quando o seu bot for executado.", "164564432": "Os depósitos estão temporariamente indisponíveis devido à manutenção do sistema. Poderá efetuar os seus depósitos quando a manutenção estiver concluída.", @@ -187,7 +188,6 @@ "195136585": "Gráfico de visualização de negociação", "195972178": "Obter carácter", "196810983": "Se a duração for superior a 24 horas, aplicam-se a hora de fecho e a data de expiração.", - "196998347": "Mantemos os fundos dos clientes em contas bancárias separadas das nossas contas operacionais que, em caso de insolvência, não fariam parte dos ativos da empresa. Isto cumpre os requisitos da <0>Gambling Commission para a segregação dos fundos dos clientes ao nível: <1>proteção média.", "197190401": "Data de expiração", "201016731": "<0>Ver mais", "201091938": "30 dias", @@ -304,6 +304,7 @@ "312300092": "Recorta os espaços numa determinada cadeia ou texto.", "313741895": "Este bloco devolve \"True\" se a última vela for preta. Pode ser colocado em qualquer lugar do ecrã, exceto no bloco base dos parâmetros de negociação.", "315306603": "Tem uma conta que não tem uma moeda atribuída. Por favor, escolha uma moeda para negociar com esta conta.", + "315516003": "Distância até ao ponto atual", "316694303": "A vela é preta?", "318705408": "Demo Zero Spread", "318865860": "fechar", @@ -344,6 +345,7 @@ "351744408": "Testa se uma determinada cadeia de texto está vazia", "353731490": "Trabalho feito", "354945172": "Enviar documento", + "355647475": "Entrada atual", "357477280": "Nenhum rosto encontrado", "357672069": "A validação da prova de rendimentos não foi bem sucedida", "359053005": "Introduza um nome de token.", @@ -546,7 +548,6 @@ "567163880": "Criar palavra-passe {{platform}}", "567755787": "O Número de Identificação Fiscal é obrigatório.", "569057236": "Em que país foi emitido o seu documento?", - "571921777": "Nível de proteção de fundos", "572576218": "Idiomas", "573173477": "A vela {{ input_candle }} é preta?", "575668969": "3. Para negociações que resultam em lucro, a entrada para a próxima negociação será aumentada para 2 USD. A Deriv Bot vai continuar a adicionar 2 USD por cada negociação bem sucedida. Ver A1.", @@ -956,7 +957,6 @@ "970915884": "AN", "974888153": "High-Low", "975608902": "Para negociar CFDs, obtenha primeiro uma conta nas aplicações da Deriv.", - "975668699": "Confirmo e aceito os <0>Termos e Condições da {{company}}", "975747761": "Em curso", "975950139": "País de residência", "977647549": "Nota: Pode utilizar esta palavra-passe para todas as suas contas {{platform}}.", @@ -1431,6 +1431,7 @@ "1405584799": "com intervalo: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "Clique no ícone de adição para ampliar a funcionalidade desse bloco.", + "1410016796": "Abaixo do ponto:", "1411373212": "As palavras-passe fortes contêm pelo menos 8 caracteres e combinam letras maiúsculas e minúsculas, números e símbolos.", "1411419173": "Taxa de crescimento: {{ accumulator }}", "1412405902": "Ver notas importantes", @@ -1754,6 +1755,7 @@ "1736292549": "Atualizar código postal", "1737352280": "Bot.init não foi chamado", "1738094481": "<0>Duração: Ticks 1", + "1738206798": "Acima do ponto", "1738611950": "Sobre o Reverse Martingale", "1738681493": "Retirar os óculos, se necessário", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "Deposite na sua moeda local através de um agente de pagamentos independente e autorizado no seu país.", "1867217564": "O índice deve ser um número inteiro positivo", "1867783237": "High-to-Close", - "1869315006": "Veja como protegemos os seus fundos para desbloquear a caixa.", "1869486036": "Se o preço à vista nunca atingir ou ultrapassar a <0>barreira durante o período do contrato, recebe um <0>pagamento na data de <0>expiração. Caso contrário, o seu contrato será rescindido antecipadamente.", "1869787212": "Even", "1870933427": "Criptomoeda", @@ -2811,7 +2812,6 @@ "-541392118": "A conta não foi autenticada. Apresente o seu <0>comprovativo de identidade e o<1>comprovativo de morada para autenticar a sua conta e aceder à Caixa.", "-599998434": "Não é possível realizar uma transferência de fundos neste momento, os seus documentos ainda estão a ser analisados. Será notificado por e-mail dentro de 3 dias assim que a sua validação for aprovada.", "-247122507": "A Caixa está bloqueada. Por favor, conclua a <0>avaliação financeira para a desbloquear.", - "-1443721737": "A Caixa está bloqueada. Verifique <0>como protegemos os seus fundos antes de continuar.", "-901712457": "O acesso à Caixa encontra-se temporariamente inativo dado que não definiu o seu limite de movimentos de 30 dias. Por favor, aceda a <0>Autoexclusão e defina o seu limite de movimentos de 30 dias.", "-166472881": "Os seus <0>dados pessoais estão incompletos. Aceda às definições da sua conta e preencha os seus dados pessoais para ativar os depósitos e levantamentos.", "-666905139": "Os depósitos estão bloqueados", @@ -2828,7 +2828,6 @@ "-1675848843": "Erro", "-283017497": "Tente novamente", "-1294455996": "Deriv P2P indisponível", - "-1838982691": "DESCONHECIDO", "-532693866": "Ocorreu um erro. Atualize a página e tente novamente.", "-1196049878": "Primeira linha do endereço", "-1326406485": "Código postal/CEP", @@ -2837,9 +2836,9 @@ "-1459042184": "Atualize os seus dados pessoais", "-1603543465": "Não é possível validar os seus dados pessoais porque faltam algumas informações.", "-614516651": "Precisa de ajuda? <0>Entre em contato conosco.", - "-203002433": "Depositar agora", "-720315013": "Não tem fundos na sua conta {{currency}}", "-2052373215": "Para utilizar esta funcionalidade é necessário efetuar um depósito.", + "-203002433": "Depositar agora", "-379487596": "{{selected_percentage}}% do saldo disponível ({{format_amount}} {{currency__display_code}})", "-1957498244": "mais", "-1059419768": "Notas", @@ -3401,7 +3400,6 @@ "-705744796": "O saldo da sua conta demo atingiu o limite máximo e não poderá fazer novas negociações. Redefina o seu saldo para continuar a negociar na sua conta demo.", "-2063700253": "desativado", "-1585069798": "Clique no link a seguir para concluir o seu teste de adequação.", - "-1287141934": "Saiba mais", "-367759751": "Sua conta não foi verificada", "-596690079": "Gosta de usar a Deriv?", "-265932467": "Gostaríamos de saber a sua opinião", @@ -3815,6 +3813,13 @@ "-99964540": "Quando o seu lucro atingir ou exceder este montante definido, a sua transação será fechada automaticamente.", "-542594338": "Pagamento máximo", "-1622900200": "Ativo", + "-1769815370": "A barreira será fixada ao preço definido.", + "-2062696378": "Acima do ponto:", + "-650959802": "A barreira se moverá em relação à entrada atual, mantendo uma distância fixa acima dela.", + "-445997898": "A barreira se moverá em relação à entrada atual, mantendo uma distância fixa abaixo dela.", + "-1116872874": "Preço fixo:", + "-635746838": "Abaixo do ponto", + "-548979988": "Preço fixo", "-2131851017": "Taxa de crescimento", "-339236213": "Multipliers", "-1396928673": "Gestão de risco", diff --git a/packages/translations/src/translations/ru.json b/packages/translations/src/translations/ru.json index 392368d79467..ad86daf2378a 100644 --- a/packages/translations/src/translations/ru.json +++ b/packages/translations/src/translations/ru.json @@ -153,6 +153,7 @@ "157871994": "Срок действия ссылки истек", "158355408": "Некоторые сервисы могут быть временно недоступны.", "160746023": "Tether токен Omni (USDT) — это версия Tether, которая базируется на уровне Omni в блокчейне Биткойн.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Камера не обнаружена", "164112826": "Этот блок позволяет загружать блоки из URL, если они хранятся на удаленном сервере. Они будут загружены только при запуске вашего бота.", "164564432": "Пополнение счета временно недоступно из-за технического обслуживания системы. Вы можете пополнить счет после завершения работ.", @@ -187,7 +188,6 @@ "195136585": "График Trading View", "195972178": "Получить знак", "196810983": "Если длительность составляет более 24 часов, вместо этого будет применяться время завершения и дата истечения.", - "196998347": "Мы держим средства клиентов на банковских счетах, отдельных от наших операционных счетов, чтобы клиентские средства в случае неплатежеспособности Компании не вошли в состав ее активов. Это отвечает требованиям <0>Комиссии по азартным играм по сегрегации средств клиентов на следующем уровне: <1>средняя защита.", "197190401": "Дата истечения", "201016731": "<0>Подробнее", "201091938": "30 дней", @@ -304,6 +304,7 @@ "312300092": "Обрезает пробелы в заданной строке или тексте.", "313741895": "Этот блок возвращает значение “Верно”, если последняя свеча черная. Блок может быть размещен где угодно, за исключением корневого блока параметров контракта.", "315306603": "У вас есть счет, на котором не выбрана валюта. Пожалуйста, выберите валюту, в которой вы хотите торговать на этом счете.", + "315516003": "Расстояние до текущей цены", "316694303": "Свеча чёрная?", "318705408": "Демо Zero Spread", "318865860": "закрыть", @@ -344,6 +345,7 @@ "351744408": "Проверяет, является ли заданная строка текста пустой", "353731490": "Задание выполнено", "354945172": "Отправить документ", + "355647475": "Текущая ставка", "357477280": "Лицо не найдено", "357672069": "Проверка дохода не удалась", "359053005": "Пожалуйста, укажите название токена.", @@ -546,7 +548,6 @@ "567163880": "Создать пароль {{platform}}", "567755787": "Необходимо указать ИНН.", "569057236": "В какой стране был выдан ваш документ?", - "571921777": "Уровень защиты средств", "572576218": "Языки", "573173477": "Свеча {{ input_candle }} черная?", "575668969": "3. Для сделок, в результате которых была получена прибыль, ставка для следующей сделки будет увеличена на 2 USD. Deriv Bot будет продолжать добавлять 2 USD за каждую успешную сделку. См. A1.", @@ -956,7 +957,6 @@ "970915884": " ", "974888153": "High-Low", "975608902": "Чтобы торговать CFD, сначала создайте учетную запись Deriv Apps.", - "975668699": "Я принимаю <0>правила и условия {{company}}", "975747761": "Продолжение", "975950139": "Страна проживания", "977647549": "Примечание: Вы можете использовать этот пароль для всех счетов {{platform}}.", @@ -1431,6 +1431,7 @@ "1405584799": "с интервалом: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "Нажмите значок плюса, чтобы расширить функционал этого блока.", + "1410016796": "Ниже уровня:", "1411373212": "Надежные пароли содержат не менее 8 символов. Комбинируйте прописные и строчные буквы, цифры и символы.", "1411419173": "Темпы роста: {{ accumulator }}", "1412405902": "См. важные примечания", @@ -1754,6 +1755,7 @@ "1736292549": "Обновить индекс", "1737352280": "Bot.init не вызывается", "1738094481": "<0>Длительность: Тики 1", + "1738206798": "Выше уровня", "1738611950": "О Reverse Martingale", "1738681493": "При необходимости снимите очки.", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "Пополняйте счет в местной валюте через авторизованного независимого платежного агента в вашей стране.", "1867217564": "Индекс должен быть положительным целым числом", "1867783237": "High-to-Close", - "1869315006": "Ознакомьтесь с тем, как мы защищаем ваши средства, чтобы разблокировать кассу.", "1869486036": "Вы получите <0>выплату по <0>истечении срока действия контракта, если цена спот никогда не коснется или не пробьет <0>барьер в течение срока действия контракта. Если же это произойдет, то Ваш контракт будет досрочно расторгнут.", "1869787212": "Even", "1870933427": "Крипто", @@ -2036,7 +2037,7 @@ "1990331072": "Подтверждение права собственности", "1990735316": "Повышение равно", "1991055223": "Следите за ценами любимых активов.", - "1991448657": "Не знаете свой ИНН? Нажмите <0>здесь, чтобы узнать больше.", + "1991448657": "Не знаете свой ИНН? Нажмите <0>здесь.", "1991524207": "Индекс Jump 100", "1994023526": "Адрес эл. почты был введен с ошибкой или опечаткой (случается с лучшими из нас).", "1994558521": "Неудобные платформы.", @@ -2416,7 +2417,7 @@ "-138380129": "Максимальная сумма вывода", "-1502578110": "Ваш счет полностью авторизован, и лимит на вывод был снят.", "-506122621": "Пожалуйста, уделите немного времени, чтобы обновить Вашу информацию сейчас.", - "-1106259572": "Не знаете свой идентификационный номер налогоплательщика? <1 />Нажмите <0>здесь, чтобы узнать больше.", + "-1106259572": "Не знаете свой ИНН? <1 />Нажмите <0>здесь.", "-252665911": "Место рождения{{required}}", "-859814496": "Налоговое резидентство{{required}}", "-237940902": "Идентификационный номер налогоплательщика{{required}}", @@ -2811,7 +2812,6 @@ "-541392118": "Ваш счет не был аутентифицирован. Отправьте нам подтверждение вашей <0>личности и <1>адреса, чтобы аутентифицировать счет и получить доступ к кассе.", "-599998434": "Вы не можете перевести средства, так как ваши документы все еще находятся на рассмотрении. Мы уведомим вас по электронной почте в течение 3 дней после подтверждения счета.", "-247122507": "Ваша касса заблокирована. Пройдите <0>финансовую оценку, чтобы получить доступ к кассе.", - "-1443721737": "Ваша касса заблокирована. Прежде чем продолжить, ознакомьтесь с тем, как <0>мы защищаем ваши средства.", "-901712457": "Ваш доступ к кассе был временно заблокирован, так как вы не установили 30-дневный лимит на оборот счета. Перейдите на страницу <0>самоисключения и установите этот лимит.", "-166472881": "Отсутствуют некоторые <0>личные данные. Пожалуйста, перейдите в настройки счета и введите недостающие личные данные, чтобы активировать пополнение и вывод средств.", "-666905139": "Пополнения счета заблокированы", @@ -2828,7 +2828,6 @@ "-1675848843": "Ошибка", "-283017497": "Повторить", "-1294455996": "Deriv P2P недоступен", - "-1838982691": "НЕИЗВЕСТНЫЙ", "-532693866": "Что-то пошло не так. Обновите страницу и попробуйте еще раз.", "-1196049878": "Первая строка адреса", "-1326406485": "Почтовый код/индекс", @@ -2837,9 +2836,9 @@ "-1459042184": "Обновите ваши личные данные", "-1603543465": "Мы не можем подтвердить ваши личные данные, потому что отсутствует некоторая информация.", "-614516651": "Нужна помощь? <0>Свяжитесь с нами.", - "-203002433": "Пополнить сейчас", "-720315013": "На вашем счете {{currency}} нет средств", "-2052373215": "Внесите средства на счет, чтобы воспользоваться этой функцией.", + "-203002433": "Пополнить сейчас", "-379487596": "{{selected_percentage}}% от доступного баланса ({{format_amount}} {{currency__display_code}})", "-1957498244": "больше", "-1059419768": "Примечания", @@ -2974,7 +2973,7 @@ "-2067572496": "Бот остановлен. Все открытые контракты можно посмотреть на странице Отчеты.", "-992003496": "Внесенные Вами изменения не повлияют на работающего бота.", "-1778025545": "Вы успешно импортировали бота.", - "-222838313": "Срок действия Вашей сессии истек. Пожалуйста, войдите снова.", + "-222838313": "Ваша сессия истекла. Пожалуйста, войдите снова.", "-1572746946": "Asian Up", "-686840306": "Asian Downs", "-2141198770": "Higher", @@ -3401,7 +3400,6 @@ "-705744796": "Баланс вашего демо-счета достиг максимального лимита, и вы не сможете совершать новые сделки. Сбросьте баланс, чтобы продолжить торговлю с демо-счета.", "-2063700253": "отключено", "-1585069798": "Перейдите по следующей ссылке, чтобы пройти тест на соответствие.", - "-1287141934": "Узнать больше", "-367759751": "Ваш счет не подтвержден", "-596690079": "Вам нравится Deriv?", "-265932467": "Мы хотели бы узнать ваше мнение", @@ -3411,9 +3409,9 @@ "-1601813176": "Хотите увеличить дневные лимиты до {{max_daily_buy}} {{currency}} (покупка) и {{max_daily_sell}} {{currency}} (продажа)?", "-1751632759": "Быстрый мобильный трейдинг в приложении <0>{{platform_name_go}}!", "-1164554246": "Вы предоставили просроченные документы, удостоверяющие личность", - "-498364310": "Включите пропускной ключ", - "-187109231": "Повысьте уровень своей безопасности", - "-1132350982": "Укрепите безопасность Вашей учетной записи сегодня с помощью новейшей функции passskeys.", + "-498364310": "Включите passkey", + "-187109231": "Повысьте уровень безопасности", + "-1132350982": "Повысьте безопасность счета сегодня с помощью новейшей функции passkeys.", "-219846634": "Давайте верифицируем ваше удостоверение личности", "-529038107": "Установить", "-1738575826": "Переключитесь на реальный счет или создайте его, чтобы получить доступ к кассе.", @@ -3815,6 +3813,13 @@ "-99964540": "Когда прибыль достигнет или превысит установленную сумму, контракт будет закрыт автоматически.", "-542594338": "Макс. выплата", "-1622900200": "Включено", + "-1769815370": "Барьер будет установлен на заданной цене.", + "-2062696378": "Выше уровня:", + "-650959802": "Барьер будет двигаться относительно текущей ставки, поддерживая заданное расстояние выше нее.", + "-445997898": "Барьер будет двигаться относительно текущей ставки, поддерживая заданное расстояние ниже нее.", + "-1116872874": "Фиксированная цена:", + "-635746838": "Ниже уровня", + "-548979988": "Фиксированная цена", "-2131851017": "Темп роста", "-339236213": "Multiplier", "-1396928673": "Управление рисками", diff --git a/packages/translations/src/translations/si.json b/packages/translations/src/translations/si.json index 5c0a27fad6f7..a8c9d0bfe135 100644 --- a/packages/translations/src/translations/si.json +++ b/packages/translations/src/translations/si.json @@ -153,6 +153,7 @@ "157871994": "සබැඳිය කල් ඉකුත් විය", "158355408": "සමහර සේවා තාවකාලිකව ලබා ගත නොහැක.", "160746023": "Omni ටෝකනයක් (USDT) ලෙස Tether යනු Tether අනුවාදයක් වන අතර එය Bitcoin blockchain හි Omni ස්ථරයේ සත්කාරකත්වය දරයි.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "කැමරාව අනාවරණය වී නොමැත", "164112826": "ඔබ දුරස්ථ සේවාදායකයක ගබඩා කර ඇත්නම් URL එකකින් බ්ලොක් එක පූරණය කිරීමට මෙම කොටස ඔබට ඉඩ සලසයි, ඒවා පූරණය වන්නේ ඔබේ බොට් ක්‍රියාත්මක වන විට පමණි.", "164564432": "පද්ධති නඩත්තුව හේතුවෙන් තැන්පතු තාවකාලිකව ලබා ගත නොහැක. නඩත්තුව අවසන් වූ පසු ඔබට ඔබේ තැන්පතු සිදු කළ හැක.", @@ -187,7 +188,6 @@ "195136585": "ගනුදෙනු දර්ශන ප්‍රස්තාර​ය", "195972178": "අක්ෂරය ලබා ගන්න", "196810983": "කාලය පැය 24 ට වඩා වැඩි නම්, කඩඉම් කාලය සහ කල් ඉකුත් වීමේ දිනය ඒ වෙනුවට යොදනු ලැබේ.", - "196998347": "බංකොලොත් භාවයේ දී සමාගමේ වත්කම්වලින් කොටසක් නොවන අපගේ මෙහෙයුම් ගිණුම්වලින් වෙන් වූ බැංකු ගිණුම්වල අපි පාරිභෝගික අරමුදල් තබා ගන්නෙමු. මෙය පාරිභෝගික අරමුදල් මට්ටමින් වෙන් කිරීම සඳහා <0>Gambling Commission හි අවශ්‍යතා සපුරාලයි: <1>මධ්‍යම ආරක්ෂාව.", "197190401": "කල් ඉකුත් වීමේ දිනය", "201016731": "<0>තව බලන්න", "201091938": "දින 30 ක්", @@ -304,6 +304,7 @@ "312300092": "දී ඇති පාඨයක් තුළ ඇති හිස්තැන් කපා දමන්න.", "313741895": "අවසාන candle එක කළු නම් මෙම කොටසෙන් ලැබෙන අගය 'සත්‍ය' වේ. එය ගනුදෙනු පරාමිති මූල කොටස තුළ හැර කැන්වසය මත ඕනෑම තැනක තැබිය හැකිය.", "315306603": "ඔබට මුදල් පවරා නොමැති ගිණුමක් ඇත. කරුණාකර මෙම ගිණුම සමඟ ගනුදෙනු කිරීමට මුදල් ඒකකයක් තෝරන්න.", + "315516003": "වත්මන් ස්ථානයට දුර", "316694303": "Candle කළු ද?", "318705408": "ආදර්ශන ශුන්‍ය ව්‍යාප්ති", "318865860": "වසන්න", @@ -344,6 +345,7 @@ "351744408": "ලබා දී ඇති පාඨ තන්තුව හිස් නම් පරීක්ෂා කරයි", "353731490": "කාර්යය අවසන්", "354945172": "ලේඛනය ඉදිරිපත් කරන්න", + "355647475": "වත්මන් ස්ථානය", "357477280": "මුහුණක් හමු නොවුණි", "357672069": "ආදායම සත්‍යාපනය අසාර්ථකයි", "359053005": "කරුණාකර ටෝකන් නාමයක් ඇතුළත් කරන්න.", @@ -546,7 +548,6 @@ "567163880": "{{platform}} මුරපදයක් සාදන්න", "567755787": "බදු හඳුනාගැනීමේ අංකය අවශ්‍ය වේ.", "569057236": "ඔබේ ලේඛනය නිකුත් කළේ කුමන රටේ ද?", - "571921777": "අරමුදල් ආරක්ෂණ මට්ටම", "572576218": "භාෂා", "573173477": "{{ input_candle }} candle එක කළු පැහැති ද?", "575668969": "3. ලාභ ලබන ගනුදෙනු සඳහා, ඊළඟ ගනුදෙනුවේ කොටස් ඩොලර් 2 කින් වැඩි කරනු ලැබේ. සෑම සාර්ථක ගනුදෙනුවක් සඳහාම Deriv බොට් විසින් 2 USD එකතු කරනු ඇත. A1 බලන්න.", @@ -956,7 +957,6 @@ "970915884": "AN", "974888153": "High-Low", "975608902": "CFDs ගනුදෙනු කිරීමට, පළමුව Deriv Apps ගිණුමක් ලබා ගන්න.", - "975668699": "මම {{company}} හි <0>නියම සහ කොන්දේසි තහවුරු කර පිළිගනිමි", "975747761": "අඛණ්ඩව", "975950139": "පදිංචි රට", "977647549": "සටහන: ඔබගේ සියලුම {{platform}} ගිණුම් සඳහා මෙම මුරපදය භාවිතා කළ හැකිය.", @@ -1431,6 +1431,7 @@ "1405584799": "පරතරය සමඟ: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "මෙම බ්ලොක් එකේ ක්‍රියාකාරීත්වය දීර්ඝ කිරීමට ප්ලස් අයිකනය ක්ලික් කරන්න.", + "1410016796": "Low ස්ථානය:", "1411373212": "ශක්තිමත් මුරපදයක අවම වශයෙන් අනුලකුණු 8 ක් අඩංගු විය යුතුය. කැපිටල් අකුරු සහ සිම්පල් අකුරු, අංක සහ සංකේත ඒකාබද්ධ කරන්න.", "1411419173": "වර්ධන වේගය: {{ accumulator }}", "1412405902": "වැදගත් සටහන් බලන්න", @@ -1754,6 +1755,7 @@ "1736292549": "තැපැල් කේතය යාවත්කාලීන කරන්න", "1737352280": "Bot.init කැඳවා නැත", "1738094481": "<0>කාලසීමාව​: 1 ටික් එකක්", + "1738206798": "Above spot", "1738611950": "Reverse Martingale ගැන", "1738681493": "අවශ්‍ය නම්, ඔබේ කණ්ණාඩි ඉවත් කරන්න", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "ඔබේ රටේ බලයලත් ස්වාධීන ගෙවීම් නියෝජිතයෙකු හරහා ඔබේ දේශීය මුදල් තැන්පත් කරන්න.", "1867217564": "දර්ශකය ධන නිඛිලයක් විය යුතුය", "1867783237": "High-සිට-Close", - "1869315006": "අයකැමි අගුලු හැරීමට අපි ඔබේ අරමුදල් ආරක්ෂා කරන්නේ කෙසේදැයි බලන්න.", "1869486036": "ගිවිසුම් කාලය තුළ ස්ථානීය මිල කිසිවිටකත් <0>බාධකයක් ස්පර්ශ නොකළහොත් හෝ කඩ නොකළහොත් ඔබට <0>කල් ඉකුත් වීමේදී <0>ගෙවීමක් ලැබේ. එය එසේ වුවහොත්, ඔබේ ගිවිසුම කලින් අවසන් කරනු ලැබේ.", "1869787212": "Even", "1870933427": "ක්‍රිප්ටෝ", @@ -2811,7 +2812,6 @@ "-541392118": "ඔබේ ගිණුම සත්‍යාපනය කර නොමැත. ඔබේ ගිණුම සත්‍යාපනය කිරීමට සහ ඔබේ අයකැමි වෙත ප්‍රවේශ වීමට කරුණාකර ඔබේ <0>අනන්‍යතාව සනාථ කිරීම සහ <1>ලිපින අනන්‍යතාව සනාථ කිරීම ඉදිරිපත් කරන්න.", "-599998434": "ඔබේ ලේඛන තවමත් සමාලෝචනය වෙමින් පවතින බැවින් ඔබට අරමුදල් හුවමාරුවක් සිදු කළ නොහැක. ඔබේ සත්‍යාපනය අනුමත වූ පසු දින 3ක් ඇතුළත අපි ඔබට ඊ-තැපෑලෙන් දැනුම් දෙන්නෙමු.", "-247122507": "ඔබේ මුදල් අයකැමිය අගුලු දමා ඇත. කරුණාකර එය අගුලු හැරීමට <0>මූල්‍ය තක්සේරුව සම්පූර්ණ කරන්න.", - "-1443721737": "ඔබේ අයකැමි අගුලු දමා ඇත. ඉදිරියට යාමට පෙර <0>අපි ඔබේ අරමුදල් ආරක්ෂා කරන ආකරය බලන්න.", "-901712457": "ඔබ ඔබේ දින 30 පිරිවැටුම් සීමාව සකසා නොමැති නිසා අයකැමි වෙත ඔබේ ප්‍රවේශය තාවකාලිකව අබල කර ඇත. කරුණාකර <0>ස්වයං ව්‍යවර්තන වෙත ගොස් ඔබේ දින-30 පිරිවැටුම් සීමාව සකසන්න.", "-166472881": "ඔබේ <0>පුද්ගලික විස්තර අසම්පූර්ණයි. තැන්පතු සහ මුදල් ආපසු ගැනීම් සබල කිරීමට කරුණාකර ඔබේ ගිණුම් සැකසීම් වෙත ගොස් ඔබේ පුද්ගලික තොරතුරු සම්පූර්ණ කරන්න.", "-666905139": "තැන්පතු අගුලු දමා ඇත", @@ -2828,7 +2828,6 @@ "-1675848843": "දෝෂයකි", "-283017497": "නැවත උත්සාහ කරන්න", "-1294455996": "Deriv P2P ලබා ගත නොහැක", - "-1838982691": "නොදන්නා", "-532693866": "යමක් වැරදිණි. කරුණාකර පිටුව නැවුම් කර නැවත උත්සාහ කරන්න.", "-1196049878": "නිවසේ ලිපිනයේ පළමු පේළිය", "-1326406485": "තැපැල් කේතය/ZIP", @@ -2837,9 +2836,9 @@ "-1459042184": "ඔබගේ පෞද්ගලික තොරතුරු යාවත්කාලීන කරන්න", "-1603543465": "සමහර තොරතුරු අස්ථානගත වී ඇති බැවින් අපට ඔබේ පුද්ගලික තොරතුරු තහවුරු කළ නොහැක.", "-614516651": "උදව් අවශ්‍යද? <0>අප අමතන්න.", - "-203002433": "දැන් තැන්පත් කරන්න", "-720315013": "ඔබට ඔබගේ {{currency}} ගිණුමේ මුදල් නොමැත", "-2052373215": "මෙම විශේෂාංගය භාවිත කිරීමට කරුණාකර තැන්පතුවක් සිදු කරන්න.", + "-203002433": "දැන් තැන්පත් කරන්න", "-379487596": "පවතින ශේෂයෙන් {{selected_percentage}}% ({{format_amount}} {{currency__display_code}})", "-1957498244": "තවත්", "-1059419768": "සටහන්", @@ -3401,7 +3400,6 @@ "-705744796": "ඔබේ ආදර්ශන ගිණුම් ශේෂය උපරිම සීමාවට පැමිණ ඇති අතර, ඔබට නව ගනුදෙනු කිරීමට නොහැකි වනු ඇත. ඔබේ ආදර්ශන ගිණුමෙන් දිගටම ගනුදෙනු කිරීමට ඔබේ ශේෂය යළි සකසන්න.", "-2063700253": "අබල කර ඇත", "-1585069798": "ඔබේ යෝග්‍යතා පරීක්ෂණය සම්පූර්ණ කිරීමට කරුණාකර පහත සබැඳිය ක්ලික් කරන්න.", - "-1287141934": "තව දැනගන්න", "-367759751": "ඔබගේ ගිණුම සත්‍යාපනය කර නොමැත", "-596690079": "Deriv භාවිතයෙන් සතුටක් ලබනවා ද?", "-265932467": "අපි ඔබේ අදහස් ඇසීමට කැමතියි", @@ -3815,6 +3813,13 @@ "-99964540": "ඔබේ ලාභය මෙම ප්‍රමාණයට ළඟා වූ විට හෝ එය ඉක්මවා ගිය විට, ඔබේ ගනුදෙනුව ස්වයංක්‍රීයව වසා දමනු ඇත.", "-542594338": "උපරිම ගෙවීම", "-1622900200": "සක්රීය", + "-1769815370": "කෙළවා හැරීමේ සීමාව සකස් කල මිලට ස්ථාපිත කෙරීමෙනි.", + "-2062696378": "Above spot:", + "-650959802": "සීමාව වත්මන් ස්ථානයට අනූව ප්‍රමුඛ සීමාව කMaintainකරමින් ගමන් කරනු ලැබේ.", + "-445997898": "සීමාව වත්මන් ස්ථානයට අනූව පහළ සීමාව කMaintainකරමින් ගමන් කරනු ලැබේ.", + "-1116872874": "ස්ථිර මිල:", + "-635746838": "Low ස්ථානය", + "-548979988": "ස්ථිර මිල", "-2131851017": "වර්ධන වේගය", "-339236213": "Multiplier", "-1396928673": "අවදානම් කළමනාකරණය", diff --git a/packages/translations/src/translations/sw.json b/packages/translations/src/translations/sw.json index 61b891f1cf53..d4c6fc758133 100644 --- a/packages/translations/src/translations/sw.json +++ b/packages/translations/src/translations/sw.json @@ -153,6 +153,7 @@ "157871994": "Kiunganishi kimeisha muda", "158355408": "Huenda baadhi ya huduma zisipatikane kwa muda.", "160746023": "Tether kama tokeni ya Omni (USDT) ni toleo la Tether ambalo linashughulikiwa kwenye safu ya Omni kwenye Bitcoin blockchain.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Kamera haijatambuliwa", "164112826": "Kizuizi hiki hukuruhusu kupakia vizuizi kutoka kwa URL ikiwa umevihifadhi kwenye seva ya mbali, na vitapakiwa tu wakati bot yako inapofanya kazi.", "164564432": "Haiwezekani kuweka pesa kwa muda kutokana na matengenezo ya mfumo. Unaweza kuweka pesa zako wakati matengenezo yamekamilika.", @@ -187,7 +188,6 @@ "195136585": "Chati ya Mtazamo wa Biashara", "195972178": "Pata tabia", "196810983": "Ikiwa muda utakuwa ni zaidi ya masaa 24, basi wakati wa mwisho na tarehe ya kumalizika muda hutumika badala yake.", - "196998347": "Tunashikilia fedha za wateja katika akaunti za benki tofauti na akaunti zetu za uendeshaji ambazo katika tukio la ufilisi, hazitakuwa sehemu ya mali za kampuni. Hili linakidhi mahitaji ya <0>Tume ya Kamari ya kutenganisha fedha za wateja katika ngazi ya: <1>ulinzi wa kati.", "197190401": "Tarehe ya kumalizika muda", "201016731": "<0>Tazama zaidi", "201091938": "siku 30", @@ -304,6 +304,7 @@ "312300092": "Hupunguza nafasi ndani ya strings au maandishi fulani.", "313741895": "Kizuizi hiki kinakuwa “Kweli” ikiwa candle ya mwisho ni nyeusi. Inaweza kuwekwa mahali popote kwenye canvas isipokuwa ndani ya kizuizi cha vigezo vya Biashara.", "315306603": "Una akaunti ambayo haina aina ya sarafu. Tafadhali chagua sarafu ya kufanya biashara na akaunti hii.", + "315516003": "Umbali hadi bei ya sasa", "316694303": "Je, candle ni nyeusi?", "318705408": "Demo Zero Spread", "318865860": "funga", @@ -344,6 +345,7 @@ "351744408": "Majaribio ikiwa kamba ya maandishi iliyopewa ni tupu", "353731490": "Kazi imefanywa", "354945172": "Tuma hati", + "355647475": "Dau la sasa", "357477280": "Hakuna uso uliopatikana", "357672069": "Uthibitishaji wa mapato uli", "359053005": "Tafadhali ingiza jina la ishara.", @@ -546,7 +548,6 @@ "567163880": "Unda nenosiri la {{platform}}", "567755787": "Nambari ya Utambulisho wa Kodi inahitajika.", "569057236": "Katika nchi gani hati yako ilitolewa?", - "571921777": "Kiwango cha ulinzi wa fedha", "572576218": "Lugha", "573173477": "Je, candle {{ input_candle }} ni nyeusi?", "575668969": "3. Kwa biashara ambazo husababisha faida, dau la biashara inayofuata litaongezeka kwa USD 2. Deriv Bot itaendelea kuongeza USD 2 kwa kila biashara iliyofanikiwa. Tazama A1.", @@ -956,7 +957,6 @@ "970915884": "AN", "974888153": "High-Low", "975608902": "Ili kufanya biashara ya CFDs, pata akaunti ya Deriv Apps kwanza.", - "975668699": "Ninathibitisha na kukubali <0>Vigezo na Masharti ya {{company}} ", "975747761": "Inaendelea", "975950139": "Nchi ya Makazi", "977647549": "Kumbuka: Unaweza kutumia nenosiri hili kwa akaunti zako zote za {{platform}} .", @@ -1431,6 +1431,7 @@ "1405584799": "na kipindi cha muda: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "Bonyeza ikoni ya jumlisha ili kupanua utendaji wa kizuizi hiki.", + "1410016796": "Chini ya spot:", "1411373212": "Nywila zenye nguvu zina angalau herufi 8. changanya herufi kubwa na ndogo, nambari, na alama.", "1411419173": "Kiwango cha ukuaji: {{ accumulator }}", "1412405902": "Tazama maelezo muhimu", @@ -1754,6 +1755,7 @@ "1736292549": "Sasisha msimbo wa posta", "1737352280": "Bot.init haijaitwa", "1738094481": "<0>Muda: Tick 1", + "1738206798": "Juu ya spot", "1738611950": "Kuhusu Reverse Martingale", "1738681493": "Ondoa miwani yako, kama inawezekana", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "Weka pesa kwa sarafu yako ya ndani kupitia wakala huru wa malipo aliyeidhinishwa katika nchi yako.", "1867217564": "Kielelezo lazima iwe na jumla nzuri", "1867783237": "High-to-Close", - "1869315006": "Angalia jinsi tunavyolinda fedha zako ili kufungua keshia.", "1869486036": "Unapokea <0>malipo wakati wa <0>kumalizika mkataba ikiwa bei iliyopo haigusa au kukiuka <0>kizuizi wakati wa kipindi cha mkataba. Ikiwa itavuka, mkataba wako utasitishwa mapema.", "1869787212": "Even", "1870933427": "Kripto", @@ -2811,7 +2812,6 @@ "-541392118": "Akaunti yako haijathibitishwa. Tafadhali wasilisha <0>uthibitisho wako wa kitambulisho na <1>uthibitisho wa anwani ili kuthibitisha akaunti yako na kuweza kufikia cashier.", "-599998434": "Huwezi kufanya uhamishaji wa fedha kwani hati zako bado zinakaguliwa. Tutakujulisha kwa barua pepe ndani ya siku 3 mara tu uthibitishaji wako utakapoidhinishwa.", "-247122507": "Cashier yako imefungwa. Tafadhali kamilisha <0>tathmini ya kifedha ili kufungua.", - "-1443721737": "Cashier yako imefungwa. Angalia <0>jinsi tunavyolinda fedha zako kabla ya kuendelea.", "-901712457": "Ufikiaji wako wa Cashier umezuiliwa kwa muda kwakuwa haujaweka kikomo chako cha mauzo ya siku 30. Tafadhali nenda kwenye <0>Kujitenga-binafsi na uweke kikomo chako cha mauzo ya siku 30.", "-166472881": "Taarifa zako <0>za kibinafsi hazijakamilika. Tafadhali nenda kwenye mipangilio ya akaunti yako na ukamilisha taarifa zako za kibinafsi ili kuwezesha uwekaji na utoaji pesa.", "-666905139": "Uwekaji pesa umefungwa", @@ -2828,7 +2828,6 @@ "-1675848843": "Hitilafu", "-283017497": "Jaribu tena", "-1294455996": "Deriv P2P haipatikani", - "-1838982691": "HAIJULIKANI", "-532693866": "Kuna kitu kilienda vibaya. Tafadhali refreshi ukurasa na jaribu tena.", "-1196049878": "Mstari wa kwanza wa anwani ya nyumbani", "-1326406485": "Msimbo wa Posta/Zip", @@ -2837,9 +2836,9 @@ "-1459042184": "Sasisha taarifa zako binafsi", "-1603543465": "Hatuwezi kuthibitisha taarifa zako binafsi kwa sababu kuna baadhi ya taarifa hazipo.", "-614516651": "Unahitaji msaada? <0>Wasiliana nasi.", - "-203002433": "Weka pesa sasa", "-720315013": "Hauna fedha kwenye akaunti yako ya {{currency}}", "-2052373215": "Tafadhali weka pesa ili kutumia huduma hii.", + "-203002433": "Weka pesa sasa", "-379487596": "{{selected_percentage}}% ya salio linalopatikana ({{format_amount}} {{currency__display_code}})", "-1957498244": "zaidi", "-1059419768": "Kumbuka", @@ -3401,7 +3400,6 @@ "-705744796": "Salio lako la akaunti ya demo limefikia kikomo cha juu, na hautaweza kuweka biashara mpya. Weka upya salio lako ili kuendelea na biashara katika akaunti yako ya demo.", "-2063700253": "imezimwa", "-1585069798": "Tafadhali bonyeza kiunganishi kifuatacho ili kukamilisha Jaribio la Ufanisi.", - "-1287141934": "Pata maelezo zaidi", "-367759751": "Akaunti yako haijathibitishwa", "-596690079": "Je, unafurahia kutumia Deriv?", "-265932467": "Tungependa kusikia mawazo yako", @@ -3815,6 +3813,13 @@ "-99964540": "Wakati faida yako inapofikia au kuzidi kiasi kilichowekwa, biashara yako itafungwa otomatiki.", "-542594338": "Max. malipo", "-1622900200": "Imewezesha", + "-1769815370": "Kizuizi kitarekebishwa kwa bei iliyoandikwa.", + "-2062696378": "Juu ya spot:", + "-650959802": "Kizuizi kitahamia kulingana na dau la sasa, kikiwa na umbali fulani juu yake.", + "-445997898": "Kizuizi kitahamia kulingana na dau la sasa, kikiwa na umbali fulani chini yake.", + "-1116872874": "Bei iliyowekwa:", + "-635746838": "Chini ya spot", + "-548979988": "Bei iliyowekwa", "-2131851017": "Kiwango cha ukuaji", "-339236213": "Multiplier", "-1396928673": "Usimamizi wa Hatari", diff --git a/packages/translations/src/translations/th.json b/packages/translations/src/translations/th.json index 7ee42eca6389..6af2bd2240b3 100644 --- a/packages/translations/src/translations/th.json +++ b/packages/translations/src/translations/th.json @@ -153,6 +153,7 @@ "157871994": "ลิงก์หมดอายุ", "158355408": "บริการบางอย่างอาจไม่สามารถใช้งานได้ชั่วคราว", "160746023": "เหรียญดิจิทัล Tether Omni (USDT) นั้นเป็นเวอร์ชันหนึ่งของเหรียญโทเคน Tether ที่ถูกผูกมูลค่าไว้กับค่าเงิน USD โดยถูกสร้างขึ้นโดยใช้แพลตฟอร์ม Omni layer บนเครือข่าย Bitcoin blockchain", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "ตรวจไม่พบกล้อง", "164112826": "บล็อกนี้อนุญาตให้คุณโหลดบล็อกมาจาก URL ได้หากว่าคุณเก็บบล๊อกเหล่านั้นไว้ในเซิร์ฟเวอร์ระยะไกล ทั้งนี้บล๊อกเหล่านั้นจะถูกโหลดก็ต่อเมื่อบอทของคุณกำลังทำงานเท่านั้น", "164564432": "เงินฝากไม่สามารถใช้ได้ชั่วคราวเนื่องจากมีการบำรุงรักษาระบบ คุณจะสามารถฝากเงินได้ก็ต่อเมื่อการบำรุงรักษาระบบเสร็จสิ้นแล้ว", @@ -187,7 +188,6 @@ "195136585": "กราฟแผนภูมิ Trading View", "195972178": "รับอักขระ", "196810983": "หากระยะเวลายาวนานกว่า 24 ชั่วโมง เวลาที่กำหนดปิด (Cut-off time) และวันหมดอายุจะถูกนำมาใช้แทน", - "196998347": "เราเก็บรักษาเงินทุนของลูกค้าไว้ในบัญชีธนาคารที่แยกออกจากบัญชีที่ใช้ในการดำเนินงานของเรา ดังนั้นจึงจะไม่ถือว่าเป็นส่วนหนึ่งของสินทรัพย์ของบริษัทในกรณีที่มีการล้มละลาย ซึ่งอันนี้ก็เป็นไปตามข้อกำหนดของ <0>Gambling Commission ที่ระบุให้มีการแยกเงินของลูกค้าออกมาตามระดับ: <1>การป้องกันระดับกลาง", "197190401": "วันหมดอายุ", "201016731": "<0>ดูเพิ่มเติม", "201091938": "30 วัน", @@ -304,6 +304,7 @@ "312300092": "ตัดแต่งช่องว่างภายในสตริงหรือข้อความที่กำหนด", "313741895": "บล็อกนี้จะส่งคืนค่า “จริง” หากว่าแท่งเทียนสุดท้ายเป็นสีดำ มันสามารถถูกวางที่ใดก็ได้บนผืนผ้าใบ เว้นแต่ภายในบล็อกรูทพารามิเตอร์การเทรด", "315306603": "คุณมีบัญชีที่ไม่มีการกำหนดสกุลเงิน โปรดเลือกสกุลเงินเพื่อจะทำการเทรดด้วยบัญชีนี้", + "315516003": "ระยะห่างจากจุดปัจจุบัน", "316694303": "แท่งเทียนเป็นสีดำหรือไม่", "318705408": "บัญชีทดลอง Zero Spread", "318865860": "ปิด", @@ -344,6 +345,7 @@ "351744408": "ทดสอบว่า สตริงข้อความนั้นว่างเปล่าหรือไม่", "353731490": "งานที่เสร็จแล้ว", "354945172": "ส่งเอกสาร", + "355647475": "จุดปัจจุบัน", "357477280": "ตรวจไม่พบใบหน้า", "357672069": "การยืนยันการมีรายได้ล้มเหลว", "359053005": "โปรดใส่ชื่อโทเคน", @@ -546,7 +548,6 @@ "567163880": "สร้างรหัสผ่าน {{platform}}", "567755787": "โปรดระบุเลขประจำตัวผู้เสียภาษี", "569057236": "เอกสารของคุณออกในประเทศใด", - "571921777": "ระดับการคุ้มครองเงินทุน", "572576218": "ภาษา", "573173477": "แท่งเทียน {{ input_candle }} เป็นสีดำหรือไม่?", "575668969": "3. สำหรับการเทรดที่นำสู่กำไร เงินทุนทรัพย์ในการเทรดครั้งถัดไปจะเพิ่มขึ้น 2 USD โดย Deriv Bot จะยังคงเพิ่ม 2 USD สำหรับทุกการเทรดที่ประสบความสำเร็จ ดู A1", @@ -956,7 +957,6 @@ "970915884": "AN", "974888153": "High-Low", "975608902": "หากต้องการเทรด CFD ให้รับบัญชี Deriv Apps ก่อน", - "975668699": "ข้าพเจ้ายืนยันและยอมรับ <0>ข้อกำหนดและเงื่อนไข ของ {{company}}", "975747761": "กำลังดำเนินอยู่", "975950139": "ประเทศที่พำนัก", "977647549": "หมายเหตุ: คุณสามารถใช้รหัสผ่านนี้สำหรับบัญชี {{platform}} ทั้งหมดของคุณ", @@ -1431,6 +1431,7 @@ "1405584799": "ด้วยช่วงเวลา: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "คลิกที่ไอคอนเครื่องหมายบวกเพื่อขยายการทำงานของบล็อกนี้", + "1410016796": "จุดด้านล่าง:", "1411373212": "รหัสผ่านที่คาดเดายากประกอบไปด้วยอักขระอย่างน้อย 8 ตัว รวมตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ตัวเลข และสัญลักษณ์ต่างๆ", "1411419173": "อัตราการเติบโต: {{ accumulator }}", "1412405902": "ดูหมายเหตุสำคัญ", @@ -1754,6 +1755,7 @@ "1736292549": "อัพเดตรหัสไปรษณีย์", "1737352280": "Bot.init ไม่ถูกเรียกใช้", "1738094481": "<0>ระยะเวลา: จุด Tick 1", + "1738206798": "ด้านบนจุด", "1738611950": "ข้อมูลเกี่ยวกับกลยุทธ์ Reverse Martingale", "1738681493": "ถอดแว่นตาของคุณออก หากจำเป็น", "1739086943": "วอลสตรีท 30", @@ -1897,7 +1899,6 @@ "1866811212": "ฝากเงินในสกุลเงินท้องถิ่นของคุณผ่านตัวแทนการชำระเงินอิสระที่ได้รับอนุญาตในประเทศของคุณ", "1867217564": "ดัชนีต้องเป็นจำนวนเต็มบวก", "1867783237": "High-to-Close", - "1869315006": "ดูวิธีที่เราปกป้องเงินของคุณเพื่อปลดล็อกแคชเชียร์", "1869486036": "คุณจะได้รับ <0>เงินผลตอบแทน ที่ <0>จุดหมดเวลา หากว่าราคาสปอตนั้นไม่เคยแตะหรือฝ่าทะเลุ <0>เส้นระดับราคาเป้าหมาย ตลอดช่วงเวลาสัญญา แต่หากว่าแตะหรือฝ่าเส้น สัญญาของคุณก็จะถูกยกเลิกก่อนกำหนด", "1869787212": "Even", "1870933427": "สกุลเงินคริปโต", @@ -2811,7 +2812,6 @@ "-541392118": "บัญชีของคุณยังไม่ได้รับการพิสูจน์ยืนยัน โปรดส่ง<0>หลักฐานระบุตัวตนและ<1>หลักฐานที่อยู่เพื่อยืนยันตัวตนและเข้าถึงแคชเชียร์ของคุณ", "-599998434": "คุณไม่สามารถทำการโอนเงินได้เพราะเอกสารของคุณยังอยู่ระหว่างการตรวจสอบ เราจะแจ้งให้คุณทราบทางอีเมล์ภายใน 3 วันเมื่อการยืนยันของคุณได้รับการอนุมัติ", "-247122507": "แคชเชียร์ของคุณถูกล็อค โปรดกรอก <0>การประเมินทางการเงิน เพื่อปลดล็อก", - "-1443721737": "แคชเชียร์ของคุณถูกล็อค ดู<0>วิธีที่เราปกป้องเงินของคุณก่อนดำเนินการต่อ", "-901712457": "การเข้าถึงแคชเชียร์ของคุณถูกปิดใช้งานชั่วคราว เนื่องจากคุณยังไม่ได้กำหนดวงเงินหมุนเวียน 30 วันของคุณ โปรดไปที่ <0>การกันตนเอง และกำหนดวงเงินหมุนเวียนใน 30 วันของคุณ", "-166472881": "<0>รายละเอียดส่วนบุคคล ของคุณยังไม่ครบถ้วน โปรดไปที่การตั้งค่าบัญชีของคุณและกรอกรายละเอียดส่วนบุคคลของคุณให้สมบูรณ์เพื่อเปิดใช้งานการฝากและถอนเงิน", "-666905139": "การฝากเงินถูกล็อค", @@ -2828,7 +2828,6 @@ "-1675848843": "เกิดข้อผิดพลาด", "-283017497": "ลองใหม่อีกครั้ง", "-1294455996": "Deriv P2P ไม่พร้อมใช้งาน", - "-1838982691": "ไม่รู้จัก", "-532693866": "มีบางอย่างผิดปกติโปรดรีเฟรชหน้าเว็บและลองอีกครั้ง", "-1196049878": "บรรทัดแรกของที่อยู่", "-1326406485": "รหัสไปรษณีย์", @@ -2837,9 +2836,9 @@ "-1459042184": "อัพเดตรายละเอียดส่วนตัวของคุณ", "-1603543465": "เราไม่อาจตรวจสอบรายละเอียดส่วนบุคคลของคุณได้เพราะมีข้อมูลบางอย่างขาดหายไป", "-614516651": "ต้องการความช่วยเหลือหรือไม่? <0>ติดต่อเรา", - "-203002433": "ฝากเงินตอนนี้", "-720315013": "คุณไม่มีเงินในบัญชี {{currency}} ของคุณ", "-2052373215": "โปรดทำการฝากเงินเพื่อใช้ฟีเจอร์ลูกเล่นอันนี้", + "-203002433": "ฝากเงินตอนนี้", "-379487596": "{{selected_percentage}}% ของยอดเงินคงเหลือที่ใช้ได้ ({{format_amount}} {{currency__display_code}})", "-1957498244": "เพิ่มอีก", "-1059419768": "หมายเหตุ", @@ -3401,7 +3400,6 @@ "-705744796": "ยอดเงินในบัญชีทดลองของคุณถึงขีดจำกัดสูงสุดแล้วและคุณจะไม่สามารถทำการเทรดใหม่ได้ ขอให้คุณรีเซ็ตยอดเงินของคุณเพื่อทำการเทรดจากบัญชีทดลองของคุณต่อไปได้", "-2063700253": "ปิดใช้งานแล้ว", "-1585069798": "โปรดคลิกลิงก์ต่อไปนี้เพื่อทำแบบทดสอบความเหมาะสมของคุณ", - "-1287141934": "ดูข้อมูลเพิ่มเติม", "-367759751": "บัญชีของคุณยังไม่ได้รับการยืนยัน", "-596690079": "สนุกกับการใช้งาน Deriv หรือไม่?", "-265932467": "เราอยากฟังความคิดเห็นของคุณ", @@ -3815,6 +3813,13 @@ "-99964540": "เมื่อกำไรของคุณถึงหรือเกินจำนวนที่ตั้งค่าไว้นี้ การเทรดของคุณจะถูกปิดโดยอัตโนมัติ", "-542594338": "เงินผลตอบแทนขั้นสูงสุด", "-1622900200": "เปิดใช้งานแล้ว", + "-1769815370": "กำแพงจะถูกตั้งไว้ที่ราคาที่กำหนด", + "-2062696378": "ด้านบนจุด:", + "-650959802": "กำแพงจะเคลื่อนที่ไปตามจุดปัจจุบัน โดยจะรักษาระยะห่างที่กำหนดไว้อยู่เหนือจุดนั้น", + "-445997898": "กำแพงจะเคลื่อนที่ไปตามจุดปัจจุบัน โดยจะรักษาระยะห่างที่กำหนดไว้ใต้จุดนั้น", + "-1116872874": "ราคาที่ตั้งไว้:", + "-635746838": "ด้านล่างจุด", + "-548979988": "ราคาที่ตั้งไว้", "-2131851017": "อัตราการเติบโต", "-339236213": "Multiplier", "-1396928673": "การบริหารความเสี่ยง", diff --git a/packages/translations/src/translations/tr.json b/packages/translations/src/translations/tr.json index 292cee9bee6a..c69f111e55fa 100644 --- a/packages/translations/src/translations/tr.json +++ b/packages/translations/src/translations/tr.json @@ -153,6 +153,7 @@ "157871994": "Bağlantının süresi doldu", "158355408": "Bazı hizmetler geçici olarak kullanılamayabilir.", "160746023": "Bir Omni token (USDT) olarak Tether, Bitcoin blok zincirindeki Omni katmanında barındırılan bir Tether sürümüdür.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Kamera algılanmadı", "164112826": "Bu blok, uzak bir sunucuda depolanmışsa bir URL'den bloklar yüklemenizi sağlar ve yalnızca botunuz çalıştığında yüklenecektir.", "164564432": "Sistem bakımı nedeniyle para yatırma işlemleri geçici olarak kullanılamıyor. Bakım tamamlandığında deposit işlemlerini yapabilirsiniz.", @@ -187,7 +188,6 @@ "195136585": "Trading View Grafiği", "195972178": "Karakter alın", "196810983": "Süre 24 saatten fazlaysa, bunun yerine Kesme saati ve Bitiş tarihi geçerli olacaktır.", - "196998347": "Müşteri fonlarını, iflas durumunda şirketin varlıklarının bir parçasını oluşturmayan operasyonel hesaplarımızdan ayrı olarak banka hesaplarında tutuyoruz. Bu, <0>Bahis Komisyonu tarafından müşteri fonlarının ayrılmasına ilişkin gereksinimlerini karşılamaktdır: <1>medium koruma.", "197190401": "Son kullanma tarihi", "201016731": "<0>Daha fazla görüntüle", "201091938": "30 gün", @@ -304,6 +304,7 @@ "312300092": "Belirli bir dize veya metin içindeki boşlukları kırpar.", "313741895": "Bu blok, son mum siyahsa “Doğru” sonucunu verir. Ticari parametreler kök bloğu hariç kanvas üzerinde herhangi bir yere yerleştirilebilir.", "315306603": "Para birimi atanmamış bir hesabınız var. Lütfen bu hesapla işlem yapmak için bir para birimi seçin.", + "315516003": "Mevcut noktaya olan mesafe", "316694303": "Mum siyah mı?", "318705408": "Demo Zero Spread", "318865860": "kapanış", @@ -344,6 +345,7 @@ "351744408": "Belirli bir metin dizesinin boş olup olmadığını test eder", "353731490": "İş tamamlandı", "354945172": "Belgeyi gönderin", + "355647475": "Mevcut spot", "357477280": "Yüz bulunamadı", "357672069": "Gelir doğrulaması başarısız oldu", "359053005": "Lütfen bir token adı girin.", @@ -546,7 +548,6 @@ "567163880": "Bir {{platform}} parolası oluştur", "567755787": "Vergi Kimlik Numarası gereklidir.", "569057236": "Belgeniz hangi ülkede verildi?", - "571921777": "Fon koruma seviyesi", "572576218": "Diller", "573173477": "{{ input_candle }} mumu siyah mı?", "575668969": "3. Kârla sonuçlanan işlemler için, bir sonraki işlemin hissesi 2 USD artırılacaktır. Deriv Bot, her başarılı işlem için 2 USD eklemeye devam edecek. Bkz. A1.", @@ -956,7 +957,6 @@ "970915884": "BİR", "974888153": "High-Low", "975608902": "CFD ticareti yapmak için önce bir Deriv Apps hesabı edinin.", - "975668699": "{{company}} 'in <0>Şartlar ve Koşullarını onaylıyor ve kabul ediyorum", "975747761": "Devam Ediyor", "975950139": "İkamet edilen ülke", "977647549": "Not: Bu parolayı tüm {{platform}} hesaplarınız için kullanabilirsiniz.", @@ -1431,6 +1431,7 @@ "1405584799": "aralık ile: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "Bu bloğun işlevini genişletmek için artı simgesini tıklayın.", + "1410016796": "Düşük nokta:", "1411373212": "Güçlü parolalar en az 8 karakter içerir. büyük ve küçük harfleri, sayıları ve sembolleri birleştirin.", "1411419173": "Büyüme Oranı: {{ accumulator }}", "1412405902": "Önemli notlara bakın", @@ -1754,6 +1755,7 @@ "1736292549": "Posta kodunu güncelle", "1737352280": "Bot.init çağrılmaz", "1738094481": "<0>Süre: Tikler 1", + "1738206798": "Yüksek nokta", "1738611950": "Reverse Martingale Hakkında", "1738681493": "Gerekirse gözlüklerinizi çıkarın", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "Ülkenizdeki yetkili, bağımsız bir ödeme aracısı aracılığıyla yerel para biriminize para yatırın.", "1867217564": "Endeks pozitif bir tamsayı olmalıdır", "1867783237": "High-to-Close", - "1869315006": "Kasiyerin kilidini açmak için paranızı nasıl koruduğumuzu görün.", "1869486036": "Sözleşme süresi boyunca spot fiyat <0>bariyere hiç dokunmaz veya <0>bariyeri aşmazsa, <0>vade sonunda bir <0>ödeme alırsınız. Değerse, sözleşmeniz erken feshedilir.", "1869787212": "Even", "1870933427": "Kripto", @@ -2811,7 +2812,6 @@ "-541392118": "Hesabınızın kimliği doğrulanmadı. Lütfen hesabınızı doğrulamak ve kasiyerinize erişmek için <0>kimlik kanıtınızı ve <1>adres kanıtınızı gönderin.", "-599998434": "Belgeleriniz hala incelenmekte olduğu için fon transferi yapamazsınız. Doğrulamanız onaylandıktan sonra 3 gün içinde sizi e-posta ile bilgilendireceğiz.", "-247122507": "Kasiyeriniz kilitli. Kilidini açmak için lütfen <0>finansal değerlendirmeyi tamamlayın.", - "-1443721737": "Kasiyeriniz kilitlendi. Devam etmeden önce <0>fonlarınızı nasıl koruduğumuzu görün.", "-901712457": "30 günlük ciro limitinizi ayarlamadığınız için Kasiyere erişiminiz geçici olarak devre dışı bırakıldı. Lütfen <0>Kendini-dışlama bölümüne gidin ve 30 günlük ciro limitinizi ayarlayın.", "-166472881": "<0>Kişisel bilgileriniz eksik. Deposit ve para çekme işlemlerini etkinleştirmek için lütfen hesap ayarlarınıza gidin ve kişisel bilgilerinizi tamamlayın.", "-666905139": "Mevduatlar kilitlendi", @@ -2828,7 +2828,6 @@ "-1675848843": "Hata", "-283017497": "Yeniden dene", "-1294455996": "Deriv P2P kullanılamıyor", - "-1838982691": "BİLİNMİYOR", "-532693866": "Bir şeyler yanlış gitti. Lütfen sayfayı yenileyin ve tekrar deneyin.", "-1196049878": "Ev adresinin ilk satırı", "-1326406485": "Posta Kodu", @@ -2837,9 +2836,9 @@ "-1459042184": "Kişisel bilgilerinizi güncelleyin", "-1603543465": "Bazı bilgiler eksik olduğu için kişisel bilgilerinizi doğrulayamıyoruz.", "-614516651": "Yardıma ihtiyacınız var mı? <0>Bize Ulaşın.", - "-203002433": "Şimdi para yatırın", "-720315013": "{{currency}} hesabınızda para yok", "-2052373215": "Bu özelliği kullanmak için lütfen bir deposit işlemi yapın.", + "-203002433": "Şimdi para yatırın", "-379487596": "({{format_amount}} {{currency__display_code}}) mevcut bakiyenin {{selected_percentage}}%'si", "-1957498244": "daha fazla", "-1059419768": "Notlar", @@ -3401,7 +3400,6 @@ "-705744796": "Demo hesap bakiyeniz maksimum sınıra ulaştı ve yeni işlem yapamayacak. Demo hesabınızdan alım satım işlemine devam etmek için bakiyenizi sıfırlayın.", "-2063700253": "devre dışı", "-1585069798": "Uygunluk Testinizi tamamlamak için lütfen aşağıdaki bağlantıya tıklayın.", - "-1287141934": "Daha fazla bilgi edinin", "-367759751": "Hesabınız doğrulanmadı", "-596690079": "Deriv'i kullanmaktan keyif alıyor musunuz?", "-265932467": "Düşüncelerinizi duymayı çok isteriz", @@ -3815,6 +3813,13 @@ "-99964540": "Kârınız belirlenen miktara ulaştığında veya aştığında, işleminiz otomatik olarak kapatılacaktır.", "-542594338": "Maks. ödeme", "-1622900200": "Etkin", + "-1769815370": "Engel belirlenen fiyat ile sabitlenecek.", + "-2062696378": "Yüksek nokta:", + "-650959802": "Engel mevcut noktaya göre hareket edecek ve onun üzerinde sabit bir mesafeyi koruyacak.", + "-445997898": "Engel mevcut noktaya göre hareket edecek ve onun altında sabit bir mesafeyi koruyacak.", + "-1116872874": "Sabit fiyat:", + "-635746838": "Düşük nokta", + "-548979988": "Sabit fiyat", "-2131851017": "Büyüme oranı", "-339236213": "Multiplier", "-1396928673": "Risk Yönetimi", diff --git a/packages/translations/src/translations/uz.json b/packages/translations/src/translations/uz.json index 05f98c355ac4..ae76dc08226c 100644 --- a/packages/translations/src/translations/uz.json +++ b/packages/translations/src/translations/uz.json @@ -21,7 +21,7 @@ "19424289": "Foydalanuvchi", "19552684": "USD Savat", "21035405": "Iltimos, nima uchun ketayotganingizni bizga ayting. ( {{ allowed_reasons }} tagacha sababni tanlang.)", - "23745193": "Take me to demo", + "23745193": "Meni demo versiyaga olib boring", "24900606": "Oltin Savat", "25854018": "Ushbu blok matn, raqam, mantiqiy yoki ma'lumotlar qatori bo'lishi mumkin bo'lgan kirish bilan ishlab chiquvchi konsolida xabarlarni ko'rsatadi.", "26566655": "Xulosa", @@ -98,7 +98,7 @@ "109073671": "Iltimos, avval omonat qo'yish uchun foydalangan elektron hamyoningizdan foydalaning. Elektron hamyoningiz mablag'larni olishni qo'llab-quvvatlayotganligiga ishonch hosil qiling. Yechib olishni qo'llab-quvvatlaydigan elektron hamyonlaarni bu yerda ko'ring <0>bu yerda.", "111215238": "To'g'ridan-to'g'ri yorug'likdan uzoqlashing", "111718006": "Tugash sanasi", - "111931529": "Maks. umumiy garov 7 kundan ortiq", + "111931529": "Maks. umumiy stavka 7 kundan ortiq", "113378532": "ETH/USD", "115032488": "Sotib olish narxi va P/L", "116005488": "Ko'rsatkichilar", @@ -117,7 +117,7 @@ "125443840": "6. Xato bo'lsa, oxirgi kontraktni qayta isha tushiring", "125842960": "{{name}} majburiy.", "127307725": "Siyosiy jihatdan fosh qilingan shaxs (PEP) taniqli davlat lavozimiga tayinlangan shaxsdir. PEPning yaqin hamkorlari va oila a'zolari PEP hisoblanadi.", - "129005644": "G'oya shundan iboratki, muvaffaqiyatli savdolar oldingi yo'qotishlarni qoplashi mumkin. Biroq, ehtiyot bo'lish kerak, chunki ushbu strategiyadan foydalanganda xavf tezda oshishi mumkin. Deriv Bot bilan maksimal tikich o'rnatish orqali xavfingizni minimallashtirishingiz xususiyati. Aytaylik, maksimal tikish 3 USD. Agar keyingi savdo uchun taklifingiz 3 USD oshsa, sizning taklifingiz 1 USD miqdoridagi dastlabki taklifga qaytadi. Agar siz maksimal tikishni beligilamagan bo'lsangiz, u 3 USD ko'proqqa oshgan bo'lardi.", + "129005644": "G'oya shundan iboratki, muvaffaqiyatli savdolar oldingi yo'qotishlarni qoplashi mumkin. Biroq, ehtiyot bo'lish kerak, chunki ushbu strategiyadan foydalanganda xavf tezda oshishi mumkin. Deriv Bot bilan maksimal stavka o'rnatish orqali xavfingizni minimallashtirishingiz xususiyati. Aytaylik, maksimal stavka 3 USD. Agar keyingi savdo uchun stavkangiz 3 USD oshsa, sizning stavkangiz 1 USD miqdoridagi dastlabki taklifga qaytadi. Agar siz maksimal stavkani beligilamagan bo'lsangiz, u 3 USD ko'proqqa oshgan bo'lardi.", "129137937": "Qancha va qancha muddatga asavdo qilishni o'zingiz hal qilasiz. Siz xohlagan vaqta savdodan tanaffus qiishingiz mumkin. bu tanaffus 6 haftadan 5 yilgacha bo'lishi mumkin. U tugagach, siz uni uzaytirishingiz yoki 24 soatlik sovutish daaridan keyin savdo davom ettirishingiz mumkin. Agar siz aniq chegara o'rnatishni xohlamasangiz, bu maydonni bo'sh qoldiring.", "129171545": "Bu xususiyat Real hisob uchun mavjud emas.", "129729742": "Soliq to'luvchi raqami*", @@ -127,7 +127,7 @@ "133523018": "Manzilni olish uchun depozit sahifasiga o'ting.", "133536621": "va", "133655768": "Eslatma: Agar siz Bot Builder haqida ko'proq ma'lumotga ega bo'lishni istasangiz, <0>Qo'llanmalar yorlig'iga oting.", - "134126193": "Try searching for markets or keywords", + "134126193": "Bozorlarni yoki kalit so'zlarni qidirib ko'ring", "136790425": "Mavjud pozitsiyalarni ko'rish uchun filtrlarni o'zgartiring yoki olib tashlashga harakat qiling.", "137589354": "Savdo tajribangizni baholash va mahsulotlarimiz siz uchun mos kelganligini aniqlash uchun. Iltimos, to'liq va to'g'ri javoblar bering, chunki ular bu baholash natijasiga ta'sir qilishi mumkin.", "138055021": "Sintetik indekslar", @@ -140,7 +140,7 @@ "145511192": "s bu dastlabki garov.", "145633981": "Mavjud emas, chunki hujjatlaringiz hali ham tekshirilmoqda", "145736466": "Selfi oling", - "147327552": "No favourites", + "147327552": "Sevimlilar yo'q", "150156106": "O'zgatishlarni saqlash", "150486954": "Token nomi", "151279367": "2. O'rnating Sotib olich shartlari. Misolda bot Risekontraktni boshida sotib oladi va qachonki u yopiladi.", @@ -153,13 +153,14 @@ "157871994": "Havola muddati tugagan", "158355408": "Ba'zi xizmatlar vaqtincha mavjud bo'lmasligi mumkin.", "160746023": "Tether Omni token (USDT) bu Bitkoin blokvheyning Omni qatlamida joylashgan Tether versiyasi.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Kamera aniqlanmadi", "164112826": "Ushbu block, agar ular uzoq serverda saqlangan bo'lsa, URK manzildan bloklarni yuklash imkonini beradi. Ular faqat sizning botingiz ishga tushirilganda yuklanadi.", "164564432": "Tizimga texnik xizmat ko'rsatilayotgani sababi to'ldirish vaqtincha ishlamayapti. Ish tugagandan keyin so'ng hisobingizni to'ldirishingiz mumkin.", "165294347": "Kassaga kirish uchun hisob qaydnomangiz sozlamalarida yashash mamlakatingizni belgilang.", "165312615": "Telefonda davom etish", "165682516": "Agar baham ko'rish aqarshi bo'lmasangiz, boshqa savdo platformalaridan foydalanasiz?", - "167094229": "• Joriy stavka: Tikish miqdorini saqlash uchun ushbu o'zgaruvchidan foydalaning. Siz istalgan miqdorni kiritishingiz mumkin, lekin u ijoby raqam bo'lish kerak.", + "167094229": "• Joriy stavka: Stavka miqdorini saqlash uchun ushbu o'zgaruvchidan foydalaning. Siz istalgan miqdorni kiritishingiz mumkin, lekin u ijoby raqam bo'lish kerak.", "170185684": "E'tibor bermaslik", "170244199": "Boshqa sabablarga ko'ra hisobimni yopyapman.", "171307423": "Qayta tiklash", @@ -168,10 +169,10 @@ "173991459": "So'rovingizni blockchainga yubormoqdamiz.", "174793462": "Amalga oshirish narxi", "176078831": "Qo'shildi", - "176319758": "Maks. umumiy garov 30 kundan ortiq", + "176319758": "Maks. umumiy stavka 30 kundan ortiq", "176654019": "$100,000 - $250,000", "177099483": "Manzil tekshiruvi kutilmoqda va biz hisobingizga ba'zi cheklovlar qo'yydik. manzilingiz tekshirilgandan keyin cheklovlar olib tashlanadi.", - "177467242": "Accumulators va tikish kabi savdo imkoniyatlarini belgilang. Ushbu blokdan faqat accumulators savdo turi bilan foydalanish mumkin. Agar siz boshqa savdo turini tanlasangiz, bu blok Savdo imkoniyatlar bloki bilan almashtiriladi.", + "177467242": "Accumulators va stavka kabi savdo imkoniyatlarini belgilang. Ushbu blokdan faqat accumulators savdo turi bilan foydalanish mumkin. Agar siz boshqa savdo turini tanlasangiz, bu blok Savdo imkoniyatlar bloki bilan almashtiriladi.", "179083332": "Sana", "181107754": "Sizning yangi <0>{{platform}} {{eligible_account_to_migrate}} hisobiz savdoga tayyor.", "181346014": "Eslatmalar ", @@ -187,7 +188,6 @@ "195136585": "Trading View jadvali", "195972178": "Belgini oling", "196810983": "Agar muddat 24 soatdan ortib bo'lsa, uning o'rniga tugatush vaqti va amal qilish muddati qo'llanadi.", - "196998347": "Biz mijozlarning mablag'larini bank hisobvaraqlarida saqlaymiz, bu esa operatsiya hisobvaraqlarimizdan alohida bo'lib, bankrotlik holatida kompaniya aktivlarining bir qismini tashkil etmaydi. Bu <0>Qimor o'yinlar Komissiyasining talablariga javob beradi, mijozlarning mablag'larini <1>o'rtacha himoya darajasida taqsimlash uchun.", "197190401": "Tugash muddati", "201016731": "<0>Batafsil ma'lumot", "201091938": "30 kun", @@ -206,9 +206,9 @@ "211461880": "Umumiy ismlar va familiyalarni taxmin qilish oson", "211487193": "Hujjat raqami (masalan, ID, pasport, havdovchilik guvohnomasi)", "211847965": "Ba'zi <0>shaxsiy ma'lumotlar yo'q. Iltimos, hisob qaydnomangiz sozlamalariga o'ting va pul yechib olishni faollashtirish uchun etishmayotgan shaxsiy ma'lumotlarni kiriting.", - "216114973": "Stocks & indices", + "216114973": "Aksiyalar va indekslar", "216650710": "Siz demo hisob qaydnomasidan foydalanmoqdasiz", - "217377529": "5. Agar keyingi savdolar foydali bo'lsa keyingi savdo uchun garov 2 USD kamayadi. Buni yuqorida ko'rsatilgan, bu erda 3 USD garov 1 USD kamaydi. Qarang: A3.", + "217377529": "5. Agar keyingi savdolar foydali bo'lsa keyingi savdo uchun stavka 2 USD kamayadi. Buni yuqorida ko'rsatilgan, bu erda 3 USD stavka 1 USD kamaydi. Qarang: A3.", "217403651": "Sent-Vinsent va Grenadin orollari", "217504255": "Moilaviy baholash muvaffaqiyatli yuborildi", "218441288": "Shaxsiy guvohnoma raqami", @@ -276,7 +276,7 @@ "277469417": "Cheklov muddati besh yildan ortiq bo'lishi mumkin emas.", "278684544": "oxiridan # dan pastki ro'yxatni oling", "280021988": "Ushbu yorliqlardan foydalaning", - "281110034": "D'Amblert tizimi bilan samarali savdo qilish uning ulush darajasi va risklarni boshqarishni diqqat bilan ko'rib chiqishni talab qiladi. Treyderlar ushbu yondashuvni Deriv Bot yordamida avtomatlashtirishlari mumkin, muvozanatli va nazorat qilinadigan savdoni ta'minlash uchun foyda va zarar chegaralarini belgilashlari mumkin. Biroq, treyderlar haqiqiy pul savdosiga o'tishdan oldin ularning tavakkal ishtahasini baholash, demo hisob qaydnomasida strategiyalarni sinab ko'rish va o'zlarning savdo uslublariga moslashish juds muhimdir. Ushbu optimallashtirish jarayoni xavfni oqilona boshqarishda potensial daromadlar va yo'qotishlar o'rtasidagi muvozanatni saqlashga yordam beardi.", + "281110034": "D'Amblert tizimi bilan samarali savdo qilish uning stavka darajasi va risklarni boshqarishni diqqat bilan ko'rib chiqishni talab qiladi. Treyderlar ushbu yondashuvni Deriv Bot yordamida avtomatlashtirishlari mumkin, muvozanatli va nazorat qilinadigan savdoni ta'minlash uchun foyda va zarar chegaralarini belgilashlari mumkin. Biroq, treyderlar haqiqiy pul savdosiga o'tishdan oldin ularning tavakkal ishtahasini baholash, demo hisob qaydnomasida strategiyalarni sinab ko'rish va o'zlarning savdo uslublariga moslashish juds muhimdir. Ushbu optimallashtirish jarayoni xavfni oqilona boshqarishda potensial daromadlar va yo'qotishlar o'rtasidagi muvozanatni saqlashga yordam beardi.", "282319001": "Tasviringizni tekshiring", "282564053": "Endi, bizga manzilingizni tasdiqlovchi hujjatingiz kerak bo'ladi.", "283830551": "Sizning manzilingiz profilingizga mos kelmayapti", @@ -285,7 +285,7 @@ "284809500": "Financial Demo", "287934290": "Bu tranzaksiyani bekor qilmoqchimisiz?", "289731075": "Boshlash", - "291344459": "Jadval ikkinchi sessiyada ushbu tamoyilni ko'rsatadi. 4-raunddagi mag'lubiyat va 5-raundda mavaffaqiyatli savdodan so'ng 6-raund uchun garov 2 USD ko'tariladi. Bu strategiya qoidasig amal qiladi, garov faqat yo'qotishdan so'ng muvaffaqiyatli savdodan so'ng ko'tariladi.", + "291344459": "Jadval ikkinchi sessiyada ushbu tamoyilni ko'rsatadi. 4-raunddagi mag'lubiyat va 5-raundda mavaffaqiyatli savdodan so'ng 6-raund uchun stavka 2 USD ko'tariladi. Bu strategiya qoidasig amal qiladi, stavka faqat yo'qotishdan so'ng muvaffaqiyatli savdodan so'ng ko'tariladi.", "291744889": "<0>1. Savdo parametrlari:<0>", "291817757": "Deriv hamjamiyatimizga o'ting va API'lar, Api tokenlari, Deriv Api'laridan foydalanish usullari v aboshqalar haqida bilib oling.", "292526130": "Tik va sham tahlili", @@ -304,6 +304,7 @@ "312300092": "Berilgan satr yoki matn ichidagi bo'shliqlarni qisqartiradi.", "313741895": "Agar oxirgi sham qora bo'lsa, bu block \"To'g'ri\" qiymatini qaytaradi. Blokni shartnoma parametrlarining ildiz blokidan tashqari har qanday joyda joylashtirish mumkin.", "315306603": "Sizda valyuta belgilanmagan hisobingiz bor. Iltimos, ushbu hisob bilan savdo qilish uchun valyutani tanlang.", + "315516003": "Joriy joygacha bo'lgan masofa", "316694303": "Sham qorami?", "318705408": "Demo Zero Spread", "318865860": "yopish", @@ -344,6 +345,7 @@ "351744408": "Berilgan matn qatori bo'shligini tekshiradi", "353731490": "Vazifa bajarildi", "354945172": "Hujjatni topshirish", + "355647475": "Joriy nuqta", "357477280": "Yuz topilmadi", "357672069": "Daromad tasdiqlanmadi", "359053005": "Iltimos, token nomini kiriting.", @@ -389,7 +391,7 @@ "401339495": "Manzilni tasdiqlang", "401345454": "Buning uchun \"Qo'llanma\" bo'limiga o'ting.", "403456289": "SMA formulasi:", - "403936913": "An introduction to Deriv Bot", + "403936913": "Deriv Botga kirish", "406359555": "Shartnoma tafsilotlari", "406497323": "Agar kerak bo'lsa, faol shartnomanhizni soting (ixtiyoriy)", "411482865": "{{deriv_account}} hisobini qo'shish", @@ -414,7 +416,7 @@ "432273174": "1:100", "432508385": "Profit olish: {{ currency }} {{ take_profit }}", "432519573": "Hujjat yuklandi", - "433237511": "Notify Telegram %1 Access Token: %2 Chat ID: %3 Message: %4", + "433237511": "Telegramga xabar berish %1 Kirish tokeni: %2 Chat ID: %3 Xabar: %4", "433348384": "Haqiqiy hisoblar siyosiy jihatdan fosh qilingan shaxslarga (PEP) mumkin emas.", "433616983": "2. Tekshiruv bosqichi", "434548438": "Funksiya tavsifini ajratish", @@ -437,7 +439,7 @@ "450983288": "Blokcheyndagi xatolik tufayli depozitingiz amalga oshmadi. Qo'shimcha ma'lumot olish uchun kripto hamyoningiz xizmat ko'rsatuvchi provayderingizga murojaat qiling.", "451852761": "Telefonda davom etish", "452054360": "RSI ga o'xshab, ushbu blok sizga kirish ro'yxatidagi har bir yozuv uchun qiymatlar ro'yxatini beradi.", - "452949978": "1-3-2-6 strategiyasi ketma-ket muvaffaqiyatli savdolarni kapitallashtirish va yo'qotishlar paytida yo'qotishlarni minimallashtirish uchun mo'ljallangan. Ushbu strategiyaning mantiqiy sababi statistik ehtimolliklarda, muvaffaqiyatga erishish ehtimoli asosida stavkalar o'lchamiga tuzatishlar kiritishda yotadi. Bitta muvaffaqiyatli savdodan keyin ikkinchi savdoda muvaffaqiyatga erishish ehtimol yuqori. Shunday qilib, ikkinchi savdoda ulush 3 g ao'rnatiladi. Uchinhci savdoda muvaffaqiyatli savdo ehtimoli pastligi sababi ulush 3 birlikka o'rnatiladi. Agar uchinchi savdo muvaffaqiyatli bo'lsa, strategiya potensial foydani ikki baravar oshirish maqsadida oldingi barcha daromadlarni (jami 6 birlik boshlan'ich ulush) to'rtinchi savdoga taqsimlaydi. Agar to'rtinchi savdo ijobiy natijaga olib kelsa, strategiya 12 birlik umumiy daromadga erishishga yordam beradi, Biroq, ehtiyoy bo'lish juda muhim, chunki bu strategiya bilan xavf tezda kuchayishi mumkin va to'rtinchi savdodagi har qanday yo'qotish barcha oldingi yutuqlarni yo'qotadi.", + "452949978": "1-3-2-6 strategiyasi ketma-ket muvaffaqiyatli savdolarni kapitallashtirish va yo'qotishlar paytida yo'qotishlarni minimallashtirish uchun mo'ljallangan. Ushbu strategiyaning mantiqiy sababi statistik ehtimolliklarda, muvaffaqiyatga erishish ehtimoli asosida stavkalar o'lchamiga tuzatishlar kiritishda yotadi. Bitta muvaffaqiyatli savdodan keyin ikkinchi savdoda muvaffaqiyatga erishish ehtimol yuqori. Shunday qilib, ikkinchi savdoda stavka 3 ga o'rnatiladi. Uchinhci savdoda muvaffaqiyatli savdo ehtimoli pastligi sababi stavka 3 birlikka o'rnatiladi. Agar uchinchi savdo muvaffaqiyatli bo'lsa, strategiya potensial foydani ikki baravar oshirish maqsadida oldingi barcha daromadlarni (jami 6 birlik boshlan'ich stavka) to'rtinchi savdoga taqsimlaydi. Agar to'rtinchi savdo ijobiy natijaga olib kelsa, strategiya 12 birlik umumiy daromadga erishishga yordam beradi, Biroq, ehtiyoy bo'lish juda muhim, chunki bu strategiya bilan xavf tezda kuchayishi mumkin va to'rtinchi savdodagi har qanday yo'qotish barcha oldingi yutuqlarni yo'qotadi.", "453175851": "MT5 Financial STP hisobingiz {{legal_entity_name}} orqali ochiladi. Uchbu hisobdagi savdolar Labuan Financial Service Authority (LFSA) qoidalari va ko'rsatmalariga bo'ysunadi. Boshqa hisoblaringizning hech biri, jumladan Deriv husob qaydnomangiz Labuan Financial Service Authority (LFSA) qoidalari va ko'rsatmalariga bo'ysunmaydi.", "454196938": "Regulatsiya:", "456746157": "Brauzer sozlamalari orqali kamerangizga kirishga ruxsat bering", @@ -456,7 +458,7 @@ "467839232": "Men mutazim ravishda boshqa platformalarda forex CFD vaboshqa mukab moilaviy vositalar bilan savdo qilaman.", "471402292": "Sizning botingiz har bir ishga tushish uchun bitta shartoma turidan foydalanadi.", "471667879": "Tugash vaqti:", - "471994882": "Your {{ currency }} account is ready.", + "471994882": "{{ currency }} hisobingiz tayyor.", "473154195": "Sozlamalar", "474306498": "Ketganingizdan afsusdamiz. Hisobingiz yopildi.", "475492878": "Sintetik indekslarni sinab ko'ring", @@ -482,14 +484,14 @@ "499522484": "1. \"string\" uchun: 1325.68 USD", "500855527": "Bosh ijrochilar, yuqori mansabdor shaxslar va qonun chiqaruvchilar", "500920471": "Ushbu blok ikki son o'rtasida arifmetik amallarni bajaradi.", - "501284861": "Watch this video to learn how to build a trading bot on Deriv Bot. Also, check out this blog post on building a trading bot.", + "501284861": "Deriv Bot-da savdo botini yaratishni o'rganish uchun Ushbu videoni tomosha qiling. Shuningdek, savdo botini yaratish bo'yicha ushbu blog postini tekshiring.", "501401157": "Siz faqat depozit qo'yishingiz mumkin", "501537611": "*Maksimal ochiq pozitsiyalar soni", "502007051": "Demo Swap-Free SVG", "502041595": "Ushbu blok tanlangan vaqt oralig'ida sizga ma'lum bir shamni beradi.", "505793554": "song harf", "508390614": "Demo Financial STP", - "511679687": "Accumulators sizga indeksning harakatlanish diapazoni haqida fikr bildirish va belgilangan <0>o'shish suratida ulushingizni eksponent ravishda oshirish imkonini beradi.", + "511679687": "Accumulators sizga indeksning harakatlanish diapazoni haqida fikr bildirish va belgilangan <0>o'shish suratida stavkangizni eksponent ravishda oshirish imkonini beradi.", "514031715": "ro'yxat {{ input_list }} bo'sh", "514776243": "Sizning {{account_type}} parolingiz o'zgartirildi.", "514948272": "Havolani nusxalash", @@ -509,20 +511,20 @@ "531675669": "Euro", "532724086": "Ish shartnomasi", "533403953": "Sizning mavjud <0>{{platform}} {{type}} {{from_account}} hisob(lar)ingizga kirish mumkin bo'lib qoladi.", - "535041346": "Maks. umumiy garov kuniga", + "535041346": "Maks. umumiy stavka kuniga", "536277802": "TP va SL tarixi", "537788407": "Boshqa CFD platformasi", "538017420": "0.5 pips", - "538042340": "2 tamoyil: Tikish faqat mag'lubiyatga uchragan savdodan so'ng muvaffaqiyatli bo'lgan taqdirdagina oshadi", + "538042340": "2 tamoyil: Stavka faqat mag'lubiyatga uchragan savdodan so'ng muvaffaqiyatli bo'lgan taqdirdagina oshadi", "538228086": "Close-Low", - "539352212": "Tick {{current_tick}}", + "539352212": "Tik {{current_tick}}", "541650045": "{{platform}} parolini boshqarish", "541700024": "Birinchidan, haydovchilik guvohnomangiz raqamini va amal qilish muddatini kiriting.", "542038694": "{{label}} uchun faqaq harflar, raqamlar, bo'sh joy, pastki chiziq va tirnoqlarga ruxsat berilgan.", "542305026": "Siz shaxsingizni tasdiqlovchi hujjatni topshirishingiz kerak.", "543413346": "Sizda bu aktiv uchun ochq pozitsiyalar yo'q. Boshqa ochiq pozitsiyalarni ko'rish uchun Hisobotlarga o'tish tugmani bosing", "545323805": "Savdo turlari bo'yicha filtrlash", - "547029855": "Ushbu xususiyatni tanglasangiz, agar aktiv narxi foydangizgaqarshi harakat qilsa, tanlangan vaqt oralig'ida savdoni bekor qilishingiz mumkin. Bunday holda siz tikishingizni profit/loss qaytarib olasiz. Buning uchun biza ozgina haq olamiz. Bitimni bekor qilish foal bo'lganda take-profit va stop-loss faol emas.", + "547029855": "Ushbu xususiyatni tanglasangiz, agar aktiv narxi foydangizgaqarshi harakat qilsa, tanlangan vaqt oralig'ida savdoni bekor qilishingiz mumkin. Bunday holda siz stavkangizni profit/loss qaytarib olasiz. Buning uchun biza ozgina haq olamiz. Bitimni bekor qilish foal bo'lganda take-profit va stop-loss faol emas.", "549479175": "Deriv Multipliers", "549799607": "LiveChatga o'tish", "551569133": "Savdo cheklovlar haqida ko'proq bilib oling", @@ -539,14 +541,13 @@ "563034502": "Shikoyatingizni 15 ish kuni ichida hal qilishni harakat qilamiz. Biz sizga o'z pozitsiyamizni tushuntirish bilan birga natija habar beramiz va biz ko'rmoqchi bo'lgan har qanday tuzatish choralarini taklif qilamiz.", "563166122": "Shikoyatingiz qabul qilingaligini tasdiqlaymiz, uni mdiqqat bilan ko'rib chiqamiz va davom etar ekanmiz, sizni xabardor qilamiz. Shikoyatni hal qilishda yordam berish uchun qo'shimcha ma'lumot yoki tushuntirishlar so'rashimiz mumkin.", "563652273": "Blokka o'tish", - "565356380": "Added to favorites", + "565356380": "Sevimlilarga qo'shildi", "565410797": "Quydagi rasmda Simple Moving Average Array bloki qanday ishlashi ko'rsatilgan:", "566274201": "1. Bozor", "567019968": "O'zgaruvchi bot yaratishda eng muhim va kuchli komponentlardan birdir. Bu ma'lumotni matnb yoki raqamlar shaklida saqlash usuli. O'zgaruvchi sifatida saqlangan ma'lumotlar berilgan ko'rsatmalarga muvofiq ishlatilishi va o'gartirilishi mumkin. O'zgaruvchilarga har qanday nom berilishi mumkin, lekin odatda bayontlar bajarilishda ularni chaqirishni osonlashtirish uchun ularga foydali ramziy nomlar beriladi.", "567163880": "{{platform}} parol yaratish", "567755787": "Soliq identifikatsiya raqami talab qilinadi.", "569057236": "Hujjatingiz qaysi davlatda berilgan?", - "571921777": "Mablag'larni himoya qilish darajasi", "572576218": "Tillar", "573173477": "{{ input_candle }} sham qorami?", "575668969": "Foyda keltirgan tranzaksiyalar uchun keyingi tranzaksiya kursi 2 USD dollariga oshiriladi. Deriv Bot har bit muvaffaqiyatli savdo uchun 2 USD qo'shishda davom etadi. A1 ga qarang.", @@ -613,7 +614,7 @@ "634274250": "Har bir savdoning muddati qancha vaqtni oladi.", "636219628": "<0>c.Agar hal qilish imkoniyati topilmasa, shikoyat DRC tomonidan ko'rib chiqiladigan aniqlash bosqichiga o'tadi.", "636427296": "Soliq ma'lumotlari bo'yicha yordam kerakmi? Bizga <0>jonli chat orqali xabar bering.", - "636579615": "Yo'qotilgan savdodan keyin keyingi savdoga qo'shiladigan birliklar soni. Bir birlik dastlabki ulush miqdoriga teng.", + "636579615": "Yo'qotilgan savdodan keyin keyingi savdoga qo'shiladigan birliklar soni. Bir birlik dastlabki stavka miqdoriga teng.", "639382772": "Iltimos, qo'llab-quvatlanadigan fayl turini yuklang.", "640249298": "Normal", "640596349": "Siz hali hech qanday bildirishnoma olmangiz", @@ -645,7 +646,7 @@ "660991534": "Tugatish", "661759508": "Sizning bilimingiz va tajribangiz bo'yicha taqdim etilgan ma'lumotlarga asoslanib, biz uhbu veb-sayt orqali mavjud bo'lgan investisiyalar sizga mos emas deb hisoblaymiz.<0/><0/>", "662953503": "<0>stop out darajasiga erishilganda shartnomangiz yopiladi.", - "664779910": "3. Agar birinchi tranzaksiya foydali bo'lsa, keyingi bitim uchun stavka pasaymaydi, balki boshlang'ich kurs darajasida qoladi. Strategiya 1 USD miqdoridagi dastlabki tikish bilan minimal savdo qiladi. A1 ga qarang.", + "664779910": "3. Agar birinchi tranzaksiya foydali bo'lsa, keyingi bitim uchun stavka pasaymaydi, balki boshlang'ich kurs darajasida qoladi. Strategiya 1 USD miqdoridagi dastlabki stavka bilan minimal savdo qiladi. A1 ga qarang.", "665089217": "Hisobingizni tasdiqlash va kassirga kirish uchun <0>shaxsingizni tasdiqlovchi hujjatni<0> yuboring.", "665777772": "XLM/USD", "665872465": "Quydagi misolda ochilish narxi tanglanadi, keyinchalik u \"op\" deb nomlangan o'zgaruvchiga tayinlanadi.", @@ -658,7 +659,7 @@ "676159329": "Standart hisobga o'tib bo'lmadi.", "676675313": "Authy", "677918431": "Bozor: {{ input_market }} > {{ input_submarket }} > {{ input_symbol }}", - "678031950": "Candles List with interval here 2: {{ candle_interval_type }}", + "678031950": "Shamlar roʻyxati interval bilan bu yerda 2 : {{ candle_interval_type }}", "679199080": "Nima uchun passkeys?", "680334348": "Ushbu blok siizning eski strategiyangizni to'g'ri aylantirish uchun kerak edi.", "681108680": "{{platform}} hisob(lar) uchun zarur bo'lgan qo'shimcha ma'lumotlar", @@ -752,9 +753,9 @@ "762926186": "Tez strategiya - bu Deriv Bot-da foydalanishingiz mumkin bo'lgan tayyor strategiya. Siz tanlashingiz bo'lban 3 ta tezkor strategiya mavjud: Martingale, D'Alembert, va Oscar's Grind.", "764366329": "Savdo cheklovlari", "766317539": "Til", - "768301339": "Delete Blocks", + "768301339": "Bloklarni o'chirish", "772520934": "Sharnomani muddati tugashidan 24 soat ildin sotishingiz mumkin. Agar shunday qilsangiz, biz sizga <0>shartnoma qiymati to'laymiz.", - "773091074": "Tikish:", + "773091074": "Stavka:", "773309981": "Oil/USD", "773336410": "Tether - bu fiat valyutalaridan raqamli usulda foydalanishni osonlashtirish uchun mo'ljallangan blokchain bilan ishlaydigan platforma.", "775679302": "{{pending_withdrawals}} kutilayotgan pul yechin(lar)", @@ -776,7 +777,7 @@ "793526589": "Xizmatimiz ustidan shikoyat qilish uchun <0>complaints@deriv.com manziliga email yuboring va shikoyatingizni batafsil bayon qiling. Muammoni biz tomondan yaxshiroq tushunish uchun xatingizga hisob qaydnomangiz tarixi yoki savdo tizmingizga tegishli skrinshotlarni ilova qiling.", "793531921": "Bizning kompaniyamiz onlayn savdo dunyosidagi eng qadim va eng hurmatli kompaniyalran birdir. Biz mijozlarimizga adolatli munosabatda bo'lishga va ularga mukammal xizmat ko'rsatishga intilamiz.<0/><1/>Iltimos, xizmatlarimizni qanday yaxshilashimiz haqida fikr-mulohazalaringizni biz bilan baham ko'ring. Siz har doim adolatli munosabatda bo'lishingiz, qadrlashingiz va eshitishingizga amin bo'lishingiz mumkin.", "794682658": "Havolani telefoningizga nuxsa oling", - "794778483": "Deposit later", + "794778483": "Keyinroq depozit qilish", "795859446": "Parol saqlandi", "795992899": "Yakuniy narx va to'siq o'rtasidagi har bir o'zgarish nuqtasi uchun muddati so'ng olishni tanlagan miqdor. ", "797007873": "Kameraga kirishni tiklash uchun quydagi amallarni bajaring:", @@ -787,7 +788,7 @@ "802438383": "Yangi manzilni tasdiqlovchi hujjat talab qilinadi", "802556390": "soniya", "802989607": "XML faylingizni shu yerga torting", - "803500173": "Boshlang'ich tikish", + "803500173": "Boshlang'ich stavka", "806165583": "Avstraliya 200", "807499069": "Moilaviy komissiyaga shikoyat qilish tartibi", "808323704": "Sinov o'zgartiruvchilarni yaratish uchun \"Taqqoslash\" va \"Logic operatsiyasi\" bloklaridan ham foydalanishingiz mumkin.", @@ -822,14 +823,14 @@ "836097457": "Men savdoga qiziqaman, lekin tajribam juda kam.", "837063385": "Bu manzilga boshqa valyutalarni yubring.", "837066896": "Hujjatingiz ko'rib chiqilmoqda, 1-3 kundan keyin tekshiring.", - "839158849": "4. Agar ikkinchi savdo zararga olib kelsa, Deriv Bot avtomatik ravishda keyingi savdo uchun tikishingizni 2 USD ga oshiradi. Deriv Bot har bir mag'lubiyatdan so'ng oldingi raund garoviga 2 USD qo'shishda davom etadi. A2'ga qarang.", + "839158849": "4. Agar ikkinchi savdo zararga olib kelsa, Deriv Bot avtomatik ravishda keyingi savdo uchun stavkangizni 2 USD ga oshiradi. Deriv Bot har bir yo'qotilgan savdodan so'ng oldingi tur stavkaga 2 USD qo'shishda davom etadi. A2 ga qarang.", "839805709": "Sizni muammosiz aniqlash uchun bizga yaxshiroq surat kerak", "841543189": "Blokcheyndagi tranzaksiyani ko'rish", "843333337": "Hozir siz faqat depozit qo'yishingiz mumkin. Pul yechib olish uchun <0>moliyaviy baholashni yakunlang.", - "845106422": "Last digit prediction", + "845106422": "Oxirgi raqamni bashorat qilish", "845304111": "Sekin EMA davri {{ input_number }}", "847209411": "{{formatted_opening_time}} (GMT), {{opening_date}}", - "848083350": "Sizning to'lovingiz yakuniy narx va ijro narxi o'rtasida farqga ko'paytirilgan <0>point uchun tolovga teng. Agar sizning to'lovingiz dastlabki tikishingizdan yuqori bo'lsa, foyda olasiz.", + "848083350": "Sizning to'lovingiz yakuniy narx va ijro narxi o'rtasida farqga ko'paytirilgan <0>point uchun tolovga teng. Agar sizning to'lovingiz dastlabki stavkangizdan yuqori bo'lsa, foyda olasiz.", "850582774": "Ltimos, shaxsiy ma'lumotlaringizni yangilang", "851054273": "Agar siz \"Higher\"ni tanlasingiz, chiqish joyi qat'iy yuqori bo'lsa, siz to'lovni yutib olasiz.", "851264055": "Berilgan element ko'p marta takrorlangan ro'yxatni yaratadi.", @@ -845,7 +846,7 @@ "858663703": "Yangi savdolar uchun mablag'laringizni yangi <0>{{platform}} {{eligible_account_to_migrate}} hisob(lar)ga o'tkazing.", "860319618": "Turizm", "862283602": "Telefon raqami*", - "863023016": "Misol uchun, ahar treyderda yo'qotish chegarasi (B) 100 USD, dastlabki tikish (s) 1 USD va daromad 2 birlik (f) bo'lsa, hisoblash quyidagicha:", + "863023016": "Misol uchun, ahar treyderda yo'qotish chegarasi (B) 100 USD, dastlabki stavka (s) 1 USD va daromad 2 birlik (f) bo'lsa, hisoblash quyidagicha:", "863328851": "Shaxsni tasdiqlovchi hujjat", "864610268": "Birinchidan, {{label}} va amal qilish muddatini kiriting.", "864655280": "Mavjud MT5 hisob(lar)ingizda joriy ochiq pozitsiyalaringizni saqlashda davom etishingiz mumkin.", @@ -872,7 +873,7 @@ "879014472": "O'nli kasrlar soni maksimalga yetdi", "879647892": "Shartnomani muddati tugashidan 60 soniya oldin sotishingiz mumkin. Agar shunday qilsangiz, biz sizga <0>shartnoma qiymatini to'laymiz.", "881963105": "(XAUUSD, XAGUSD)", - "882423592": "Birinchi savdo uchun qo'ygan miqdori. E'tibor bering, bu eng kam garov miqdori.", + "882423592": "Birinchi savdo uchun qo'ygan pul miqdori. E'tibor bering, bu eng kam garov miqdori.", "885065431": "Deriv hisobini oching", "887423525": "Bu server botning Beta versiyasi.", "888274063": "Tuman/Shahar", @@ -924,7 +925,7 @@ "938500877": "{{ text }}.<0>ushbu tranzaksiyaning xulosasini email-ingizda ko'rishingiz mumkin.", "938947787": "Chiqarish {{currency}}", "938988777": "Yuqo'ri tosiq", - "942015028": "Step 500 Index", + "942015028": "Step 500 Indeksi", "944499219": "Maksimal ochiq positsiyalar", "945532698": "Shartnoma sotildi", "945753712": "Trader’s Hub-ga qaytish", @@ -942,7 +943,7 @@ "956448295": "Kesilgan raqam aniqlandi", "957182756": "Trigonometrik funksiyalar", "958430760": "In/Out", - "958503488": "Search markets on ", + "958503488": "Bozorlarni qidiring ", "959031082": "{{ variable }} ni MACD Array-ga o'rnating {{ dropdown }} {{ dummy }}", "960201789": "3. Sotish shartlari", "961266215": "140+", @@ -956,10 +957,9 @@ "970915884": "AN", "974888153": "High-Low", "975608902": "CFS bilan savdo qilish uchun, Deriv Apps hisobini yarating.", - "975668699": "Men {{company}} <0>Foydalanish shartlarini tasdiqlayman va qabul qilaman", "975747761": "Davom etayotgan", "975950139": "Fuqaroligi", - "977647549": "Note: You can use this password for all your {{platform}} accounts.", + "977647549": "Eslatma: Siz ushbu parolni barcha {{platform}} hisoblaringiz uchun ishlatishingiz mumkin.", "977929335": "Mening hisobimni sozlamalariga o'tish", "979713491": "Zero Spread BVI", "980050614": "Hozir yangilash", @@ -971,7 +971,7 @@ "982829181": "To'siqlar", "983295075": "Nega men yechib olganimdan keyin kartam/e-hamyonimdagi mablag'ni ko'ra olmayapman?", "983451828": "2. Aktiv va savdo turini tanlang.", - "984175243": "Expand Blocks", + "984175243": "Bloklarni kengaytirish", "986565137": "Biz sizning daromadingizni tasdiqlovchi hujjatni oldik", "987053672": "Joriy hisob(lar)ingizda ochiq lavozimlar bilan ishlashni davom ettirishingiz mumkin <0>{{platform}} {{existing_account}}.", "987224688": "Oxirgi 12 oy ichida boshqa moliyaviy vositalar bilan qancha savdo qildingiz?", @@ -991,17 +991,17 @@ "1002989598": "iOS: iCloud keychain.", "1003876411": "Harf yoki raqam bilan boshlanishi kerak va defis, nuqta va slashni o'z ichiga olishi mumkin.", "1004127734": "Email yuborish", - "1006069082": "Martingale strategiyasining maqsadi ketma-ket muvaffaqiyatli savdolardan foydalanish va ulardan maksimal foyda olishdir. Ushbu strategiya faqat ketma-ket muvaffaqiyatli savdolar bo'lsa foydali bo'ladi. Shu sababli, bir qator muvaffaqiyatli savdolardan olingan barcha potentsial daromadlarni ta'minlash uchun maksimal ulushni belgilash muhim, aks holda siz to'plagan barcha daromadlarni, shu jumladan dastlabki ulushingizni yo'qotishingiz mumkin. Misol uchun, agar sizning maqsadingiz ketma-ket 2 muvaffaqiyatli savdoda maksimal foyda keltirish bo'lsa, dastlabki ulushingiz 1 USD hisobga olgan holda, siz maksimal 2 USD garov o'rnatasiz. Xuddi shunday, agar sizning maqsadingiz ketma-ket 3 ta muvaffaqiyatli savdoda maksimal foyda keltirish bo'lsa, dastlabki ulushingiz 1 USD hisobga olgan holda siz maksimal 4 USD miqdorini belgilaysiz.", - "1006458411": "Errors", - "1006664890": "Silent", + "1006069082": "Martingale strategiyasining maqsadi ketma-ket muvaffaqiyatli savdolardan foydalanish va ulardan maksimal foyda olishdir. Ushbu strategiya faqat ketma-ket muvaffaqiyatli savdolar bo'lsa foydali bo'ladi. Shu sababli, bir qator muvaffaqiyatli savdolardan olingan barcha potentsial daromadlarni ta'minlash uchun maksimal stavkani belgilash muhim, aks holda siz to'plagan barcha daromadlarni, shu jumladan dastlabki stavkangizni yo'qotishingiz mumkin. Misol uchun, agar sizning maqsadingiz ketma-ket 2 muvaffaqiyatli savdoda maksimal foyda keltirish bo'lsa, dastlabki stavkangiz 1 USD hisobga olgan holda, siz maksimal 2 USD stavka o'rnatasiz. Xuddi shunday, agar sizning maqsadingiz ketma-ket 3 ta muvaffaqiyatli savdoda maksimal foyda keltirish bo'lsa, dastlabki stavkangiz 1 USD hisobga olgan holda siz maksimal 4 USD miqdorini belgilaysiz.", + "1006458411": "Xatolar", + "1006664890": "Jim", "1008151470": "Birlik: Muvaffaqiyatli savdolar amalga oshirilganda qo'shiladigan birliklar soni yoki savdo yo'qotilganda olib tashlangan birliklar soni. Misol uchun, agar birlik 2 ga o'rnatilgan bo'lsa, stavka 1 USD bo'lgan dastlabki stavkadan ikki baravar ko'payadi yoki kamayadi, ya'ni u 2 USD o'zgaradi.", - "1009032439": "All time", - "1010198306": "This block creates a list with strings and numbers.", - "1010337648": "We were unable to verify your proof of ownership.", - "1011424042": "{{text}}. stake<0/>", - "1012102263": "You will not be able to log in to your account until this date (up to 6 weeks from today).", - "1015201500": "Define your trade options such as duration and stake.", - "1016220824": "You need to switch to a real money account to use this feature.<0/>You can do this by selecting a real account from the <1>Account Switcher.", + "1009032439": "Hamma vaqt", + "1010198306": "Ushbu blok qatorlar va raqamlardan iborat ro'yxatni yaratadi.", + "1010337648": "Egaligingizni tasdiqlay olmadik.", + "1011424042": "{{text}}. stavka<0/>", + "1012102263": "Shu sanagacha (bugundan boshlab 6 haftagacha) hisobingizga kira olmaysiz.", + "1015201500": "Davomiyligi va stavka kabi savdo imkoniyatlarini aniqlang.", + "1016220824": "Bu funksiyadan foydalanish uchun siz haqiqiy pul hisobiga oʻtishingiz kerak.<0/>Buni <1>Hisob almashtirgichdan haqiqiy hisobni tanlash orqali amalga oshirishingiz mumkin", "1017081936": "Agar siz \"<0>Put\", ni tanglasangiz, yakuniy narx amala qilish muddati tugaganidan keyin ogohlantirish narxidan past bo'lsa, to'lov olasiz. Aks holda, siz to'lovni olmaysiz.", "1018803177": "standart og'ish", "1019265663": "Sizda hali hech qanday tranzaksiya yo'q.", @@ -1019,318 +1019,318 @@ "1026289179": "Yo'lda savdo qiling", "1028211549": "Barxha maydonlar talab qilinadi", "1028758659": "Fuqarolik*", - "1029164365": "We presume that you possess the experience, knowledge, and expertise to make your own investment decisions and properly assess the risk involved.", - "1029641567": "{{label}} must be less than 30 characters.", - "1030021206": "change {{ variable }} by {{ number }}", - "1031602624": "We've sent a secure link to %{number}", - "1031731167": "Pound Sterling", + "1029164365": "Biz sizda investitsiya qarorlarini qabul qilish va yuzaga keladigan xavfni to'g'ri baholash uchun tajriba, bilim va tajribaga ega ekanligingizni taxmin qilamiz.", + "1029641567": "{{label}} 30 belgidan kam boʻlishi kerak.", + "1030021206": "{{ variable }}ni {{ number }} ga oʻzgartirish", + "1031602624": "%{number} ga xavfsiz havola yubordik", + "1031731167": "Funt sterling", "1032173180": "Deriv", "1032907147": "AUD/NZD", - "1033253221": "Confirm your identity to make a withdrawal.", - "1035893169": "Delete", - "1036116144": "Speculate on the price movement of an asset without actually owning it.", - "1036867749": "The desired duration, stake, prediction, and/or barrier(s) for the contract is defined here.", - "1038575777": "Change password", - "1039428638": "EU regulation", - "1039476188": "The size used to multiply the stake after a losing trade for the next trade.", - "1039755542": "Use a few words, avoid common phrases", - "1040472990": "1. Go to Bot Builder.", - "1040677897": "To continue trading, you must also submit a proof of address.", - "1041001318": "This block performs the following operations on a given list: sum, minimum, maximum, average, median, mode, antimode, standard deviation, random item.", + "1033253221": "Pulni yechib olish uchun shaxsingizni tasdiqlang.", + "1035893169": "Oʻchirish", + "1036116144": "Aktivga egalik qilmasdan uning narxining harakati haqida taxmin qiling.", + "1036867749": "Shartnoma uchun istalgan muddat, stavka, bashorat va/yoki to'siq(lar) shu yerda aniqlanadi.", + "1038575777": "Parolni ozgartirish", + "1039428638": "Evropa Ittifoqida tartibga solish", + "1039476188": "Keyingi savdo uchun yo'qotilgan savdodan keyin stavkani ko'paytirish uchun ishlatiladigan o'lcham.", + "1039755542": "Bir nechta so'zlardan foydalaning, umumiy iboralardan qoching", + "1040472990": "1. Bot Builderga o‘ting.", + "1040677897": "Savdoni davom ettirish uchun siz manzilni tasdiqlovchi hujjatni ham taqdim etishingiz kerak.", + "1041001318": "Ushbu blok berilgan ro'yxat bo'yicha quyidagi amallarni bajaradi: miqdor, minimal, maksimal, o'rtacha, median, rejim, antimod, standart og'ish, tasodifiy element.", "1041620447": "QR kodni skan qila olmasangiz, kodni qo'lda kiriting:", - "1042659819": "You have an account that needs action", - "1043790274": "There was an error", - "1044599642": "<0> has been credited into your {{platform}} {{title}} account.", + "1042659819": "Sizda harakat talab qilinadigan hisob bor", + "1043790274": "Xatolik yuz berdi", + "1044599642": "<0> {{platform}} {{title}} hisobingizga tushdi.", "1045704971": "Jump 150 Indeksiga", - "1045782294": "Click the <0>Change password button to change your Deriv password.", - "1047389068": "Food Services", - "1047644783": "Enable screen lock on your device.", - "1047881477": "Unfortunately, your browser does not support the video.", + "1045782294": "Deriv parolingizni o'zgartirish uchun <0>Parolni o'zgartirish tugmasini bosing.", + "1047389068": "Oziq-ovqat xizmatlari", + "1047644783": "Qurilmangizda ekran qulfini yoqing.", + "1047881477": "Afsuski, brauzeringiz videoni qo'llab-quvvatlamaydi.", "1048687543": "Labuan Financial Services Authority", - "1048947317": "Sorry, this app is unavailable in {{clients_country}}.", + "1048947317": "Kechirasiz, bu ilova {{clients_country}} hududida ishlamaydi.", "1049384824": "Rise", - "1050063303": "Videos on Deriv Bot", - "1050128247": "I confirm that I have verified the payment agent’s transfer information.", + "1050063303": "Deriv Bot-dagi videolar", + "1050128247": "Toʻlov agentining oʻtkazma maʼlumotlarini tasdiqlaganimni tasdiqlayman.", "1050844889": "Hisobotlar", - "1052779010": "You are on your demo account", + "1052779010": "Siz demo hisob qaydnomasidasiz", "1052921318": "{{currency}} Wallet", "1053153674": "Jump 50 Indeksiga", - "1053159279": "Level of education", + "1053159279": "Ta'lim darajasi", "1053556481": "Shikoyatni yuborganingizdan so'ng, biz uni qabul qilganimizni tasdiqlash uchun sizga email xabarini yuboramiz.", - "1055313820": "No document detected", - "1056381071": "Return to trade", + "1055313820": "Hech qanday hujjat aniqlanmadi", + "1056381071": "Savdoga qaytish", "1056821534": "Ishinchingiz komilmi?", - "1057216772": "text {{ input_text }} is empty", - "1057519018": "4. If a trade ends in a profit, the stake for the following trade will be reset to the initial stake amount of 1 USD.", + "1057216772": "{{ input_text }} matni boʻsh", + "1057519018": "4. Agar savdo foyda bilan yakunlansa, keyingi savdo uchun stavka 1 USD miqdoridagi dastlabki stavkaga qaytariladi.", "1057749183": "Ikki-factorli autentifikatsiya (2FA)", - "1057765448": "Stop out level", - "1057904606": "The concept of the D’Alembert Strategy is said to be similar to the Martingale Strategy where you will increase your contract size after a loss. With the D’Alembert Strategy, you will also decrease your contract size after a successful trade.", - "1058804653": "Expiry", - "1058905535": "Tutorial", - "1060231263": "When are you required to pay an initial margin?", - "1061308507": "Purchase {{ contract_type }}", - "1062423382": "Explore the video guides and FAQs to build your bot in the tutorials tab.", + "1057765448": "Stop out darajasi", + "1057904606": "D'Alembert strategiyasining kontseptsiyasi Martingale strategiyasiga o'xshaydi, unda siz yo'qotishdan keyin shartnoma hajmini oshirasiz. D'Alembert strategiyasi bilan siz muvaffaqiyatli savdodan so'ng shartnoma hajmini ham kamaytirasiz.", + "1058804653": "Muddat", + "1058905535": "Oʻquv qoʻllanma", + "1060231263": "Dastlabki marjani qachon to'lashingiz kerak?", + "1061308507": "{{ contract_type }} sotib olish", + "1062423382": "Oʻquv qoʻllanmalar oynasida botingizni yaratish uchun video qoʻllanmalar va tez-tez soʻraladigan savollar (FAQs) bilan tanishing.", "1062536855": "Equals", - "1062569830": "The <0>name on your identity document doesn't match your profile.", + "1062569830": "Shaxsingizni tasdiqlovchi hujjatdagi <0>ism profilingizga mos kelmaydi.", "1065498209": "Takrorlash (1)", - "1065766135": "You have {{remaining_transfers}} {{transfer_text}} remaining for today.", - "1066235879": "Transferring funds will require you to create a second account.", - "1066459293": "4.3. Acknowledging your complaint", - "1069347258": "The verification link you used is invalid or expired. Please request for a new one.", - "1070323991": "6. If consecutive successful trades were to happen, the stake would follow a sequence of adjustment from 1 to 3, then 2, and 6 units of initial stake. After 4 consecutive successful trades, it completes one cycle and then the strategy will repeat itself for another cycle. If any trade results in a loss, your stake will reset back to the initial stake for the next trade.", - "1070624871": "Check proof of address document verification status", - "1073261747": "Verifications", - "1073611269": "A copy of your identity document (e.g. identity card, passport, driver's license)", - "1073711308": "Trade closed", - "1076006913": "Profit/loss on the last {{item_count}} contracts", - "1077515534": "Date to", - "1078189922": "You can make a new deposit once the verification of your account is complete.", - "1078221772": "Leverage prevents you from opening large positions.", + "1065766135": "Bugunga {{remaining_transfers}} {{transfer_text}} qoldi.", + "1066235879": "Pul o'tkazish sizdan ikkinchi hisob yaratishni talab qiladi.", + "1066459293": "4.3. Shikoyatingizni tasdiqlash", + "1069347258": "Siz ishlatgan tasdiqlash havolasi yaroqsiz yoki muddati tugagan. Iltimos, yangisini so'rang.", + "1070323991": "6. Agar ketma-ket muvaffaqiyatli savdolar amalga oshirilsa, stavka 1 dan 3 gacha, so'ngra 2 va 6 birlik boshlang'ich stavka birligiga moslash ketma-ketligiga amal qiladi. Ketma-ket 4 ta muvaffaqiyatli savdodan so'ng, u bir tsiklni yakunlaydi va keyin strategiya boshqa tsikl uchun takrorlanadi. Agar biron bir savdo yo'qotishga olib kelsa, sizning stavkangiz keyingi savdo uchun dastlabki stavkaga qayta tiklanadi.", + "1070624871": "Manzilni tasdiqlovchi hujjat tekshir holatini tekshiring", + "1073261747": "Tekshiruvlar", + "1073611269": "Shaxsingizni tasdiqlovchi hujjatning nusxasi (masalan, Id karta, pasport, haydovchilik guvohnomasi)", + "1073711308": "Savdo yopildi", + "1076006913": "Oxirgi {{item_count}} ta shartnoma bo‘yicha profit/loss", + "1077515534": "Sana (text) gacha", + "1078189922": "Hisobingizni tekshirish tugallangandan so'ng siz yangi depozit qo'yishingiz mumkin.", + "1078221772": "Leverage sizni katta pozitsiyalarni ochishingizga to'sqinlik qiladi.", "1078303105": "Stop out", "1080068516": "Harakat", - "1080990424": "Confirm", - "1082158368": "*Maximum account cash balance", - "1082406746": "Please enter a stake amount that's at least {{min_stake}}.", + "1080990424": "Tasdiqlang", + "1082158368": "*Hisobdagi maksimal qoldiq", + "1082406746": "Iltimos, kamida {{min_stake}} stavka miqdorini kiriting.", "1083781009": "Soliq identifikatsiya raqami*", "1083826534": "Blokni yoqish", - "1087112394": "You must select the strike price before entering the contract.", + "1087112394": "Shartnomani sotib olishdan oldin, ish tashlash narxini tanlashingiz kerak.", "1088031284": "Amalga oshirish narxi:", - "1088138125": "Tick {{current_tick}} - ", - "1089085289": "Mobile number", + "1088138125": "Tik {{current_tick}} - ", + "1089085289": "Mobil telefon raqami", "1089436811": "Qo'llanmalar", - "1089687322": "Stop your current bot?", - "1090041864": "The {{block_type}} block is mandatory and cannot be deleted/disabled.", - "1090802140": "Additional Information", - "1095295626": "<0>•The Arbiter for Financial Services will determine whether the complaint can be accepted and is in accordance with the law.", - "1096078516": "We’ll review your documents and notify you of its status within 3 days.", - "1096175323": "You’ll need a Deriv account", - "1098147569": "Purchase commodities or shares of a company.", - "1098622295": "\"i\" starts with the value of 1, and it will be increased by 2 at every iteration. The loop will repeat until \"i\" reaches the value of 12, and then the loop is terminated.", - "1100133959": "National ID", - "1100870148": "To learn more about account limits and how they apply, please go to the <0>Help Centre.", - "1101712085": "Buy Price", - "1102420931": "Next, upload the front and back of your driving licence.", - "1102995654": "Calculates Exponential Moving Average (EMA) list from a list of values with a period", - "1103309514": "Target", - "1103452171": "Cookies help us to give you a better experience and personalised content on our site.", - "1104912023": "Pending verification", - "1107474660": "Submit proof of address", - "1107555942": "To", - "1109182113": "Note: Deal cancellation is only available for Volatility Indices on Multipliers.", - "1109217274": "Success!", - "1110102997": "Statement", + "1089687322": "Joriy bot to'xtatilsinmi?", + "1090041864": "{{block_type}} blok majburiy va uni olib tashlash yoki o‘chirib bo‘lmaydi.", + "1090802140": "Qo'shimcha ma'lumot", + "1095295626": "<0>• Moliyaviy xizmatlar hakami shikoyatning maqbul va qonuniy ekanligini aniqlaydi.", + "1096078516": "Hujjatlaringizni koʻrib chiqamiz va 3 kun ichida uning holati haqida sizga xabar beramiz.", + "1096175323": "Sizga Deriv hisobi kerak bo'ladi", + "1098147569": "Kompaniyaning tovarlari yoki aktsiyalarini sotib olish.", + "1098622295": "\"i\" 1 qiymatidan boshlanadi va har bir iteratsiyada u 2 ga oshiriladi. \"i\" 12 qiymatiga yetguncha tsikl takrorlanadi va keyin tsikl tugaydi.", + "1100133959": "Milliy ID", + "1100870148": "Hisob cheklovlari va ular qanday qo‘llanilishi haqida batafsil ma’lumot olish uchun <0>Yordam markaziga kiring.", + "1101712085": "Sotib olish narxi", + "1102420931": "Keyin haydovchilik guvohnomangizning old va orqa tomonlarini yuklang.", + "1102995654": "Muayyan davrdagi qiymatlar ro'yxatidan Eksponensial harakatlanuvchi o'rtacha (EMA) ro'yxatini hisoblaydi", + "1103309514": "Maqsad", + "1103452171": "Cookie-fayllar sizga saytimizda yaxshiroq tajriba va moslashtirilgan tarkibni taqdim qilishimizga yordam beradi.", + "1104912023": "Tasdiqlash kutilmoqda", + "1107474660": "Manzilni tasdiqlovchi hujjatni taqdim eting", + "1107555942": "Ga", + "1109182113": "Eslatma: Bitimni bekor qilish faqat Multipliers Volatility indekslari uchun mavjud.", + "1109217274": "Tayyor!", + "1110102997": "Hisob tarixi", "1111743543": "Stop loss (Multiplier)", - "1112582372": "Interval duration", - "1113119682": "This block gives you the selected candle value from a list of candles.", - "1113227831": "Yes, you can. However, there are limits on your account, such as maximum number of open positions and maximum aggregate payouts on open positions. So, just keep these limits in mind when opening multiple positions. You can find more info about these limits at Settings > Account limits.", - "1113292761": "Less than 8MB", - "1113390200": "Your open trades will appear here.", - "1114679006": "You have successfully created your bot using a simple strategy.", + "1112582372": "Interval davomiyligi", + "1113119682": "Ushbu blok sizga shamlar ro'yxatidan tanlangan sham qiymatini beradi.", + "1113227831": "Ha siz qila olasiz. Biroq, sizning hisobingizda ochiq pozitsiyalarning maksimal soni va ochiq pozitsiyalar bo'yicha maksimal jami to'lovlar kabi cheklovlar mavjud. Shunday qilib, bir nechta pozitsiyalarni ochishda ushbu cheklovlarni yodda tuting. Bu cheklovlar haqida batafsil maʼlumotni Sozlamalar > Hisob cheklovlari sahifasidan topishingiz mumkin.", + "1113292761": "8 MB dan kam", + "1113390200": "Sizning ochiq savdolaringiz shu yerda paydo bo'ladi.", + "1114679006": "Siz oddiy strategiya yordamida botingizni muvaffaqiyatli yaratdingiz.", "1117281935": "Sotish shartlari (ixtiyoriy)", "1117863275": "Xavfsizlik", - "1118294625": "You have chosen to exclude yourself from trading on our website until {{exclusion_end}}. If you are unable to place a trade or deposit after your self-exclusion period, please contact us via live chat.", + "1118294625": "Siz {{exclusion_end}}gacha veb-saytimizda savdo qilishdan chetlashtirishni tanladingiz. Agar siz o'z-o'zini istisno qilish muddatidan keyin savdo yoki depozitni joylashtira olmasangiz, jonli chat orqali biz bilan bog'laning.", "1119887091": "Tasdiqlash", - "1119986999": "Your proof of address was submitted successfully", - "1120985361": "Terms & conditions updated", - "1121050010": "Transaction fee: {{amount}} {{currency}}", - "1122910860": "Please complete your <0>financial assessment.", - "1123927492": "You have not selected your account currency", - "1124382808": "Please enter the expiry time in the format \"HH:MM\".", - "1125090693": "Must be a number", - "1126075317": "Add your Deriv MT5 <0>{{account_type_name}} STP account under Deriv (FX) Ltd regulated by Labuan Financial Services Authority (Licence no. MB/18/0024).", + "1119986999": "Manzilingizni tasdiqlovchi hujjat muvaffaqiyatli topshirildi", + "1120985361": "Shartlar yangilandi", + "1121050010": "Tranzaksiya komissiyasi: {{amount}} {{currency}}", + "1122910860": "Iltimos, <0>moliyaviy baholashni yakunlang.", + "1123927492": "Siz hisob valyutasini tanlamadingiz", + "1124382808": "Iltimos, amal qilish muddatini “HH:MM” formatida kiriting.", + "1125090693": "Raqam bo'lishi kerak", + "1126075317": "Deriv MT5 <0>{{account_type_name}} STP hisobingizni Labuan Financial Services Authority tomonidan boshqariladigan Deriv (FX) Ltd ostida qo'shing (Litsenziya № MB/18/0024).", "1126934455": "Token nomi uzunligi 2 dan 32 gacha belgidan iborat bo'lishi kerak.", - "1127224297": "Sorry for the interruption", - "1127884488": "cTrader MacOS app", - "1128139358": "How many CFD trades have you placed in the past 12 months?", + "1127224297": "Xalaqit uchun uzr", + "1127884488": "cTrader MacOS ilova", + "1128139358": "Oxirgi 12 oy ichida qancha CFD shartnomasini ochdingiz?", "1128321947": "Hammasini tozalash", - "1128404172": "Undo", - "1129124569": "If you select \"Under\", you will win the payout if the last digit of the last tick is less than your prediction.", - "1129842439": "Please enter a take profit amount.", - "1133651559": "Live chat", - "1134879544": "Example of a document with glare", + "1128404172": "Bekor qilish", + "1129124569": "Agar siz \"Under\" ni tanlasangiz, oxirgi tikni oxirgi raqami sizning bashoratingizdan kam bo'lsa, to'lovni yutib olasiz.", + "1129842439": "Iltimos, olinadigan foyda miqdorini kiriting.", + "1133651559": "Jonli suhbat", + "1134879544": "Yaltiroq bilan hujjat namunasi", "1134883120": "cTrader-ga kirish uchun Deriv hisob email va parolidan foydalaning.", - "1138126442": "Forex: standard", - "1143730031": "Direction is {{ direction_type }}", - "1144028300": "Relative Strength Index Array (RSIA)", - "1145927365": "Run the blocks inside after a given number of seconds", - "1146064568": "Go to Deposit page", - "1147269948": "Barrier cannot be zero.", - "1150637063": "*Volatility 150 Index and Volatility 250 Index", - "1151964318": "both sides", - "1152294962": "Upload the front of your driving licence.", - "1154021400": "list", - "1154239195": "Title and name", - "1155011317": "This block converts the date and time to the number of seconds since the Unix Epoch (1970-01-01 00:00:00).", - "1155143434": "By clicking on <0>Next you agree to move your {{platform}} {{type}} {{from_account}} account(s) under <2/>Deriv {{account_to_migrate}} Ltd’s <1>terms and conditions.", - "1155626418": "below", - "1158678321": "<0>b.The Head of the Dispute Resolution Committee (DRC) will contact both you and us within 5 business days to obtain all necessary information and see if there is a chance to settle the complaint during the investigation phase.", - "1160761178": "No payout if exit spot is below or equal to the lower barrier.", - "1161924555": "Please select an option", - "1163771266": "The third block is <0>optional. You may use this block if you want to sell your contract before it expires. For now, leave the block as it is. ", - "1163836811": "Real Estate", - "1164773983": "Take profit and/or stop loss are not available while deal cancellation is active.", - "1166023941": "New password", - "1166128807": "Choose one of your accounts or add a new cryptocurrency account", - "1166377304": "Increment value", - "1166916934": "Demo Standard SVG", - "1168029733": "Win payout if exit spot is also equal to entry spot.", + "1138126442": "Forex: standart", + "1143730031": "Yoʻnalish: {{ direction_type }}", + "1144028300": "Nisbiy kuch indeksi massivi (RSIA)", + "1145927365": "Belgilangan soniyalardan keyin bloklarni ichkarida ishga tushiring", + "1146064568": "Depozit sahifasiga o'tish", + "1147269948": "To'siq nolga teng bo'lishi mumkin emas.", + "1150637063": "*Volatility 150 Indeksi va Volatility 250 Indeksi", + "1151964318": "har ikki tomon", + "1152294962": "Haydovchilik guvohnomasining old qismini yuklang.", + "1154021400": "royxat", + "1154239195": "Sarlavha va ism", + "1155011317": "Ushbu blok sana va vaqtni Unix Epoch (1970-01-01 00:00:00) dan keyingi soniyalar soniga aylantiradi.", + "1155143434": "<0>Keyingi tugmasini bosish orqali siz {{platform}} {{type}} {{from_account}} hisob(lar)ingiz <2/>Deriv {{account_to_migrate}} Ltd kompaniyasining <1>shartlariga va shartlar Siz uni bajarishga rozilik bildirasiz", + "1155626418": "ostida", + "1158678321": "<0>b.Nizolarni hal qilish qoʻmitasi (Dispute Resolution Committee) rahbari 5 ish kuni ichida barcha kerakli maʼlumotlarni olish va shikoyatni tekshirish bosqichida hal qilish imkoniyati mavjudligini bilish uchun siz va biz bilan bogʻlanadi.", + "1160761178": "Chiqish joyi pastki toʻsiqdan past yoki unga teng boʻlsa, toʻlov amalga oshirilmaydi.", + "1161924555": "Optsiyani tanlang", + "1163771266": "Uchinchi blok <0>ixtiyoriy. Shartnomangizni muddati tugashidan oldin sotmoqchi bo'lsangiz, ushbu blokdan foydalanishingiz mumkin. Hozircha blokni avvalgidek qoldiring. ", + "1163836811": "Ko'chmas mulk", + "1164773983": "Take profit/stop loss bitimni bekor qilish faol bo'lganda mavjud emas.", + "1166023941": "Yangi parol", + "1166128807": "Hisoblaringizdan birini tanlang yoki yangi kriptovalyuta hisobini qo'shing", + "1166377304": "O'sish qiymati", + "1166916934": "Demo Standart SVG", + "1168029733": "Agar chiqish joyi ham kirish joyiga teng bo'lsa, to'lovni yutib oling.", "1169201692": "{{platform}} parol yaratish", - "1170228717": "Stay on {{platform_name_trader}}", + "1170228717": "{{platform_name_trader}}da qolish", "1171765024": "Qadam 3", "1171961126": "savdo parametrlari", - "1172230903": "• Stop loss threshold: Use this variable to store your loss limit. You can assign any amount you want. Your bot will stop when your losses hits or exceeds this amount.", - "1172524677": "CFDs Demo", - "1173957529": "Go to ‘Account Settings’ on Deriv.", - "1174542625": "- Find the chat ID property in the response, and copy the value of the id property", - "1174689133": "3. Set your trade parameters and hit Run.", - "1174748431": "Payment channel", + "1172230903": "• Stop loss chegarasi: Stop loss chegarasini saqlash uchun ushbu o‘zgaruvchidan foydalaning. Siz xohlagan miqdorni belgilashingiz mumkin. Sizning botingiz yo'qotishlaringiz bu miqdorga yetganda yoki oshib ketganda to'xtaydi.", + "1172524677": "CFD'lar Demo", + "1173957529": "Deriv-da \"Hisob sozlamalari\" ga o'ting.", + "1174542625": "- Javobdagi chat id xususiyatini toping va id xususiyati qiymatini nusxalang", + "1174689133": "3. Savdo parametrlarini o'rnating va Ishga tushirish-ni bosing.", + "1174748431": "To'lov kanali", "1175183064": "Vanuatu", - "1177396776": "If you select \"Asian Fall\", you will win the payout if the last tick is lower than the average of the ticks.", - "1177723589": "There are no transactions to display", - "1178582280": "The number of contracts you have lost since you last cleared your stats.", - "1178800778": "Take a photo of the back of your license", - "1178942276": "Please try again in a minute.", - "1179704370": "Please enter a take profit amount that's higher than the current potential profit.", - "1181396316": "This block gives you a random number from within a set range", - "1181770592": "Profit/loss from selling", - "1183007646": "- Contract type: the name of the contract type such as Rise, Fall, Touch, No Touch, etс.", - "1183448523": "<0>We're setting up your Wallets", - "1184968647": "Close your contract now or keep it running. If you decide to keep it running, you can check and close it later on the ", - "1186687280": "Question {{ current }} of {{ total }}", - "1188316409": "To receive your funds, contact the payment agent with the details below", + "1177396776": "Agar siz \"Asian Fall\" tanlasangiz, oxirgi tik o'rtacha tikdan past bo'lsa, to'lovni yutib olasiz.", + "1177723589": "Ko‘rsatiladigan tranzaksiya yo‘q", + "1178582280": "Statistikani oxirgi marta tozalaganingizdan beri yo'qotgan shartnomalar soni.", + "1178800778": "Litsenziyangizning orqa qismini suratga oling", + "1178942276": "Bir daqiqadan so‘ng qayta urinib ko‘ring.", + "1179704370": "Joriy potentsial foydadan yuqori bo'lgan foyda miqdorini kiriting.", + "1181396316": "Ushbu blok sizga belgilangan diapazondan tasodifiy raqamni beradi", + "1181770592": "Sotishdan olingan profit/loss", + "1183007646": "- Shartnoma turi: shartnoma turining nomi, masalan, Rise, Fall, Touch, No Touch va boshqalar.", + "1183448523": "<0>Biz sizning Wallets'larni sozlaymiz", + "1184968647": "Shartnomangizni hozir yoping yoki uni davom ettiring. Agar siz uni davom ettirishga qaror qilsangiz, uni keyinroq tekshirishingiz va yopishingiz mumkin ", + "1186687280": "Savol {{ current }} {{ total }}", + "1188316409": "Mablag'ingizni olish uchun quyidagi tafsilotlar bilan to'lov agentiga murojaat qiling", "1188980408": "5 daqiqa", - "1189249001": "4.1. What is considered a complaint?", - "1189368976": "Please complete your personal details before you verify your identity.", - "1190226567": "Standard - Vanuatu", + "1189249001": "4.1. Shikoyat nima deb hisoblanadi?", + "1189368976": "Shaxsingizni tasdiqlashdan oldin shaxsiy maʼlumotlaringizni toʻldiring.", + "1190226567": "Standart - Vanuatu", "1191429031": "<0>{{platform_name_dxtrade}} parolingizni o'zgartirish uchun eltimos, email-dagi havolani bosing.", - "1195393249": "Notify {{ notification_type }} with sound: {{ notification_sound }} {{ input_message }}", - "1196006480": "Profit threshold", - "1197649109": "No results for {{searchTerm}}", - "1198368641": "Relative Strength Index (RSI)", - "1199281499": "Last Digits List", + "1195393249": "Xabar bering {{ notification_type }} ovoz bilan: {{ notification_sound }} {{ input_message }}", + "1196006480": "Foyda chegarasi", + "1197649109": "{{searchTerm}} boʻyicha hech narsa topilmadi", + "1198368641": "Nisbiy kuch indeksi (RSI)", + "1199281499": "Oxirgi raqamlar ro'yxati", "1201299746": "Botlar ro'yxati", "1201533528": "Muvaffaqiyatli shartnomalar", - "1201773643": "numeric", - "1203297580": "This block sends a message to a Telegram channel.", - "1203380736": "The D’Alembert strategy is less risky than Martingale, but you can still determine how long your funds will last with this strategy before trading. Simply use this formula.", - "1204223111": "In this example, the open prices from a list of candles are assigned to a variable called \"candle_list\".", - "1204459171": "Your existing <0>{{platform}} {{type_1}} <1/>and <0>{{type_2}} {{from_account}} account(s) will remain accessible.", - "1206227936": "How to mask your card?", - "1206821331": "Armed Forces", - "1208729868": "Ticks", - "1208903663": "Invalid token", - "1211912982": "Bot is starting", - "1214893428": "Account creation is currently unavailable for mobile. Please log in with your computer to create a new account.", - "1216408337": "Self-Employed", - "1217159705": "Bank account number", - "1217481729": "Tether as an ERC20 token (eUSDT) is a version of Tether that is hosted on Ethereum.", - "1218546232": "What is Fiat onramp?", - "1219844088": "do %1", - "1221250438": "To enable withdrawals, please submit your <0>Proof of Identity (POI) and <1>Proof of Address (POA) and also complete the <2>financial assessment in your account settings.", - "1222096166": "Deposit via bank wire, credit card, and e-wallet", - "1222521778": "Making deposits and withdrawals is difficult.", + "1201773643": "raqamli", + "1203297580": "Ushbu blok Telegram kanaliga xabar yuboradi.", + "1203380736": "D'Alembert strategiyasi Martingalega qaraganda kamroq xavfli, ammo siz hali ham savdodan oldin ushbu strategiya bilan mablag'laringiz qancha davom etishini aniqlashingiz mumkin. Shunchaki ushbu formuladan foydalaning.", + "1204223111": "Ushbu misolda shamlar ro'yxatidagi ochiq narxlar \"candle_list\" deb nomlangan o'zgaruvchiga tayinlangan.", + "1204459171": "Mavjud <0>{{platform}} {{type_1}} <1/>va <0>{{type_2}} {{from_account}} hisob(lar)ingizga kirish mumkin bo‘lib qoladi.", + "1206227936": "Kartani qanday yashirish kerak?", + "1206821331": "Qurolli kuchlar", + "1208729868": "Tiklar", + "1208903663": "Noto'g'ri token", + "1211912982": "Bot ishga tushmoqda", + "1214893428": "Hisob yaratish hozirda mobil qurilmada ishlamaydi. Iltimos, yangi hisob yaratish uchun kompyuteringiz bilan tizimga kiring.", + "1216408337": "Shaxsiy ishini yurituvchi", + "1217159705": "Bank hisob raqami", + "1217481729": "Tether ERC20 tokeni sifatida (eUSDT) Ethereum-da joylashtirilgan Tether versiyasidir.", + "1218546232": "Fiat onramp nima?", + "1219844088": "bajarish %1", + "1221250438": "Pul yechib olishni yoqish uchun <0>Shaxsni tasdiqlovchi hujjat (POI) va <1>Manzilni tasdiqlovchi hujjatni (POA) yuboring hamda hisobingizdagi <2>moliyaviy baholashni bajaring husob sozlamalda.", + "1222096166": "Bank o'tkazmasi, kredit karta va elektron hamyon orqali depozit qo'ying", + "1222521778": "Depozit qo'yish va yechib olish qiyin.", "1222544232": "Biz sizga email yubordik", - "1223993374": "For entry spot, we use current-tick-execution mechanism, which is the latest asset price when the trade opening is processed by our servers.", - "1225874865": "The stake adjustment: target session profit (1 USD) - current session profit (0 USD) = 1 USD", - "1227074958": "random fraction", - "1227132397": "4. For trades that result in a loss, there are two outcomes. If it was traded at the initial stake, the next trade will remain at the same amount as the strategy trades minimally at the initial stake, see A2. If it was traded with a higher amount, the stake for the next trade would be reduced by 2 USD, see A3.", - "1227240509": "Trim spaces", - "1228534821": "Some currencies may not be supported by payment agents in your country.", - "1229883366": "Tax identification number", + "1223993374": "Kirish joyi uchun biz current-tick-execution mexanizmidan foydalanamiz, bu savdo ochilishi serverlarimiz tomonidan qayta ishlanganida aktivning so'nggi narxidir.", + "1225874865": "Stavka shartnomalari: maqsadli sessiya foydasi (1 USD) - joriy sessiya foydasi (0 USD) = 1 USD", + "1227074958": "tasodifiy kasr", + "1227132397": "4. Zararga olib keladigan savdolar uchun ikkita natija mavjud. Agar u dastlabki stavkada sotilgan bo'lsa, keyingi savdo strategiyasi boshlang'ich ulushda minimal savdolar bilan bir xil miqdorda qoladi, A2 ga qarang. Agar u yuqoriroq miqdorda sotilgan bo'lsa, keyingi savdo uchun ulush 2 USD kamayadi, A3 ga qarang.", + "1227240509": "Bo'shliqlarni olib tashlang", + "1228534821": "Mamlakatingizdagi toʻlov agentlari tomonidan baʼzi valyutalar qoʻllab-quvvatlanmasligi mumkin.", + "1229883366": "Soliq identifikatsiya raqami", "1230884443": "Davlat/Viloyat (ixtiyoriy)", - "1231282282": "Use only the following special characters: {{permitted_characters}}", - "1232291311": "Maximum withdrawal remaining", - "1232353969": "0-5 transactions in the past 12 months", - "1233178579": "Our customers say", - "1233300532": "Payout", - "1233910495": "If you select \"<0>Down\", your total profit/loss will be the percentage decrease in the underlying asset price, times the multiplier and stake, minus commissions.", - "1234292259": "Source of wealth", + "1231282282": "Faqat quyidagi maxsus belgilardan foydalaning: {{permitted_characters}}", + "1232291311": "Qolgan maksimal pul olish", + "1232353969": "Oxirgi 12 oy ichida 0-5 tranzaksiya", + "1233178579": "Mijoz reytingi", + "1233300532": "To'lov", + "1233910495": "Agar siz “<0>Down”ni tanlasangiz, sizning umumiy profit/loss asosiy aktiv narxining foizga kamayishi, multiplikator va stavkaning barobari, komissiyalar chegirib tashlanadi.", + "1234292259": "Boylik manbai", "1234764730": "Shaxsiy ma'lumotlar bo'limidan ismingiz va email manzilingizning skrinshotini yuklang.", - "1236527126": "(Transaction fee: {{transaction_fee}} {{currency_symbol}})", + "1236527126": "(Tranzaksiya komissiyasi: {{transaction_fee}} {{currency_symbol}})", "1237330017": "Pensioner", "1238311538": "Admin", - "1239752061": "In your cryptocurrency wallet, make sure to select the <0>{{network_name}} network when you transfer funds to Deriv.", - "1239760289": "Complete your trading assessment", - "1239940690": "Restarts the bot when an error is encountered.", - "1240027773": "Please Log in", - "1240688917": "Glossary", - "1241238585": "You may transfer between your Deriv fiat, cryptocurrency, and {{platform_name_mt5}} accounts.", - "1242288838": "Hit the checkbox above to choose your document.", - "1242994921": "Click here to start building your Deriv Bot.", + "1239752061": "Deriv-ga pul o‘tkazayotganda kriptovalyuta hamyoningizda <0>{{network_name}} tarmog‘ini tanlaganingizga ishonch hosil qiling.", + "1239760289": "Savdoni baholashni yakunlang", + "1239940690": "Xatolik yuzaga kelganda botni qayta ishga tushiradi.", + "1240027773": "Iltimos, tizimga kiring", + "1240688917": "Lug'at", + "1241238585": "Deriv fiat, kriptovalyuta va {{platform_name_mt5}} hisoblaringiz oʻrtasida oʻtkazishingiz mumkin.", + "1242288838": "Hujjatingizni tanlash uchun yuqoridagi katakchani bosing.", + "1242994921": "Deriv botingizni yaratishni boshlash uchun shu yerni bosing.", "1243064300": "Local", - "1243287470": "Transaction status", + "1243287470": "Tranzaksiya holati", "1246207976": "2FA ilovangiz tomonidan yaratilgan autentifikatsiya kodini kiriting:", - "1246880072": "Select issuing country", - "1247280835": "Our cryptocurrency cashier is temporarily down due to system maintenance. You can make cryptocurrency deposits and withdrawals in a few minutes when the maintenance is complete.", - "1248018350": "Source of income", - "1248940117": "<0>a.The decisions made by the DRC are binding on us. DRC decisions are binding on you only if you accept them.", - "1250113042": "This device doesn't support passkeys.", - "1250495155": "Token copied!", - "1252669321": "Import from your Google Drive", - "1253531007": "Confirmed", - "1253636052": "MetaTrader5 web terminal", - "1254565203": "set {{ variable }} to create list with", - "1255827200": "You can also import or build your bot using any of these shortcuts.", - "1255909792": "last", - "1255963623": "To date/time {{ input_timestamp }} {{ dummy }}", - "1258097139": "What could we do to improve?", - "1258198117": "positive", - "1259145708": "Let’s try again. Choose another document and enter the corresponding details.", + "1246880072": "Chiqaruvchi mamlakatni tanlang", + "1247280835": "Tizimga texnik xizmat koʻrsatish tufayli kriptovalyuta kassirimiz vaqtincha ishlamayapti. Xizmat tugagandan so'ng bir necha daqiqada kriptovalyuta depozitlari va pul mablag'larini olishingiz mumkin.", + "1248018350": "Daromad manbai", + "1248940117": "<0>a.DRC qarorlari biz uchun majburiydir. DRC qarorlari, agar siz ularni qabul qilsangizgina siz uchun majburiydir.", + "1250113042": "Bu qurilma passkeys'larni qoʻllab-quvvatlamaydi.", + "1250495155": "Token nusxalandi!", + "1252669321": "Google Diskdan import qiling", + "1253531007": "Tasdiqlangan", + "1253636052": "MetaTrader5 veb terminal", + "1254565203": "bilan roʻyxat yaratish uchun {{ oʻzgaruvchi }} ni oʻrnating", + "1255827200": "Shuningdek, ushbu klaviatura yorliqlaridan birini ishlatib, botingizni import qilishingiz yoki yaratishingiz mumkin.", + "1255909792": "oxirgi", + "1255963623": "Sana/vaqt {{ input_timestamp }} {{ dummy }}", + "1258097139": "Yaxshilash uchun nima qilishimiz mumkin?", + "1258198117": "ijobiy", + "1259145708": "Yana urinib ko'raylik. Boshqa hujjatni tanlang va tegishli ma'lumotlarni kiriting.", "1259598687": "GBP/JPY", - "1260259925": "Phone is not in a proper format.", - "1264096613": "Search for a given string", - "1265317149": "A recent utility bill (e.g. electricity, water or gas) or recent bank statement or government-issued letter with your name and address.", + "1260259925": "Telefon raqami to'g'ri formatda emas.", + "1264096613": "Berilgan qatorni qidiring", + "1265317149": "Yaqinda kommunal to‘lov (masalan, elektr, suv yoki gaz) yoki yaqinda bankdan olingan ko‘chirma yoki ismingiz va manzilingiz ko‘rsatilgan hukumat tomonidan berilgan xat.", "1265704976": "", - "1266728508": "Proof of income verification passed", + "1266728508": "Daromadni tasdiqlovchi hujjat topshirildi", "1269296089": "Keling, bot yarataylik!", - "1270581106": "If you select \"No Touch\", you win the payout if the market never touches the barrier at any time during the contract period.", + "1270581106": "Agar siz \"No Touch\" ni tanlasangiz, shartnoma muddati davomida istalgan vaqtda bozor hech qachon to'siqqa tegmasa, siz to'lovni yutib olasiz.", "1272012156": "GBP/CHF", - "1272337240": "Days", - "1272681097": "Hours", - "1274380814": "Your payout is equal to the <0>payout per pip multiplied by the difference, <1>in pips, between the final price and the strike price. You will only earn a profit if your payout is higher than your initial stake.", - "1274819385": "3. Complaints and Disputes", - "1276660852": "Submit your proof of identity", - "1281045211": "Sorts the items in a given list, by their numeric or alphabetical value, in either ascending or descending order.", - "1281290230": "Select", + "1272337240": "Kunlar", + "1272681097": "Soatlar", + "1274380814": "Sizning to'lovingiz <0>pip uchun to'lovning yakuniy narx va ogohlantirish narxi o'rtasidagi <1>pipsdagi farqga ko'paytirilganiga teng. Agar sizning to'lovingiz dastlabki ulushingizdan yuqori bo'lsa, siz faqat foyda olasiz.", + "1274819385": "3. Shikoyatlar va nizolar", + "1276660852": "Shaxsingizni tasdiqlovchi hujjatni taqdim eting", + "1281045211": "Berilgan roʻyxatdagi elementlarni raqamli yoki alifbo tartibida oʻsish yoki kamayish tartibida tartiblaydi.", + "1281290230": "Tanlang", "1282951921": "Only Downs", - "1283418744": "Additional features are available to manage your positions: “<0>Take profit”, “<1>Stop loss” and “<2>Deal cancellation” allow you to adjust your level of risk aversion.", - "1284522768": "If \"Loss\" is selected, it will return \"True\" if your last trade was unsuccessful. Otherwise, it will return an empty string.", - "1286094280": "Withdraw", - "1286384690": "If you select “<0>Even”, you will win the payout if the last digit of the last tick is an even number (i.e. 2, 4, 6, 8, or 0).", - "1286507651": "Close identity verification screen", - "1288965214": "Passport", + "1283418744": "Pozitsiyalaringizni boshqarish uchun qoʻshimcha funksiyalar mavjud: “<0>Take profit”, “<1>Stop loss” va “<2>Belgilarni bekor qilish” xavfdan voz kechish darajasini sozlash imkonini beradi.", + "1284522768": "Agar \"Loss\" tanlansa, oxirgi savdoingiz muvaffaqiyatsiz bo'lsa, u \"True\"ni qaytaradi. Aks holda, u bo'sh qatorni qaytaradi.", + "1286094280": "Chiqarish", + "1286384690": "Agar siz “<0>Even”ni tanlasangiz, oxirgi belgining oxirgi tikni juft bo‘lsa (masalan, 2, 4, 6, 8 yoki 0) to‘lovni yutib olasiz.", + "1286507651": "Shaxsni tasdiqlash ekranini yoping", + "1288965214": "Pasport", "1289146554": "British Virgin Islands Financial Services Commission", - "1289650867": "The Oscar’s Grind strategy is designed to potentially gain a modest yet steady profit in each trading session. This strategy splits trades into sessions and has three principles.", - "1290525720": "Example: ", + "1289650867": "Oskarning Grind strategiyasi har bir savdo sessiyasida kamtarona, ammo barqaror daromad olish uchun mo'ljallangan. Ushbu strategiya savdolarni sessiyalarga ajratadi va uchta printsipga ega.", + "1290525720": "Misol: ", "1290627672": "Faqat bir botni bir marta ishga tushirishingiz mumkin.", - "1291997417": "Contracts will expire at exactly 23:59:59 GMT on your selected expiry date.", - "1292179259": "No open trades", - "1292188546": "Reset Deriv MT5 investor password", - "1292891860": "Notify Telegram", - "1293660048": "Max. total loss per day", - "1294553728": "We’re unable to verify the document you provided because it appears to be a blank image. Please try again or upload another document.", - "1294756261": "This block creates a function, which is a group of instructions that can be executed at any time. Place other blocks in here to perform any kind of action that you need in your strategy. When all the instructions in a function have been carried out, your bot will continue with the remaining blocks in your strategy. Click the “do something” field to give it a name of your choice. Click the plus icon to send a value (as a named variable) to your function.", + "1291997417": "Shartnomalar siz tanlagan amal qilish sanasida aniq 23:59:59 GMT da tugaydi.", + "1292179259": "Ochiq savdolar yo'q", + "1292188546": "Deriv MT5 investor parolini tiklash", + "1292891860": "Telegramga xabar bering", + "1293660048": "Maks. kuniga umumiy yo'qotish", + "1294553728": "Siz taqdim etgan hujjatni tasdiqlay olmadik, chunki u boʻsh rasmga oʻxshaydi. Qaytadan urinib koring yoki boshqa hujjat yuklang.", + "1294756261": "Ushbu blok istalgan vaqtda bajarilishi mumkin bo'lgan ko'rsatmalar guruhi bo'lgan funktsiyani yaratadi. Strategiyangizda kerak bo'lgan har qanday harakatni bajarish uchun bu erga boshqa bloklarni joylashtiring. Funktsiyadagi barcha ko'rsatmalar bajarilgandan so'ng, sizning botingiz strategiyangizdagi qolgan bloklar bilan davom etadi. Siz tanlagan nomni berish uchun \"biror narsa qilish\" maydonini bosing. Funksiyangizga qiymat (nomli oʻzgaruvchi sifatida) yuborish uchun ortiqcha belgisini bosing.", "1295053602": "Ishlayotgan botni o'chira olmaysiz.", - "1295284664": "Please accept our <0>updated Terms and Conditions to proceed.", - "1296380713": "Close my contract", - "1298254025": "Standard - BVI", - "1299479533": "8 hours", - "1300576911": "Please resubmit your proof of address or we may restrict your account.", - "1302691457": "Occupation", + "1295284664": "Davom etish uchun <0>yangilangan Shartlarni qabul qiling.", + "1296380713": "Shartnomamni yopish", + "1298254025": "Standart - BVI", + "1299479533": "8 soat", + "1300576911": "Iltimos, manzilingizni tasdiqlovchi hujjatni qayta yuboring, aks holda hisobingizni cheklab qo‘yishimiz mumkin.", + "1302691457": "Kasb-hunar", "1303016265": "Ha", - "1303530014": "We’re processing your withdrawal.", - "1304083330": "copy", + "1303530014": "Pulingizni yechib olish jarayoni ko‘rib chiqilmoqda.", + "1304083330": "nusxa olish", "1304272843": "Iltimos, manzilingizni tasdiqlovchi hujjatni yuboring.", - "1304620236": "Enable camera", - "1305217290": "Upload the back of your identity card.", - "1306976251": "Standard SVG", - "1308625834": "Sets the default time interval for blocks that read list of candles.", - "1309017029": "Enabling this allows you to save your blocks as one collection which can be easily integrated into other bots.", - "1309044871": "Returns the value of the latest tick in string format", - "1310483610": "Results for \"{{ search_term }}\"", - "1311680770": "payout", - "1313167179": "Please log in", - "1313302450": "The bot will stop trading if your total loss exceeds this amount.", + "1304620236": "Kamerani yoqing", + "1305217290": "Shaxsiy guvohnomangizning orqa qismini yuklang.", + "1306976251": "Standart SVG", + "1308625834": "Shamlar ro'yxatini o'qiydigan bloklar uchun standart vaqt oralig'ini o'rnatadi.", + "1309017029": "Buni yoqish sizga bloklaringizni boshqa botlarga osongina birlashtirilishi mumkin bo'lgan bitta to'plam sifatida saqlash imkonini beradi.", + "1309044871": "Satr formatidagi oxirgi tikni qiymatini qaytaradi", + "1310483610": "“{{ search_term }}” uchun natijalar", + "1311680770": "to'lov", + "1313167179": "Iltimos, tizimga kiring", + "1313302450": "Agar sizning umumiy yo'qotishingiz ushbu miqdordan oshsa, bot savdoni to'xtatadi.", "1314572331": "Your document failed our verification checks.", "1316216284": "You can use this password for all your {{platform}} accounts.", "1319217849": "Check your mobile", @@ -1431,6 +1431,7 @@ "1405584799": "with interval: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "Click the plus icon to extend the functionality of this block.", + "1410016796": "Pastki nuqta:", "1411373212": "Strong passwords contain at least 8 characters. combine uppercase and lowercase letters, numbers, and symbols.", "1411419173": "Growth Rate: {{ accumulator }}", "1412405902": "See important notes", @@ -1754,6 +1755,7 @@ "1736292549": "Update postal code", "1737352280": "Bot.init is not called", "1738094481": "<0>Duration: Ticks 1", + "1738206798": "Yuqori nuqta", "1738611950": "About Reverse Martingale", "1738681493": "Remove your glasses, if necessary", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "Deposit in your local currency via an authorised, independent payment agent in your country.", "1867217564": "Index must be a positive integer", "1867783237": "High-to-Close", - "1869315006": "See how we protect your funds to unlock the cashier.", "1869486036": "Agar shartnoma muddati davomiga sot narx hech qachon <0>to'siqga tegmasa yoki uni buzmasa, siz <0>muddati tugashida <0>to'lov olasiz. Agar shunday bo'lsa, shartnomangiz muddatidan oldin bekor qilinadi.", "1869787212": "Even", "1870933427": "Crypto", @@ -2811,7 +2812,6 @@ "-541392118": "Your account has not been authenticated. Please submit your <0>proof of identity and <1>proof of address to authenticate your account and access your cashier.", "-599998434": "You cannot make a fund transfer as your documents are still under review. We will notify you by email within 3 days once your verification is approved.", "-247122507": "Your cashier is locked. Please complete the <0>financial assessment to unlock it.", - "-1443721737": "Your cashier is locked. See <0>how we protect your funds before you proceed.", "-901712457": "Your access to Cashier has been temporarily disabled as you have not set your 30-day turnover limit. Please go to <0>Self-exclusion and set your 30-day turnover limit.", "-166472881": "Your <0>personal details are incomplete. Please go to your account settings and complete your personal details to enable deposits and withdrawals.", "-666905139": "Deposits are locked", @@ -2828,7 +2828,6 @@ "-1675848843": "Error", "-283017497": "Retry", "-1294455996": "Deriv P2P unavailable", - "-1838982691": "UNKNOWN", "-532693866": "Something went wrong. Please refresh the page and try again.", "-1196049878": "First line of home address", "-1326406485": "Postal Code/ZIP", @@ -2837,9 +2836,9 @@ "-1459042184": "Update your personal details", "-1603543465": "We can't validate your personal details because there is some information missing.", "-614516651": "Need help? <0>Contact us.", - "-203002433": "Deposit now", "-720315013": "You have no funds in your {{currency}} account", "-2052373215": "Please make a deposit to use this feature.", + "-203002433": "Deposit now", "-379487596": "{{selected_percentage}}% of available balance ({{format_amount}} {{currency__display_code}})", "-1957498244": "more", "-1059419768": "Eslatmalar", @@ -3224,7 +3223,7 @@ "-625024929": "Leaving already?", "-584289785": "No, I'll stay", "-1435060006": "If you leave, your current contract will be completed, but your bot will stop running immediately.", - "-783058284": "Umumiy tikish", + "-783058284": "Umumiy stavka", "-2077494994": "Jami to'lov", "-1073955629": "Foydalanish soni", "-1729519074": "Yo'qolgan shartnomalar", @@ -3401,7 +3400,6 @@ "-705744796": "Your demo account balance has reached the maximum limit, and you will not be able to place new trades. Reset your balance to continue trading from your demo account.", "-2063700253": "disabled", "-1585069798": "Please click the following link to complete your Appropriateness Test.", - "-1287141934": "Find out more", "-367759751": "Your account has not been verified", "-596690079": "Enjoy using Deriv?", "-265932467": "We’d love to hear your thoughts", @@ -3815,11 +3813,18 @@ "-99964540": "When your profit reaches or exceeds the set amount, your trade will be closed automatically.", "-542594338": "Maks. to'lov", "-1622900200": "Enabled", + "-1769815370": "To'siq belgilangan narxda o'rnatiladi.", + "-2062696378": "Yuqori nuqta:", + "-650959802": "To'siq hozirgi nuqtaga nisbatan harakatlanadi, uni yuqorisida belgilangan masofani saqlab turadi.", + "-445997898": "To'siq hozirgi nuqtaga nisbatan harakatlanadi, uni pastida belgilangan masofani saqlab turadi.", + "-1116872874": "Belgilangan narx:", + "-635746838": "Pastki nuqta", + "-548979988": "Belgilangan narx", "-2131851017": "O'sish surati", "-339236213": "Multiplier", "-1396928673": "Risk Management", - "-1358367903": "Tikish", - "-1024650723": "Izoh: Ortib chiqarilayotgan biriktiruvchi shartnomalar uchun mos emas.", + "-1358367903": "Stavka", + "-1024650723": "Eslatma: Ortib chiqarilayotgan biriktiruvchi shartnomalar uchun mos emas.", "-1853307892": "Set your trade", "-1221049974": "Final price", "-843831637": "Stop loss", @@ -4085,7 +4090,7 @@ "-2142851225": "Multiplier savdo parametrlari", "-1466383897": "Duration: {{ duration_unit }} {{ duration_value }}", "-440702280": "Shartnoma parametrlari", - "-1193894978": "Davomiyligi va tikish kabi shartnoma parametrlarini aniqlang. Ba'zi variantlar faqat ayrim turdagi shartnomalar uchun qo'llaniladi.", + "-1193894978": "Davomiyligi va stavka kabi shartnoma parametrlarini aniqlang. Ba'zi variantlar faqat ayrim turdagi shartnomalar uchun qo'llaniladi.", "-46523443": "Duration value is not allowed. To run the bot, please enter a value between {{min}} to {{max}}.", "-1483427522": "Trade Type: {{ trade_type_category }} > {{ trade_type }}", "-323348124": "1. Trade parameters", @@ -4243,7 +4248,7 @@ "-1999539705": "Deal cancel. fee:", "-155989831": "Decrement value", "-338379841": "Indicative price:", - "-2027409966": "Boshlang'ich tikish:", + "-2027409966": "Boshlang'ich stavka:", "-1769852749": "N/A", "-726626679": "Potensial profit/loss:", "-1511825574": "Profit/Loss:", diff --git a/packages/translations/src/translations/vi.json b/packages/translations/src/translations/vi.json index 67c4f4a103c9..988eae473e80 100644 --- a/packages/translations/src/translations/vi.json +++ b/packages/translations/src/translations/vi.json @@ -153,6 +153,7 @@ "157871994": "Liên kết đã hết hạn", "158355408": "Một số dịch vụ có thể tạm thời không khả dụng.", "160746023": "Tether - dưới dạng token Omni (USDT) - là một phiên bản của Tether được lưu trữ trên lớp Omni trên blockchain Bitcoin.", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "Không tìm thấy camera", "164112826": "Khung này cho phép bạn tải các khối từ một liên kết URL nếu chúng được lưu trữ trên một máy chủ từ xa và chúng sẽ chỉ được tải khi bot của bạn chạy.", "164564432": "Tạm thời không thể nạp tiền do bảo trì hệ thống. Bạn có thể nạp tiền khi quá trình bảo trì hoàn tất.", @@ -187,7 +188,6 @@ "195136585": "Biểu đồ Trading View", "195972178": "Lấy ký tự", "196810983": "Nếu quá 24 giờ, thời gian chốt và ngày hết hạn sẽ được áp dụng thay vào đó.", - "196998347": "Chúng tôi giữ tiền của khách hàng trong tài khoản ngân hàng tách biệt với tài khoản hoạt động của chúng tôi. Trong trường hợp mất khả năng thanh toán, tiền sẽ không bị tính là một phần tài sản của công ty. Điều này đáp ứng các yêu cầu của <0>Ủy ban cá cược về việc phân tách tiền của khách hàng ở cấp độ: <1>bảo vệ trung bình.", "197190401": "Ngày hết hạn", "201016731": "<0>Xem thêm", "201091938": "30 ngày", @@ -304,6 +304,7 @@ "312300092": "Cắt các khoảng trống trong một chuỗi hoặc văn bản đã cho.", "313741895": "Khung này trả về \"Đúng\" nếu nến cuối cùng có màu đen. Có thể đặt khung ở bất cứ đâu trên biểu đồ, ngoại trừ trong khung tham số Giao dịch gốc.", "315306603": "Bạn có một tài khoản vẫn chưa chọn loại tiền tệ mặc định. Vui lòng chọn một loại tiền tệ để giao dịch với tài khoản này.", + "315516003": "Khoảng cách từ ngưỡng đến giá giao ngay", "316694303": "Nến màu đen?", "318705408": "Bản demo Zero Spread", "318865860": "đóng", @@ -344,6 +345,7 @@ "351744408": "Kiểm tra nếu một chuỗi văn bản cho sẵn còn trống", "353731490": "Đã hoàn thành công việc", "354945172": "Gửi giấy tờ", + "355647475": "Giá hiện tại", "357477280": "Không nhận diện được khuôn mặt", "357672069": "Xác minh thu nhập không thành công", "359053005": "Vui lòng nhập tên token.", @@ -546,7 +548,6 @@ "567163880": "Tạo một mật khẩu {{platform}}", "567755787": "Cần có Mã số thuế.", "569057236": "Văn bản giấy tờ của bạn được cấp bởi quốc gia nào?", - "571921777": "Mức bảo vệ vốn", "572576218": "Ngôn ngữ", "573173477": "Nến {{ input_candle }} màu đen?", "575668969": "3. Đối với các giao dịch mang lại lợi nhuận, cổ phần cho giao dịch tiếp theo sẽ được tăng thêm 2 USD. Deriv Bot sẽ tiếp tục thêm 2 USD cho mỗi giao dịch thành công. Xem A1.", @@ -956,7 +957,6 @@ "970915884": "MỘT", "974888153": "High-Low", "975608902": "Để giao dịch CFD, trước tiên hãy đăng ký tài khoản Deriv Apps.", - "975668699": "Tôi xác nhận và đồng ý với <0>Điều khoản và Điều kiện của {{company}}", "975747761": "Đang diễn ra", "975950139": "Quốc gia cư trú", "977647549": "Lưu ý: Bạn có thể sử dụng mật khẩu này cho tất cả tài khoản {{platform}} của mình.", @@ -1431,6 +1431,7 @@ "1405584799": "với thời lượng: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "Nhấp vào biểu tượng dấu cộng để mở rộng chức năng của khung này.", + "1410016796": "Low thấp:", "1411373212": "Mật khẩu mạnh chứa ít nhất 8 ký tự, kết hợp giữa chữ hoa, chữ thường, số và ký hiệu.", "1411419173": "Tốc độ tăng trưởng: {{ accumulator }}", "1412405902": "Xem ghi chú quan trọng", @@ -1754,6 +1755,7 @@ "1736292549": "Cập nhật mã bưu điện", "1737352280": "Bot.init không được gọi", "1738094481": "<0>Thời lượng: Tick 1", + "1738206798": "Trên mức giá", "1738611950": "Thông tin về Reverse Martingale", "1738681493": "Hãy bỏ kính, nếu cần thiết", "1739086943": "Wall Street 30", @@ -1897,7 +1899,6 @@ "1866811212": "Nạp tiền theo đơn vị tiền tệ địa phương thông qua đại lý thanh toán độc lập, đã được ủy quyền tại quốc gia của bạn.", "1867217564": "Chỉ số phải là một số nguyên dương", "1867783237": "High-to-Close", - "1869315006": "Hãy xem cách chúng tôi bảo vệ tiền của bạn để mở khóa cổng thanh toán.", "1869486036": "Bạn sẽ nhận được khoản <0>chi trả khi <0>hết hạn nếu giá giao ngay không chạm hoặc vượt quá <0>mức ngưỡng trong thời gian hợp đồng. Nếu vi phạm, hợp đồng của bạn sẽ bị chấm dứt sớm.", "1869787212": "Even", "1870933427": "Tiền điện tử", @@ -2811,7 +2812,6 @@ "-541392118": "Tài khoản của bạn chưa được xác thực. Vui lòng gửi <0>giấy tờ xác thực danh tính và <1>giấy tờ xác thực địa chỉ để xác thực tài khoản và truy cập vào cổng thanh toán của bạn.", "-599998434": "Bạn không thể chuyển tiền vì giấy tờ của bạn vẫn đang được xem xét. Chúng tôi sẽ thông báo đến bạn qua email trong vòng 3 ngày sau khi xác minh của bạn được phê duyệt.", "-247122507": "Cổng thanh toán của bạn đã bị khóa. Vui lòng hoàn thành <0>đánh giá tài chính để mở khóa.", - "-1443721737": "Cổng thanh toán của bạn đã bị khóa. Hãy xem <0>cách chúng tôi bảo vệ tiền của bạn trước khi tiếp tục.", "-901712457": "Quyền truy cập của bạn vào cổng thanh toán tạm thời bị vô hiệu hóa do bạn chưa đặt giới hạn doanh thu trong 30 ngày của mình. Vui lòng đi tới <0>Tự ngăn giao dịch và đặt giới hạn doanh thu trong 30 ngày của bạn.", "-166472881": "<0>Thông tin cá nhân của bạn không đầy đủ. Vui lòng đi tới cài đặt tài khoản và điền đầy đủ thông tin cá nhân để có thể nạp và rút tiền.", "-666905139": "Tính năng nạp tiền đã bị khóa", @@ -2828,7 +2828,6 @@ "-1675848843": "Lỗi", "-283017497": "Thử lại", "-1294455996": "Deriv P2P hiện không khả dụng", - "-1838982691": "UNKNOWN", "-532693866": "Đã có lỗi xảy ra. Vui lòng làm mới trang và thử lại.", "-1196049878": "Dòng đầu tiên của địa chỉ nhà", "-1326406485": "Mã bưu chính/Mã ZIP", @@ -2837,9 +2836,9 @@ "-1459042184": "Cập nhật các thông tin cá nhân của bạn", "-1603543465": "Chúng tôi không thể xác minh thông tin cá nhân của bạn bởi một số thông tin vẫn còn thiếu.", "-614516651": "Bạn cần trợ giúp? <0>Hãy liên hệ với chúng tôi.", - "-203002433": "Nạp tiền ngay", "-720315013": "Bạn không có tiền trong tài khoản {{currency}} của mình", "-2052373215": "Vui lòng nạp tiền để sử dụng chức năng này.", + "-203002433": "Nạp tiền ngay", "-379487596": "{{selected_percentage}}% số dư khả dụng ({{format_amount}} {{currency__display_code}})", "-1957498244": "thêm", "-1059419768": "Lưu ý", @@ -3401,7 +3400,6 @@ "-705744796": "Số dư tài khoản thử nghiệm của bạn đã đạt đến giới hạn tối đa và bạn sẽ không thể thực hiện các giao dịch mới. Đặt lại số dư để tiếp tục giao dịch từ tài khoản thử nghiệm của bạn.", "-2063700253": "vô hiệu hoá", "-1585069798": "Vui lòng nhấp vào liên kết sau để hoàn thành Kiểm tra mức độ phù hợp của bạn.", - "-1287141934": "Tìm hiểu thêm", "-367759751": "Tài khoản của bạn chưa được xác minh", "-596690079": "Bạn thích sử dụng Deriv?", "-265932467": "Chúng tôi muốn nghe suy nghĩ của bạn", @@ -3815,6 +3813,13 @@ "-99964540": "Khi lợi nhuận của bạn đạt hoặc vượt quá số tiền được đặt, giao dịch của bạn sẽ tự động đóng.", "-542594338": "Mức chi trả tối đa", "-1622900200": "Đã kích hoạt", + "-1769815370": "Rào cản sẽ được cố định ở mức giá đã đặt.", + "-2062696378": "Dưới mức giá:", + "-650959802": "Rào cản sẽ di chuyển tương ứng với giá hiện tại, duy trì khoảng cách cố định phía trên.", + "-445997898": "Rào cản sẽ di chuyển tương ứng với giá hiện tại, duy trì khoảng cách cố định phía dưới.", + "-1116872874": "Giá cố định:", + "-635746838": "Dưới mức giá", + "-548979988": "Giá cố định", "-2131851017": "Tốc độ tăng trưởng", "-339236213": "Multiplier", "-1396928673": "Quản lý rủi ro", diff --git a/packages/translations/src/translations/zh_cn.json b/packages/translations/src/translations/zh_cn.json index d52fe9ee8150..8bfc8cc1b515 100644 --- a/packages/translations/src/translations/zh_cn.json +++ b/packages/translations/src/translations/zh_cn.json @@ -153,6 +153,7 @@ "157871994": "链接已过期", "158355408": "某些服务可能暂时不可用。", "160746023": "泰达作为 Omni 代币(USDT)是托管在比特币区块链 Omni 层的泰达币版本。", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "未检测到相机", "164112826": "此程序块允许从URL载入在远程服务器保存的程序块(如有)。只有当 Bot操作时才能载入。", "164564432": "由于系统维护,暂时无法存款。一旦维护完成,您即可存款。", @@ -187,7 +188,6 @@ "195136585": "交易视图", "195972178": "获取字符", "196810983": "如果持续时间超过 24 小时,截止时间和到期日期将启用。", - "196998347": "我们把客户资金存在独立的银行账户,与运营账户分开,因此如果公司破产,客户资金不会成为公司资产的一部分。这符合<0>博彩委员会关于客户资金独立管理的要求,即:<1>中等级别保护。", "197190401": "到期日", "201016731": "<0>查看更多", "201091938": "30天", @@ -304,6 +304,7 @@ "312300092": "指定字串或文本范围内修整空格。", "313741895": "如上一个烛形线是黑色,此程序块将返回“真”。它能放在画布上任何位置,除了交易参数根块的范围内。", "315306603": "账户还未指定货币种。请选择此账户的交易币种。", + "315516003": "与当前现货的距离", "316694303": "黑色的蜡烛图线?", "318705408": "演示 Zero Spread", "318865860": "收盘", @@ -344,6 +345,7 @@ "351744408": "测试指定的文本字串是否为空", "353731490": "完成工作", "354945172": "提交文件", + "355647475": "当前现货", "357477280": "未找到人脸", "357672069": "收入验证失败", "359053005": "请输入令牌名称。", @@ -546,7 +548,6 @@ "567163880": "创建{{platform}} 密码", "567755787": "税务识别号为必填项.", "569057236": "文件在哪个国家签发?", - "571921777": "资金保护级别", "572576218": "语言", "573173477": "蜡烛 {{ input_candle }} 是否呈黑色?", "575668969": "3. 交易获利后,下一笔交易的投注额将增加 2 美元。Deriv Bot 将继续为每笔成功交易增加 2 美元。参见 A1。", @@ -956,10 +957,9 @@ "970915884": "一个", "974888153": "High-Low", "975608902": "要交易差价合约,请先获得 Deriv 应用程序账户。", - "975668699": "我确认并接受 {{company}} 的<0>条款和条件", "975747761": "正在进行中", "975950139": "居住国", - "977647549": "注意:您可以将此密码用于所有 {{platform}} 账户。", + "977647549": "注意:可在所有 {{platform}} 账户使用此密码。", "977929335": "前往账户设置", "979713491": "Zero Spread BVI", "980050614": "立即更新", @@ -1014,7 +1014,7 @@ "1023643811": "此程序块买入指定类型的合约。", "1023795011": "Even/Odd", "1024205076": "逻辑运作", - "1024740916": "0.2 个点", + "1024740916": "0.2 点", "1026046972": "请输入小于{{max_payout}} 的赔付额。", "1026289179": "随时随地交易", "1028211549": "全为必填字段", @@ -1431,6 +1431,7 @@ "1405584799": "间隔: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "单击加号图标以扩展此程序块功能。", + "1410016796": "Low 现货价格:", "1411373212": "强密码须至少8个字符,包含大小写字母、数字和符号。", "1411419173": "增长率: {{ accumulator }}", "1412405902": "查看重要提示", @@ -1754,6 +1755,7 @@ "1736292549": "邮政编码更新", "1737352280": "未调用Bot.init", "1738094481": "<0>持续时间:跳动点 1", + "1738206798": "Above spot", "1738611950": "关于 Reverse Martingale", "1738681493": "必要时摘下眼镜", "1739086943": "华尔街 30", @@ -1897,7 +1899,6 @@ "1866811212": "通过您所在国家/地区的授权独立付款代理以当地的货币存款。", "1867217564": "指标必须是正整数", "1867783237": "High-to-Close", - "1869315006": "了解我们如何保护您的资金以解锁收银台。", "1869486036": "如果现货价格在合约期内从未触及或突破<0>障碍,则将在<0>到期时获得<0>赔付。否则,合约将提前终止。", "1869787212": "Even", "1870933427": "加密", @@ -2132,7 +2133,7 @@ "2085387371": "必须是数字、字母和特殊字符 . , ' -", "2085602195": "- 入市数值:合约第一个跳动点的数值", "2086048243": "公司注册证书", - "2086383634": "您正在将您的 {{platform}} {{product}} 账户添加到 {{company}}下,该账户受英属维尔京群岛金融服务委员会的监管(牌照号SIBA/L/18/1114)。", + "2086383634": "通过由 British Virgin Islands Financial Services Commission 监管的 {{company}} (许可证编号 SIBA/L/18/1114) 添加 {{platform}} {{product}} 账户。", "2086792088": "两个障碍必须是相对的或绝对的", "2088344208": "标准外汇、股票指数、大宗商品、加密货币、股票、交易所买卖基金、综合指数、篮子指数和 derived 外汇", "2088735355": "时间段和登录限制", @@ -2811,7 +2812,6 @@ "-541392118": "账户尚未通过验证。请提交<0>身份证明和<1>地址证明以验证账户并访问收银台。", "-599998434": "由于文件仍在审核中,不能转账。一旦审核通过,将在 3 天内通过电子邮件通知您。", "-247122507": "收银台已被锁。请完成<0>财务评估以解锁。", - "-1443721737": "收银台已被锁。继续操作之前,请参阅<0>我们如何保护您的资金。", "-901712457": "由于您尚未设置 30 天交易限额,您已被暂时禁用收银台。请前往<0>自我禁止并设置 30 天交易限额。", "-166472881": "<0>个人详细信息不完整。请前往账户设置并填写个人详细信息,以启用存款和取款。", "-666905139": "存款功能已被锁定", @@ -2828,7 +2828,6 @@ "-1675848843": "错误", "-283017497": "重试", "-1294455996": "Deriv P2P 不可用", - "-1838982691": "未知", "-532693866": "出错了。请刷新页面并重试。", "-1196049878": "家庭地址第一行", "-1326406485": "邮编", @@ -2837,9 +2836,9 @@ "-1459042184": "更新个人详细资料", "-1603543465": "因缺少一些信息,无法验证个人资料。", "-614516651": "需要帮助?<0>联系我们。", - "-203002433": "立刻存款", "-720315013": "{{currency}} 账户没有资金", "-2052373215": "请先存款以使用此功能。", + "-203002433": "立刻存款", "-379487596": "可用余额{{format_amount}}{{currency__display_code}} 的{{selected_percentage}}%", "-1957498244": "更多", "-1059419768": "备注", @@ -3401,7 +3400,6 @@ "-705744796": "演示账户余额已达到最大限额,将无法进行新交易。重置余额以继续用演示账户交易。", "-2063700253": "已禁用", "-1585069798": "请单击以下链接以完成合适性测试。", - "-1287141934": "查找更多信息", "-367759751": "账户尚未通过验证", "-596690079": "享受使用 Deriv 的乐趣?", "-265932467": "我们很想听听您的意见", @@ -3815,6 +3813,13 @@ "-99964540": "当盈利达到或超过此设置金额时,交易将自动平仓。", "-542594338": "最大赔付", "-1622900200": "已启用", + "-1769815370": "障碍将固定在设定的价格上。", + "-2062696378": "Above spot:", + "-650959802": "障碍将相对于当前现货移动,保持设定的距离在其上方。", + "-445997898": "障碍将相对于当前现货移动,保持设定的距离在其下方。", + "-1116872874": "固定价格:", + "-635746838": "Low 现货价格", + "-548979988": "固定价格", "-2131851017": "增长率", "-339236213": "Multiplier", "-1396928673": "风险管理", diff --git a/packages/translations/src/translations/zh_tw.json b/packages/translations/src/translations/zh_tw.json index b07742954ea1..d70ca097cb59 100644 --- a/packages/translations/src/translations/zh_tw.json +++ b/packages/translations/src/translations/zh_tw.json @@ -153,6 +153,7 @@ "157871994": "連結已過期", "158355408": "某些服務可能暫時無法使用。", "160746023": "泰達作為 Omni 代幣(USDT)是託管在比特幣區塊鏈 Omni 層的泰達幣版本。", + "160760697": "I confirm and accept {{company}} 's <0>terms and conditions", "160863687": "未偵測到相機", "164112826": "此區塊允許您從URL載入您在遠程伺服器儲存的區塊(如有)。只有當 Bot操作時才能載入。", "164564432": "由於系統維護,暫時無法存款。一旦維護完成,即可存款。", @@ -187,7 +188,6 @@ "195136585": "交易檢視圖", "195972178": "取得字元", "196810983": "如果持續時間超過 24 小時,截止時間和到期日期將啟用。", - "196998347": "我們把客戶資金存在獨立的銀行帳戶,與操作帳戶分開,因此如果公司破產,客戶資金不會成為公司資產的一部分。這符合<0>博彩委員會關於客戶資金獨立分離帳戶管理的要求,即為:<1>中等級別保護。", "197190401": "到期日", "201016731": "<0>檢視詳細資訊", "201091938": "30天", @@ -304,6 +304,7 @@ "312300092": "指定字串或文字範圍內修剪空間。", "313741895": "如上一個燭形線是黑色,此區塊將返回「真」。它能放在畫布上任何位置,除了交易參數根塊的範圍內。", "315306603": "帳戶還未指定貨幣種。請選擇此帳戶的交易幣種。", + "315516003": "與目前現貨的距離", "316694303": "燭線是黑色的?", "318705408": "示範 Zero Spread", "318865860": "收盤", @@ -344,6 +345,7 @@ "351744408": "測試指定的文字字串是否為空", "353731490": "完成工作", "354945172": "提交文件", + "355647475": "目前現貨價格", "357477280": "未找到人臉", "357672069": "收入驗證失敗", "359053005": "請輸入權杖名稱。", @@ -546,7 +548,6 @@ "567163880": "建立 {{platform}} 密碼", "567755787": "稅務識別號碼為必填項。", "569057236": "文件在哪個國家簽發?", - "571921777": "資金保護級別", "572576218": "語言", "573173477": "燭線 {{ input_candle }} 是否呈黑色'?", "575668969": "3. 交易獲利後,下一筆交易的投注額將增加 2 美元。 Deriv Bot 將繼續為每筆獲利的交易增加 2 美元。 參見 A1。", @@ -956,10 +957,9 @@ "970915884": "一個", "974888153": "High-Low", "975608902": "要交易差價合約,請首先獲得 Deriv 應用程式帳戶。", - "975668699": "我確認並接受 {{company}} 的<0>條款和條件", "975747761": "正在進行", "975950139": "居住國", - "977647549": "注意:您可以將此密碼用於所有 {{platform}} 帳戶。", + "977647549": "注意:可在所有 {{platform}} 帳戶使用此密碼.", "977929335": "前往帳戶設定", "979713491": "Zero Spread BVI", "980050614": "立即更新", @@ -1431,6 +1431,7 @@ "1405584799": "間隔: {{ candle_interval_type }}", "1407191858": "DTrader", "1408844944": "點選加號圖示以擴展此區塊功能。", + "1410016796": "Low 現貨價格:", "1411373212": "強密碼須至少8個字元,包含大小寫字母、數字和符號。", "1411419173": "增長率: {{ accumulator }}", "1412405902": "查看重要提示", @@ -1754,6 +1755,7 @@ "1736292549": "郵遞區號更新", "1737352280": "未調用 Bot.init", "1738094481": "<0>持續時間:Ticks 1", + "1738206798": "高於現貨", "1738611950": "關於 Reverse Martingale", "1738681493": "必要時摘下眼鏡", "1739086943": "華爾街 30", @@ -1897,7 +1899,6 @@ "1866811212": "通過所在國家/地區的授權獨立付款代理以當地的貨幣存款。", "1867217564": "指標必須是正整數", "1867783237": "High-to-Close", - "1869315006": "了解我們如何保護您的資金以解鎖收銀台。", "1869486036": "如果現貨價格在合約期間從未觸及或突破<0>障礙,則將在<0>到期時獲得<0>賠付。 否則,合約將提前終止。", "1869787212": "Even", "1870933427": "加密", @@ -2132,7 +2133,7 @@ "2085387371": "必須是數字、字母和特殊字元 . , ' -", "2085602195": "- 入市數值:合約第一個跳動點的數值", "2086048243": "公司註冊證書", - "2086383634": "您正在向英屬維爾京群島金融服務委員會監管的 {{company}}下新增您的 {{platform}} {{product}} 帳戶(牌照號碼。西巴 /公里/18/1114)。", + "2086383634": "透過由 British Virgin Islands Financial Services Commission 監管的 {{company}} (執照編號 SIBA/L/18/1114) 新增 {{platform}}{{product}} 帳戶。", "2086792088": "兩個障礙必須是相對的或絕對的", "2088344208": "標準外匯、股票指數、大宗商品、加密貨幣、股票、指數股票型基金、綜合指數、basket 指數和 derived 外匯", "2088735355": "時間段和登入限制", @@ -2811,7 +2812,6 @@ "-541392118": "帳戶尚未通過驗證。請提交 <0>身份證明和<1>地址證明以驗證帳戶並存取收銀台。", "-599998434": "無法轉帳,因為文件仍在審查中。核准驗證後,將在 3 天內通過電子郵件通知您。", "-247122507": "收銀台已被鎖。請完成<0>財務評估以解鎖。", - "-1443721737": "收銀台已被鎖。繼續操作之前,請參閱<0>我們如何保護您的資金。", "-901712457": "由於尚未設定 30 天交易限額,您已被暫時禁用收銀台。請前往 <0>自我禁止 並設定 30 天交易限額。", "-166472881": "<0>個人詳細資料 不完整。請前往帳戶設定並填寫個人詳細資料,以啟用存款和取款。", "-666905139": "存款功能已被鎖定", @@ -2828,7 +2828,6 @@ "-1675848843": "錯誤", "-283017497": "重試", "-1294455996": "無法使用 Deriv P2P", - "-1838982691": "未知", "-532693866": "出了問題。請重新整理頁面,然後再試一次。", "-1196049878": "家庭地址第一行", "-1326406485": "郵遞區號", @@ -2837,9 +2836,9 @@ "-1459042184": "更新個人詳細資料", "-1603543465": "因缺少一些資訊,無法驗證個人資料。", "-614516651": "需要幫助?<0>聯繫我們。", - "-203002433": "立刻存款", "-720315013": "{{currency}} 帳戶沒有資金", "-2052373215": "請先存款以使用此功能。", + "-203002433": "立刻存款", "-379487596": "可用餘額({{format_amount}} {{currency__display_code}}) 的{{selected_percentage}}%", "-1957498244": "更多", "-1059419768": "備註", @@ -3401,7 +3400,6 @@ "-705744796": "示範帳戶餘額已達到最大限額,將無法進行新交易。重設餘額以繼續用示範帳戶交易。", "-2063700253": "已禁用", "-1585069798": "請點選以下連結以完成合適性測試。", - "-1287141934": "尋找更多訊息", "-367759751": "帳戶尚未通過驗證", "-596690079": "享受使用 Deriv 的樂趣?", "-265932467": "我們很想聽聽你的意見", @@ -3815,6 +3813,13 @@ "-99964540": "當盈利達到或超過此設定金額時,交易將自動平倉。", "-542594338": "最大賠付", "-1622900200": "已啟用", + "-1769815370": "障礙將固定在設置的價格上。", + "-2062696378": "高於現貨:", + "-650959802": "障礙將根據目前現貨移動,保持固定距離在其上方。", + "-445997898": "障礙將根據目前現貨移動,保持固定距離在其下方。", + "-1116872874": "固定價格:", + "-635746838": "低於現貨", + "-548979988": "固定價格", "-2131851017": "增長率", "-339236213": "Multiplier", "-1396928673": "風險管理", From 566784989739cf08f29bf33a217398fe0b967390 Mon Sep 17 00:00:00 2001 From: Shafin Al Karim <129021108+shafin-deriv@users.noreply.github.com> Date: Thu, 8 Aug 2024 11:25:17 +0800 Subject: [PATCH 05/72] fix: subscribe to api message after account switch (#16387) * fix: subscribe to api message after account switch * fix: test case --- .../src/app/__tests__/app-content.spec.tsx | 6 +-- packages/bot-web-ui/src/app/app-content.jsx | 41 +++++++++++-------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/packages/bot-web-ui/src/app/__tests__/app-content.spec.tsx b/packages/bot-web-ui/src/app/__tests__/app-content.spec.tsx index de755b1d9e52..4cbb48f656e4 100644 --- a/packages/bot-web-ui/src/app/__tests__/app-content.spec.tsx +++ b/packages/bot-web-ui/src/app/__tests__/app-content.spec.tsx @@ -83,10 +83,10 @@ describe('AppContent', () => { }); beforeAll(() => { - mock_DBot_store = mockDBotStore(mock_store, mock_ws); + mock_DBot_store = mockDBotStore(mock_store, mock_ws as any); wrapper = ({ children }: { children: JSX.Element }) => ( - + {children} @@ -137,7 +137,7 @@ describe('AppContent', () => { }); it('should unsubscribe message handler on component unmount', async () => { - mock_store.client.is_logged_in = false; + mock_store.client.is_logged_in = true; mock_DBot_store?.transactions?.recovered_transactions.push(11); if (mock_DBot_store) diff --git a/packages/bot-web-ui/src/app/app-content.jsx b/packages/bot-web-ui/src/app/app-content.jsx index 62aa01b485dc..dca3d7799550 100644 --- a/packages/bot-web-ui/src/app/app-content.jsx +++ b/packages/bot-web-ui/src/app/app-content.jsx @@ -34,43 +34,50 @@ const AppContent = observer(() => { const init_api_interval = React.useRef(null); const msg_listener = React.useRef(null); - const handleMessage = ({ data }) => { - if (data?.msg_type === 'proposal_open_contract' && !data?.error) { - const { proposal_open_contract } = data; - if ( - proposal_open_contract?.status !== 'open' && - !recovered_transactions?.includes(proposal_open_contract?.contract_id) - ) { - recoverPendingContracts(proposal_open_contract); + const handleMessage = React.useCallback( + ({ data }) => { + if (data?.msg_type === 'proposal_open_contract' && !data?.error) { + const { proposal_open_contract } = data; + if ( + proposal_open_contract?.status !== 'open' && + !recovered_transactions?.includes(proposal_open_contract?.contract_id) + ) { + recoverPendingContracts(proposal_open_contract); + } } - } - }; + }, + [recovered_transactions, recoverPendingContracts] + ); - function checkIfApiInitialized() { + const checkIfApiInitialized = React.useCallback(() => { init_api_interval.current = setInterval(() => { if (api_base?.api) { clearInterval(init_api_interval.current); + // Listen for proposal open contract messages to check // if there is any active contract from bot still running if (api_base?.api && !is_subscribed_to_msg_listener.current) { is_subscribed_to_msg_listener.current = true; - msg_listener.current = api_base.api?.onMessage()?.subscribe(handleMessage); + msg_listener.current = api_base.api.onMessage()?.subscribe(handleMessage); } } }, 500); - } + }, [handleMessage]); React.useEffect(() => { - // Check until api is initialized and then subscribe to the proposal open conrtact - checkIfApiInitialized(); + // Check until api is initialized and then subscribe to the api messages + // Also we should only subscribe to the messages once user is logged in + // And is not already subscribed to the messages + if (!is_subscribed_to_msg_listener.current && client.is_logged_in) { + checkIfApiInitialized(); + } return () => { if (is_subscribed_to_msg_listener.current && msg_listener.current) { is_subscribed_to_msg_listener.current = false; msg_listener.current.unsubscribe(); } }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, [checkIfApiInitialized, client.is_logged_in, client.loginid]); React.useEffect(() => { showDigitalOptionsMaltainvestError(client, common); From 6ee4bd14cf97685d79d9c8756093ff8af19d276c Mon Sep 17 00:00:00 2001 From: Shayan Khaleghparast <100833613+shayan-deriv@users.noreply.github.com> Date: Thu, 8 Aug 2024 12:06:49 +0800 Subject: [PATCH 06/72] chore: shayan ignore environment file to ensure keys are not committed (#16382) --- .gitignore | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 0bc41f0b25af..fd58296a6a40 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,8 @@ packages/appstore/lib/ packages/appstore/.out packages/wallets/src/translations/messages.json .env -nx-cloud.env +.env.* +*.env test-results/ playwright-report/ playwright/.cache/ @@ -32,4 +33,4 @@ playwright/.cache/ packages/*/stats.json packages/*/report.json packages/*/analyzed.html -packages/*/treemap.html \ No newline at end of file +packages/*/treemap.html From c398cc04207081da182de5c0d0b684c430e48f7a Mon Sep 17 00:00:00 2001 From: Sui Sin <103026762+suisin-deriv@users.noreply.github.com> Date: Thu, 8 Aug 2024 13:56:28 +0800 Subject: [PATCH 07/72] Suisin/update workflow for build docker image (#16402) * chore: edit workflows on build docker image * chore: edit workflows on build docker image (#16397) * chore: add github.ref_name * Suisin/update workflow for build docker image (#16399) * chore: edit workflows on build docker image * chore: add github.ref_name * chore: run workflow with test environment * chore: run workflow after Staging Workflow is completed --- .github/workflows/build_docker_image.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_docker_image.yml b/.github/workflows/build_docker_image.yml index 224db6c1edf0..8803d0db34b5 100644 --- a/.github/workflows/build_docker_image.yml +++ b/.github/workflows/build_docker_image.yml @@ -1,5 +1,8 @@ name: Build Docker image and push to dockerhub on: + workflow_run: + workflows: ["Deriv App Release to Test environment Workflow", "Deriv App Staging Workflow"] + types: [completed] workflow_dispatch: inputs: docker_image_tag_name: @@ -11,7 +14,7 @@ jobs: name: Push Docker image to Docker Hub runs-on: ubuntu-latest env: - tag_name: ${{ github.event.inputs.docker_image_tag_name }} + tag_name: ${{ github.event.inputs.docker_image_tag_name || github.ref_name }} permissions: packages: write contents: read From 70d147abf9f7aa3ba03632dc726479f3012cb828 Mon Sep 17 00:00:00 2001 From: DerivFE <80095553+DerivFE@users.noreply.github.com> Date: Thu, 8 Aug 2024 10:08:48 +0400 Subject: [PATCH 08/72] chore: update @deriv/deriv-charts to 2.3.0 (#16401) Co-authored-by: balakrishna-deriv --- package-lock.json | 8 ++++---- packages/bot-web-ui/package.json | 2 +- packages/core/package.json | 2 +- packages/trader/package.json | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 50d7afd5f6b3..52e7b377caa1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@deriv-com/utils": "^0.0.25", "@deriv/api-types": "1.0.172", "@deriv/deriv-api": "^1.0.15", - "@deriv/deriv-charts": "^2.2.0", + "@deriv/deriv-charts": "^2.3.0", "@deriv/js-interpreter": "^3.0.0", "@deriv/quill-design": "^1.3.2", "@deriv/quill-icons": "1.23.3", @@ -3180,9 +3180,9 @@ } }, "node_modules/@deriv/deriv-charts": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@deriv/deriv-charts/-/deriv-charts-2.2.0.tgz", - "integrity": "sha512-q60cKdWrSHXeSbpY3WohMkmYn+mK4jlJJS+/ytmtOxPAUOdpIkplku8Jvq6+4kGuVAND1SqvwUJpMkK+767MQg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@deriv/deriv-charts/-/deriv-charts-2.3.0.tgz", + "integrity": "sha512-+PRhXVeCgJmo+3feuyA68vhSZkJaj7u3saQlX4pFiwzDcDLPuAYBWQQA7jrYeoxH/BeKhpN+5qkJGxSRMQVfGA==", "dependencies": { "@types/lodash.set": "^4.3.7", "@welldone-software/why-did-you-render": "^3.3.8", diff --git a/packages/bot-web-ui/package.json b/packages/bot-web-ui/package.json index cf001c18b81a..c59394543f95 100644 --- a/packages/bot-web-ui/package.json +++ b/packages/bot-web-ui/package.json @@ -77,7 +77,7 @@ "@deriv/bot-skeleton": "^1.0.0", "@deriv/components": "^1.0.0", "@deriv/hooks": "^1.0.0", - "@deriv/deriv-charts": "^2.2.0", + "@deriv/deriv-charts": "^2.3.0", "@deriv/shared": "^1.0.0", "@deriv/stores": "^1.0.0", "@deriv/translations": "^1.0.0", diff --git a/packages/core/package.json b/packages/core/package.json index ff9ba05db6df..163a027618e8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -111,7 +111,7 @@ "@deriv/cfd": "^1.0.0", "@deriv/components": "^1.0.0", "@deriv/deriv-api": "^1.0.15", - "@deriv/deriv-charts": "^2.2.0", + "@deriv/deriv-charts": "^2.3.0", "@deriv/hooks": "^1.0.0", "@deriv/p2p": "^0.7.3", "@deriv/quill-design": "^1.3.2", diff --git a/packages/trader/package.json b/packages/trader/package.json index 024e45e3adb8..2633616fbde6 100644 --- a/packages/trader/package.json +++ b/packages/trader/package.json @@ -96,7 +96,7 @@ "@deriv/api-types": "1.0.172", "@deriv/components": "^1.0.0", "@deriv/deriv-api": "^1.0.15", - "@deriv/deriv-charts": "^2.2.0", + "@deriv/deriv-charts": "^2.3.0", "@deriv/hooks": "^1.0.0", "@deriv/shared": "^1.0.0", "@deriv/stores": "^1.0.0", From 1cb150cda0499eaac483ef3524f805c583d302f0 Mon Sep 17 00:00:00 2001 From: Maryia <103177211+maryia-deriv@users.noreply.github.com> Date: Thu, 8 Aug 2024 09:09:04 +0300 Subject: [PATCH 09/72] feat: disable vertical scroll on the chart outside y-axis (#16330) --- packages/trader/src/AppV2/Containers/Chart/trade-chart.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/trader/src/AppV2/Containers/Chart/trade-chart.tsx b/packages/trader/src/AppV2/Containers/Chart/trade-chart.tsx index da5fbd961532..c26e30576eb1 100644 --- a/packages/trader/src/AppV2/Containers/Chart/trade-chart.tsx +++ b/packages/trader/src/AppV2/Containers/Chart/trade-chart.tsx @@ -148,6 +148,7 @@ const TradeChart = observer(() => { enabledChartFooter={false} id='trade' isMobile={isMobile} + isVerticalScrollEnabled={false} maxTick={isMobile ? max_ticks : undefined} granularity={show_digits_stats || is_accumulator ? 0 : granularity} requestAPI={wsSendRequest} From 1cb4ca2add1cb249a289ee4c6734a17e4557e06f Mon Sep 17 00:00:00 2001 From: utkarsha-deriv <125863995+utkarsha-deriv@users.noreply.github.com> Date: Thu, 8 Aug 2024 10:33:59 +0400 Subject: [PATCH 10/72] User is unable to exit from the flow when trying to access the verification link for change email flow from another logged out device (#16033) * fix: fix redirectURL code fix * chore: 2 more solution on how to restore code value and remove it from url * chore: remove code from local storage * chore: move the setSession code for request_email from client store to switch case * fix: remove client-store changes * fix: remove comments * fix: comments * chore: remove client-store changes in useSetLogin * fix: normal flow modal pop up * fix: add else case --- .../core/src/App/Containers/Redirect/redirect.jsx | 15 ++++++++++++++- packages/core/src/Services/logout.js | 3 +++ packages/core/src/Stores/client-store.js | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/core/src/App/Containers/Redirect/redirect.jsx b/packages/core/src/App/Containers/Redirect/redirect.jsx index 9223ec2b2e97..aa9f126a439e 100644 --- a/packages/core/src/App/Containers/Redirect/redirect.jsx +++ b/packages/core/src/App/Containers/Redirect/redirect.jsx @@ -64,7 +64,20 @@ const Redirect = observer(() => { break; } case 'request_email': { - toggleResetEmailModal(true); + if (!is_logging_in && !is_logged_in) { + if (verification_code[action_param]) { + sessionStorage.setItem('request_email_code', verification_code[action_param]); + } + redirectToLogin(is_logged_in, getLanguage(), true); + redirected_to_route = true; + } else { + if (!verification_code[action_param]) { + const request_email_code = sessionStorage.getItem('request_email_code'); + setVerificationCode(request_email_code, action_param); + sessionStorage.removeItem('request_email_code'); + } + toggleResetEmailModal(true); + } break; } case 'social_email_change': { diff --git a/packages/core/src/Services/logout.js b/packages/core/src/Services/logout.js index 608f470fd075..7c1ccf0b918a 100644 --- a/packages/core/src/Services/logout.js +++ b/packages/core/src/Services/logout.js @@ -14,6 +14,9 @@ const doLogout = response => { localStorage.removeItem('closed_toast_notifications'); localStorage.removeItem('is_wallet_migration_modal_closed'); localStorage.removeItem('active_wallet_loginid'); + localStorage.removeItem('verification_code.system_email_change'); + localStorage.removeItem('verification_code.request_email'); + localStorage.removeItem('new_email.system_email_change'); SocketCache.clear(); sessionStorage.clear(); endChat(); diff --git a/packages/core/src/Stores/client-store.js b/packages/core/src/Stores/client-store.js index da2aa5b7d47f..fb61c3210b9f 100644 --- a/packages/core/src/Stores/client-store.js +++ b/packages/core/src/Stores/client-store.js @@ -1517,7 +1517,7 @@ export default class ClientStore extends BaseStore { this.user_id = LocalStore.get('active_user_id'); this.setAccounts(LocalStore.getObject(storage_key)); this.setSwitched(''); - if (action_param === 'request_email') { + if (action_param === 'request_email' && this.is_logged_in) { const request_email_code = code_param ?? LocalStore.get(`verification_code.${action_param}`) ?? ''; if (request_email_code) { this.setVerificationCode(request_email_code, action_param); From b9b7efa5b61deab431685d606c5dd07633eaa33d Mon Sep 17 00:00:00 2001 From: Sui Sin <103026762+suisin-deriv@users.noreply.github.com> Date: Thu, 8 Aug 2024 17:12:11 +0800 Subject: [PATCH 11/72] Suisin/update workflow for build docker image (#16409) * chore: edit workflows on build docker image * chore: edit workflows on build docker image (#16397) * chore: add github.ref_name * Suisin/update workflow for build docker image (#16399) * chore: edit workflows on build docker image * chore: add github.ref_name * chore: run workflow with test environment * chore: run workflow after Staging Workflow is completed * chore: remove Test workflow and make branch to lowercase --- .github/workflows/build_docker_image.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_docker_image.yml b/.github/workflows/build_docker_image.yml index 8803d0db34b5..059951c4791a 100644 --- a/.github/workflows/build_docker_image.yml +++ b/.github/workflows/build_docker_image.yml @@ -1,7 +1,7 @@ name: Build Docker image and push to dockerhub on: workflow_run: - workflows: ["Deriv App Release to Test environment Workflow", "Deriv App Staging Workflow"] + workflows: ["Deriv App Staging Workflow"] types: [completed] workflow_dispatch: inputs: @@ -14,7 +14,7 @@ jobs: name: Push Docker image to Docker Hub runs-on: ubuntu-latest env: - tag_name: ${{ github.event.inputs.docker_image_tag_name || github.ref_name }} + tag_name: ${{ github.event.inputs.docker_image_tag_name || github.ref_name.lowercase }} permissions: packages: write contents: read From cd6418c4e82f2cb2ccf7fdc3e57d1c0d47390070 Mon Sep 17 00:00:00 2001 From: fasihali-deriv <121229483+fasihali-deriv@users.noreply.github.com> Date: Thu, 8 Aug 2024 17:24:05 +0800 Subject: [PATCH 12/72] Fasih/COJ-1146/ Updated modal content and design (#16267) * chore: updated modal content and design * chore: removed unused code * chore: fixed multiple markets name issue * chore: fixed test * chore: fixed popup closing issue and textual issue * chore: updated test according to text * chore: fixed mobile botton issue --- .../components/cfds-listing/cfds-listing.scss | 11 +- .../open-positions-svg-modal.spec.tsx | 4 +- .../open-positions-svg-modal.tsx | 2 +- .../migration-success-modal-content.spec.tsx | 40 ++---- .../migration-success-modal-content.tsx | 121 ++++++++++-------- .../migration-success-modal.tsx | 32 ++--- 6 files changed, 101 insertions(+), 109 deletions(-) diff --git a/packages/appstore/src/components/cfds-listing/cfds-listing.scss b/packages/appstore/src/components/cfds-listing/cfds-listing.scss index 74adf423407e..2303a530cab3 100644 --- a/packages/appstore/src/components/cfds-listing/cfds-listing.scss +++ b/packages/appstore/src/components/cfds-listing/cfds-listing.scss @@ -1530,9 +1530,11 @@ padding: 0.8rem 2rem 2.4rem; } &__body { - padding: 8.9rem 2.4rem; - &-has-open-positions { - padding: 6rem 2.4rem; + padding: 5.2rem 2.4rem; + &-bullets--list { + list-style: disc; + margin-top: 1rem; + margin-inline-start: 2rem; } } &__title { @@ -1573,6 +1575,9 @@ width: 100%; } } + @include mobile-screen { + bottom: 4rem; + } } } diff --git a/packages/appstore/src/components/modals/open-positions-svg-modal/__test__/open-positions-svg-modal.spec.tsx b/packages/appstore/src/components/modals/open-positions-svg-modal/__test__/open-positions-svg-modal.spec.tsx index cb0e7dabd52f..531a0898c2ba 100644 --- a/packages/appstore/src/components/modals/open-positions-svg-modal/__test__/open-positions-svg-modal.spec.tsx +++ b/packages/appstore/src/components/modals/open-positions-svg-modal/__test__/open-positions-svg-modal.spec.tsx @@ -153,7 +153,7 @@ describe('', () => { }; renderComponent({ props: new_mock_props }); const modal_content = screen.getByText( - /Your MT5 Standard SVG account will be archived after 30 days of inactivity. You can still access your trade history until the account is archived./ + /Your MT5 Standard SVG account will be archived after 60 days of inactivity. You can still access your trade history until the account is archived./ ); expect(modal_content).toBeInTheDocument(); }); @@ -166,7 +166,7 @@ describe('', () => { }; renderComponent({ props: new_mock_props }); const modal_content = screen.getByText( - /Your MT5 Financial SVG account will be archived after 30 days of inactivity. You can still access your trade history until the account is archived./ + /Your MT5 Financial SVG account will be archived after 60 days of inactivity. You can still access your trade history until the account is archived./ ); expect(modal_content).toBeInTheDocument(); }); diff --git a/packages/appstore/src/components/modals/open-positions-svg-modal/open-positions-svg-modal.tsx b/packages/appstore/src/components/modals/open-positions-svg-modal/open-positions-svg-modal.tsx index e3affcb41094..da60a9fe4877 100644 --- a/packages/appstore/src/components/modals/open-positions-svg-modal/open-positions-svg-modal.tsx +++ b/packages/appstore/src/components/modals/open-positions-svg-modal/open-positions-svg-modal.tsx @@ -58,7 +58,7 @@ const OpenPositionsSVGModal = ({ market_type, status, is_modal_open, setModalOpe /> ) : ( ( ); describe('', () => { const props: React.ComponentProps = { - has_open_positions: false, icon: 'icon', eligible_account_to_migrate: 'BVI', - directToCashier: jest.fn(), + closePopupModal: jest.fn(), + jurisdiction_market_name: ['Financial'], }; it('component should be rendered', () => { render(, { wrapper }); expect( screen.getByRole('heading', { - name: /success!/i, + name: /Upgrade complete/i, }) ).toBeInTheDocument(); - expect(screen.getByText(/your new account\(s\) are ready for trading\./i)).toBeInTheDocument(); - expect( - screen.getByText(/for new trades, please transfer your funds into the new account\(s\)\./i) - ).toBeInTheDocument(); - }); + const account_text = screen.getByText(/Start trading with your new/i); + const strong_text = within(account_text).getByText(/MT5 Financial BVI/i); - it('should not render open position banner if has_open_positions is false', () => { - render(, { wrapper }); + expect(account_text).toBeInTheDocument(); + expect(strong_text.tagName).toBe('STRONG'); - expect( - screen.queryByText(/you can continue with the open positions on your current account\(s\)\./i) - ).not.toBeInTheDocument(); - - const button = screen.getByRole('button', { - name: /transfer now/i, - }); - - userEvent.click(button); - expect(props.directToCashier).toHaveBeenCalled(); - }); - - it('should render open position banner if has_open_positions is true', () => { - render(, { wrapper }); + expect(screen.getByText(/Important: Your account./i)).toBeInTheDocument(); expect( - screen.getByText(/you can continue with the open positions on your current account\(s\)\./i) + screen.getByText(/You can manage your existing positions, but you can't start a new trade./i) ).toBeInTheDocument(); + expect(screen.getByText(/We'll close accounts with no open positions after 60 days./i)).toBeInTheDocument(); + const button = screen.getByRole('button', { name: /ok/i, }); userEvent.click(button); - expect(props.directToCashier).toHaveBeenCalled(); + expect(props.closePopupModal).toHaveBeenCalled(); }); }); diff --git a/packages/cfd/src/Components/migration-success-modal/migration-success-modal-content.tsx b/packages/cfd/src/Components/migration-success-modal/migration-success-modal-content.tsx index 907f4d95bf61..4ad6a06db47e 100644 --- a/packages/cfd/src/Components/migration-success-modal/migration-success-modal-content.tsx +++ b/packages/cfd/src/Components/migration-success-modal/migration-success-modal-content.tsx @@ -6,87 +6,104 @@ import { InlineMessage, Text, Button, Modal, Icon } from '@deriv/components'; import { Jurisdiction, CFD_PLATFORMS, getCFDPlatformNames, getFormattedJurisdictionCode } from '@deriv/shared'; type TMigrationSuccessModalContent = { - has_open_positions: boolean; icon?: string; eligible_account_to_migrate: string; - directToCashier: () => void; + closePopupModal: () => void; + jurisdiction_market_name: Array; }; const MigrationSuccessModalContent = observer( - ({ has_open_positions, icon, eligible_account_to_migrate, directToCashier }: TMigrationSuccessModalContent) => { + ({ + icon, + eligible_account_to_migrate, + jurisdiction_market_name, + closePopupModal, + }: TMigrationSuccessModalContent) => { const { ui } = useStore(); const { is_mobile } = ui; const platform = getCFDPlatformNames(CFD_PLATFORMS.MT5); const text_size = is_mobile ? 'xxs' : 'xs'; + const information_text_size = is_mobile ? 'xxxs' : 'xxs'; + const getFormattedAccounts = () => + jurisdiction_market_name.length > 1 + ? { + type_1: jurisdiction_market_name[0], + type_2: jurisdiction_market_name[1], + } + : { + type_1: jurisdiction_market_name[0], + }; return (
    - +
    {icon && }
    - +
    - ]} - /> - - - ]} - /> - -
    -
    - {has_open_positions && ( -
    - 1 ? ( ]} /> - } - /> + ) : ( + ]} + /> + )} + +
    + ]} + /> + } + message={ + +
  • + +
  • +
  • + +
  • +
    + } + /> +
    - )} +
    - diff --git a/packages/cfd/src/Components/migration-success-modal/migration-success-modal.tsx b/packages/cfd/src/Components/migration-success-modal/migration-success-modal.tsx index fec12904f013..0cbf41dd04e7 100644 --- a/packages/cfd/src/Components/migration-success-modal/migration-success-modal.tsx +++ b/packages/cfd/src/Components/migration-success-modal/migration-success-modal.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { useHistory } from 'react-router-dom'; import { Modal, PageOverlay } from '@deriv/components'; -import { Jurisdiction, MT5_ACCOUNT_STATUS, routes } from '@deriv/shared'; +import { Jurisdiction, getFormattedJurisdictionMarketTypes } from '@deriv/shared'; import { observer, useStore } from '@deriv/stores'; import { getFormattedJurisdictionCode } from '../../Stores/Modules/CFD/Helpers/cfd-config'; + import { useCfdStore } from '../../Stores/Modules/CFD/Helpers/useCfdStores'; import MigrationSuccessModalContent from './migration-success-modal-content'; @@ -13,9 +13,7 @@ type TMigrationSuccessModal = { }; const MigrationSuccessModal = observer(({ is_open, closeModal }: TMigrationSuccessModal) => { - const history = useHistory(); - const { ui, client } = useStore(); - const { mt5_login_list } = client; + const { ui } = useStore(); const { is_mobile, setMT5MigrationModalEnabled } = ui; const { migrated_mt5_accounts, setIsFromMt5MigrationModal } = useCfdStore(); @@ -23,24 +21,10 @@ const MigrationSuccessModal = observer(({ is_open, closeModal }: TMigrationSucce const eligible_account_to_migrate = getFormattedJurisdictionCode( migrated_mt5_accounts.map(account => Object.values(account?.to_account ?? {})?.[0])?.[0] ); - const has_open_positions = React.useMemo( - () => - mt5_login_list.some(account => - migrated_mt5_accounts.some( - migrated_acc => - migrated_acc.login_id === account.login && - account.status === MT5_ACCOUNT_STATUS.MIGRATED_WITH_POSITION - ) - ), - [mt5_login_list, migrated_mt5_accounts] - ); - const directToCashier = () => { - closeMigrationModals(); - if (!has_open_positions) { - history.push(routes.cashier_acc_transfer); - } - }; + const jurisdiction_market_name = migrated_mt5_accounts.map(account => + getFormattedJurisdictionMarketTypes(Object.keys(account?.to_account ?? {})?.[0]) + ); const closeMigrationModals = () => { setIsFromMt5MigrationModal(false); @@ -75,10 +59,10 @@ const MigrationSuccessModal = observer(({ is_open, closeModal }: TMigrationSucce const ModalContent = () => ( ); From a8ced74706d7cd4b808155016bb4026dc8be4d97 Mon Sep 17 00:00:00 2001 From: Sergei Baranovski <120570511+sergei-deriv@users.noreply.github.com> Date: Thu, 8 Aug 2024 12:29:19 +0300 Subject: [PATCH 13/72] feat: move webpack plugins to default plugins (#16367) --- packages/appstore/webpack.config.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/appstore/webpack.config.js b/packages/appstore/webpack.config.js index cfc55a8997e1..aeb44ebe458a 100644 --- a/packages/appstore/webpack.config.js +++ b/packages/appstore/webpack.config.js @@ -42,6 +42,10 @@ const svg_loaders = [ // const default_plugins = [new CleanWebpackPlugin(), new ForkTsCheckerWebpackPlugin()]; const default_plugins = [ // new BundleAnalyzerPlugin(), + new Dotenv(), + new DefinePlugin({ + 'process.env.TRUSTPILOT_API_KEY': JSON.stringify(process.env.TRUSTPILOT_API_KEY), + }), new IgnorePlugin({ resourceRegExp: /^\.\/locale$/, contextRegExp: /moment$/ }), new CircularDependencyPlugin({ exclude: /node_modules/, failOnError: true }), ]; @@ -87,12 +91,6 @@ module.exports = function (env) { }, extensions: ['.ts', '.tsx', '.js'], }, - plugins: [ - new Dotenv(), - new DefinePlugin({ - 'process.env.TRUSTPILOT_API_KEY': JSON.stringify(process.env.TRUSTPILOT_API_KEY), - }), - ], module: { rules: [ { From 3c6a7dddf235c08042650b80c7f4a4302d67cd47 Mon Sep 17 00:00:00 2001 From: Jim Daniels Wasswa <104334373+jim-deriv@users.noreply.github.com> Date: Thu, 8 Aug 2024 19:08:03 +0800 Subject: [PATCH 14/72] [WALL] Jim/WALL-4572/fix dropdown issues (#16335) * fix: fix dropdown issues * chore: update styles and change onblur to onfocus * chore: address review comments * chore: clear value onblur instead of onsearch --- .../components/FlowProvider/FlowProvider.tsx | 13 +++++- .../PersonalDetails/PersonalDetails.scss | 3 ++ .../PersonalDetails/PersonalDetails.tsx | 42 ++++++++++++++----- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/packages/wallets/src/components/FlowProvider/FlowProvider.tsx b/packages/wallets/src/components/FlowProvider/FlowProvider.tsx index 63403fda228e..bea2f91e9243 100644 --- a/packages/wallets/src/components/FlowProvider/FlowProvider.tsx +++ b/packages/wallets/src/components/FlowProvider/FlowProvider.tsx @@ -9,7 +9,7 @@ import React, { useMemo, useState, } from 'react'; -import { Formik, FormikErrors, FormikValues } from 'formik'; +import { Formik, FormikErrors, FormikTouched, FormikValues } from 'formik'; import * as Yup from 'yup'; export type TFlowProviderContext = { @@ -22,7 +22,12 @@ export type TFlowProviderContext = { value: unknown, shouldValidate?: boolean | undefined ) => Promise | void>; + setTouched: ( + touched: FormikTouched, + shouldValidate?: boolean + ) => Promise | void>; switchScreen: (screenId: keyof T) => void; + touched: FormikTouched; }; type FlowChildren = ReactElement | ReactFragment | ReactPortal; @@ -107,7 +112,7 @@ function FlowProvider({ validateOnMount validationSchema={validationSchema} > - {({ errors, setFieldValue, values }) => { + {({ errors, setFieldValue, setTouched, touched, values }) => { return ( ({ errors, formValues: values, setFormValues: setFieldValue, + setTouched, + touched, }} > {children({ @@ -122,6 +129,8 @@ function FlowProvider({ errors, formValues: values, setFormValues: setFieldValue, + setTouched, + touched, })} ); diff --git a/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.scss b/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.scss index bd65a730e3dc..9d23676ca162 100644 --- a/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.scss +++ b/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.scss @@ -40,6 +40,9 @@ &__dropdown { width: 100%; padding-bottom: 2rem; + label { + text-transform: none; + } } &__inline { diff --git a/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.tsx b/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.tsx index 62b9d01b7ed3..aaf1ff600d29 100644 --- a/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.tsx +++ b/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.tsx @@ -8,9 +8,8 @@ import './PersonalDetails.scss'; const PersonalDetails = () => { const { data: residenceList, isLoading, isSuccess: isResidenceListSuccess } = useResidenceList(); - const { formValues, setFormValues } = useFlow(); + const { formValues, setFormValues, setTouched, touched } = useFlow(); const { data: getSettings } = useSettings(); - const countryCodeToPatternMapper = useMemo(() => { const countryCodeToPatternMapping: Record = {}; @@ -24,7 +23,7 @@ const PersonalDetails = () => { return countryCodeToPatternMapping; }, [isResidenceListSuccess, residenceList]); - const tinValidator = useMemo(() => { + const tinValidator = () => { const patternStr = countryCodeToPatternMapper[formValues?.taxResidence]; try { if (patternStr) { @@ -40,7 +39,15 @@ const PersonalDetails = () => { } catch (err) { return (err as Yup.ValidationError).message; } - }, [countryCodeToPatternMapper, formValues?.taxIdentificationNumber, formValues?.taxResidence]); + }; + + const taxResidenceValidator = () => { + try { + Yup.string().nullable().required('Tax residence is required').validateSync(formValues?.taxResidence); + } catch (error) { + if (error instanceof Yup.ValidationError) return error.message; + } + }; useEffect(() => { if (getSettings && isResidenceListSuccess) { @@ -92,7 +99,6 @@ const PersonalDetails = () => { name='wallets-personal-details__dropdown-citizenship' onSelect={selectedItem => setFormValues('citizenship', selectedItem)} value={formValues?.citizenship ?? getSettings?.citizen} - variant='comboBox' />
    @@ -115,7 +121,9 @@ const PersonalDetails = () => {
    { }))} listHeight='sm' name='wallets-personal-details__dropdown-tax-residence' + onBlur={e => { + const matchFound = residenceList.find( + residence => + residence.text?.toLocaleLowerCase() === e.target.value.toLocaleLowerCase() + ); + if (!matchFound) { + setFormValues('taxResidence', ''); + } + }} + onFocus={() => { + setTouched({ ...touched, taxResidence: true }); + }} onSearch={inputValue => { - residenceList.forEach(residence => { + residenceList.some(residence => { if (residence.text?.toLowerCase() === inputValue.toLowerCase()) { setFormValues('taxResidence', residence.value); + return true; } }); }} @@ -136,14 +157,15 @@ const PersonalDetails = () => { setFormValues('taxResidence', selectedItem); }} value={formValues?.taxResidence ?? getSettings?.tax_residence} - variant='comboBox' />
    Date: Thu, 8 Aug 2024 16:41:52 +0530 Subject: [PATCH 15/72] Aswathy/CRO-677/ce_tradershub_dashboard_form unders feature flag (#16269) * feat: added the tracking growthbook feature flag for tradershub dashboard * fix: reset balance tracking * fix: client-store method * feat: tracking with feature flag enabled * fix: build failure issue * fix: review comments * fix: build failure retriggering * fix: peer comments review --- .../add-options-account.tsx | 21 +- .../appstore/src/components/app-content.tsx | 24 ++- .../src/components/cfds-listing/index.tsx | 185 +++++++++++------- .../compare-account/compare-account.tsx | 18 +- .../containers/trading-app-card.tsx | 21 +- .../real/real-account-card.tsx | 19 +- .../main-title-bar/account-type-dropdown.tsx | 18 +- .../options-multipliers-listing/index.tsx | 20 +- packages/core/src/Stores/client-store.js | 21 +- packages/stores/src/mockStore.ts | 2 + packages/stores/types.ts | 2 + 11 files changed, 233 insertions(+), 118 deletions(-) diff --git a/packages/appstore/src/components/add-options-account/add-options-account.tsx b/packages/appstore/src/components/add-options-account/add-options-account.tsx index 73aa7a4c8828..0e4769969ebf 100644 --- a/packages/appstore/src/components/add-options-account/add-options-account.tsx +++ b/packages/appstore/src/components/add-options-account/add-options-account.tsx @@ -2,6 +2,7 @@ import React from 'react'; import { DesktopWrapper, MobileWrapper, Button, Text } from '@deriv/components'; import { Localize, localize } from '@deriv/translations'; import './add-options-account.scss'; +import { useGrowthbookGetFeatureValue } from '@deriv/hooks'; import { useStore, observer } from '@deriv/stores'; import { isMobile, ContentFlag } from '@deriv/shared'; import { Analytics } from '@deriv-com/analytics'; @@ -17,6 +18,11 @@ const AddOptions = observer(() => { const eu_user = content_flag === ContentFlag.LOW_RISK_CR_EU || content_flag === ContentFlag.EU_REAL; + const [is_traders_dashboard_tracking_enabled] = useGrowthbookGetFeatureValue({ + featureFlag: 'ce_tradershub_dashboard_tracking', + defaultValue: false, + }); + return (
    @@ -30,12 +36,15 @@ const AddOptions = observer(() => { type='submit' has_effect onClick={() => { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_get', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: 'cfd_banner', - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_get', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: 'cfd_banner', + }); + } + if (is_real && eu_user) { if (real_account_creation_unlock_date) { setShouldShowCooldownModal(true); diff --git a/packages/appstore/src/components/app-content.tsx b/packages/appstore/src/components/app-content.tsx index 2b1acd225114..e74851a13216 100644 --- a/packages/appstore/src/components/app-content.tsx +++ b/packages/appstore/src/components/app-content.tsx @@ -1,5 +1,6 @@ import React, { useEffect } from 'react'; import { routes } from '@deriv/shared'; +import { useGrowthbookGetFeatureValue } from '@deriv/hooks'; import { observer, useStore } from '@deriv/stores'; import { Analytics } from '@deriv-com/analytics'; import Routes from 'Components/routes/routes'; @@ -8,17 +9,28 @@ import './app.scss'; import './temporary-overrides.scss'; const AppContent: React.FC = observer(() => { - const { ui, traders_hub } = useStore(); + const { ui, traders_hub, client } = useStore(); const { is_dark_mode_on } = ui; const { selected_account_type } = traders_hub; + const [is_traders_dashboard_tracking_enabled] = useGrowthbookGetFeatureValue({ + featureFlag: 'ce_tradershub_dashboard_tracking', + defaultValue: false, + }); + + useEffect(() => { + client.setTradersHubTracking(is_traders_dashboard_tracking_enabled); + }, [is_traders_dashboard_tracking_enabled]); + useEffect(() => { if (selected_account_type) { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'open', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'open', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + }); + } } }, [selected_account_type]); diff --git a/packages/appstore/src/components/cfds-listing/index.tsx b/packages/appstore/src/components/cfds-listing/index.tsx index a18ae85135c2..4cf6b62f0703 100644 --- a/packages/appstore/src/components/cfds-listing/index.tsx +++ b/packages/appstore/src/components/cfds-listing/index.tsx @@ -20,7 +20,7 @@ import PlatformLoader from 'Components/pre-loader/platform-loader'; import CompareAccount from 'Components/compare-account'; import CFDsDescription from 'Components/elements/cfds-description'; import { getHasDivider } from 'Constants/utils'; -import { useMT5SVGEligibleToMigrate } from '@deriv/hooks'; +import { useMT5SVGEligibleToMigrate, useGrowthbookGetFeatureValue } from '@deriv/hooks'; import './cfds-listing.scss'; const MigrationBanner = makeLazyLoader( @@ -88,6 +88,11 @@ const CFDsListing = observer(() => { is_idv_revoked, } = getAuthenticationStatusInfo(account_status); + const [is_traders_dashboard_tracking_enabled] = useGrowthbookGetFeatureValue({ + featureFlag: 'ce_tradershub_dashboard_tracking', + defaultValue: false, + }); + const { has_svg_accounts_to_migrate } = useMT5SVGEligibleToMigrate(); const getAuthStatus = (status_list: boolean[]) => status_list.some(status => status); @@ -236,12 +241,15 @@ const CFDsListing = observer(() => { has_divider={(!is_eu_user || is_demo) && getHasDivider(index, list_size, 3)} onAction={(e?: React.MouseEvent) => { if (existing_account.action_type === 'get') { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_get', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_subtitle, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_get', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_subtitle, + }); + } + if (real_account_creation_unlock_date && no_real_mf_account_eu_regulator) { setShouldShowCooldownModal(true); } else if (no_real_cr_non_eu_regulator || no_real_mf_account_eu_regulator) { @@ -259,30 +267,39 @@ const CFDsListing = observer(() => { const button_name = e?.currentTarget?.name; setProduct(existing_account.product); if (button_name === 'transfer-btn') { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_transfer', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_subtitle, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_transfer', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_subtitle, + }); + } + toggleAccountTransferModal(); setSelectedAccount(existing_account); } else if (button_name === 'topup-btn') { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_topup', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_subtitle, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_topup', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_subtitle, + }); + } + showTopUpModal(existing_account); setAppstorePlatform(existing_account.platform); } else { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_open', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_subtitle, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_open', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_subtitle, + }); + } + if (has_mt5_account_status === MT5_ACCOUNT_STATUS.FAILED && is_eu_user) { setIsMT5VerificationFailedModal(true); openFailedVerificationModal(existing_account); @@ -342,29 +359,38 @@ const CFDsListing = observer(() => { const button_name = e?.currentTarget?.name; setProduct(); if (button_name === 'transfer-btn') { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_transfer', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_name, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_transfer', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_name, + }); + } + toggleCTraderTransferModal(); } else if (button_name === 'topup-btn') { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_topup', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_name, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_topup', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_name, + }); + } + showTopUpModal(existing_account); setAppstorePlatform(account.platform); } else { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_open', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_name, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_open', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_name, + }); + } + startTrade(account.platform, existing_account); } }} @@ -381,12 +407,14 @@ const CFDsListing = observer(() => { description={account.description} onAction={() => { setProduct(); - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_get', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_name, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_get', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_name, + }); + } if ((has_no_real_account || no_CR_account) && is_real) { openDerivRealAccountNeededModal(); } else { @@ -443,30 +471,39 @@ const CFDsListing = observer(() => { const button_name = e?.currentTarget?.name; setProduct(); if (button_name === 'transfer-btn') { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_transfer', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_name, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_transfer', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_name, + }); + } + toggleAccountTransferModal(); setSelectedAccount(existing_account); } else if (button_name === 'topup-btn') { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_topup', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_name, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_topup', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_name, + }); + } + showTopUpModal(existing_account); setAppstorePlatform(account.platform); } else { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_open', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_name, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_open', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_name, + }); + } + startTrade(account.platform, existing_account); } }} @@ -483,12 +520,14 @@ const CFDsListing = observer(() => { description={account.description} onAction={() => { setProduct(); - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_get', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: track_account_name, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_get', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: track_account_name, + }); + } if ((has_no_real_account || no_CR_account) && is_real) { openDerivRealAccountNeededModal(); } else { diff --git a/packages/appstore/src/components/compare-account/compare-account.tsx b/packages/appstore/src/components/compare-account/compare-account.tsx index 723b8d14cff7..4072a18df010 100644 --- a/packages/appstore/src/components/compare-account/compare-account.tsx +++ b/packages/appstore/src/components/compare-account/compare-account.tsx @@ -4,6 +4,7 @@ import { Localize } from '@deriv/translations'; import { Analytics } from '@deriv-com/analytics'; import { useHistory } from 'react-router-dom'; import { routes } from '@deriv/shared'; +import { useGrowthbookGetFeatureValue } from '@deriv/hooks'; import { useStore, observer } from '@deriv/stores'; type TCompareAccount = { @@ -15,16 +16,23 @@ const CompareAccount = observer(({ accounts_sub_text, is_desktop }: TCompareAcco const history = useHistory(); const { traders_hub } = useStore(); const { selected_account_type } = traders_hub; + const [is_traders_dashboard_tracking_enabled] = useGrowthbookGetFeatureValue({ + featureFlag: 'ce_tradershub_dashboard_tracking', + defaultValue: false, + }); + return (
    { history.push(routes.compare_cfds); - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'compare_accounts_push', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'compare_accounts_push', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + }); + } }} > { - Analytics.trackEvent('ce_tradershub_dashboard_form', { - action: 'account_logo_push', - form_name: 'traders_hub_default', - account_mode: selected_account_type, - account_name: !is_real ? `${sub_title === undefined ? name : sub_title}` : name, - }); + if (is_traders_dashboard_tracking_enabled) { + Analytics.trackEvent('ce_tradershub_dashboard_form', { + action: 'account_logo_push', + form_name: 'traders_hub_default', + account_mode: selected_account_type, + account_name: !is_real ? `${sub_title === undefined ? name : sub_title}` : name, + }); + } + if (is_deriv_platform) { switch (name) { case DERIV_PLATFORM_NAMES.TRADER: diff --git a/packages/appstore/src/components/currency-switcher-card/real/real-account-card.tsx b/packages/appstore/src/components/currency-switcher-card/real/real-account-card.tsx index d98891367cb3..e5f09af52706 100644 --- a/packages/appstore/src/components/currency-switcher-card/real/real-account-card.tsx +++ b/packages/appstore/src/components/currency-switcher-card/real/real-account-card.tsx @@ -6,6 +6,7 @@ import { Localize } from '@deriv/translations'; import { Analytics } from '@deriv-com/analytics'; import BalanceText from 'Components/elements/text/balance-text'; import CurrencySwitcherContainer from 'Components/containers/currency-switcher-container'; +import { useGrowthbookGetFeatureValue } from '@deriv/hooks'; import { useStore, observer } from '@deriv/stores'; import { IsIconCurrency } from 'Assets/svgs/currency'; @@ -30,6 +31,11 @@ const RealAccountCard = observer(() => { const uppercase_currency = currency?.toUpperCase(); const get_currency = IsIconCurrency(uppercase_currency) ? uppercase_currency : 'Unknown'; + const [is_traders_dashboard_tracking_enabled] = useGrowthbookGetFeatureValue({ + featureFlag: 'ce_tradershub_dashboard_tracking', + defaultValue: false, + }); + return ( { currency && ( + /> + {is_accu_sell_disabled &&
    }
    ); } @@ -127,32 +126,36 @@ const PurchaseButton = observer(() => { const is_disabled = !is_trade_enabled || is_proposal_empty || !info.id || !is_purchase_enabled; return ( - + {is_disabled && !is_loading && ( +
    )} - isLoading={is_loading} - disabled={is_disabled && !is_loading} - onClick={() => { - setLoadingButtonIndex(index); - onPurchase(info.id, info.stake, trade_type, isMobile, addNotificationBannerCallback); - }} - > - {!is_loading && ( - - )} - + ); })}
    diff --git a/packages/trader/src/AppV2/Components/TradeParamDefinition/__tests__/trade-param-definition.spec.tsx b/packages/trader/src/AppV2/Components/TradeParamDefinition/__tests__/trade-param-definition.spec.tsx new file mode 100644 index 000000000000..e1dee3ccda6f --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParamDefinition/__tests__/trade-param-definition.spec.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import TradeParamDefinition from '../trade-param-definition'; + +describe('TradeParamDefinition', () => { + it('should not render if description is not passed', () => { + const { container } = render(); + + expect(container).toBeEmptyDOMElement(); + }); + + it('should render description that is provided', () => { + render(); + + expect(screen.getByText('test description')).toBeInTheDocument(); + }); +}); diff --git a/packages/trader/src/AppV2/Components/TradeParamDefinition/index.ts b/packages/trader/src/AppV2/Components/TradeParamDefinition/index.ts new file mode 100644 index 000000000000..3eb108bbe9a6 --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParamDefinition/index.ts @@ -0,0 +1,4 @@ +import './trade-param-definition.scss'; +import TradeParamDefinition from './trade-param-definition'; + +export default TradeParamDefinition; diff --git a/packages/trader/src/AppV2/Components/TradeParamDefinition/trade-param-definition.scss b/packages/trader/src/AppV2/Components/TradeParamDefinition/trade-param-definition.scss new file mode 100644 index 000000000000..a9ee5df39ee4 --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParamDefinition/trade-param-definition.scss @@ -0,0 +1,7 @@ +$HANDLEBAR_HEIGHT: var(--core-size-1000); +$HEADER_TITLE_HEIGHT: var(--core-size-3200); + +.trade-param-definition { + height: calc(400px - $HANDLEBAR_HEIGHT - $HEADER_TITLE_HEIGHT); + padding-block-start: 0; +} diff --git a/packages/trader/src/AppV2/Components/TradeParamDefinition/trade-param-definition.tsx b/packages/trader/src/AppV2/Components/TradeParamDefinition/trade-param-definition.tsx new file mode 100644 index 000000000000..7c286b533e91 --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParamDefinition/trade-param-definition.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { ActionSheet, Text } from '@deriv-com/quill-ui'; + +type TTradeParamDefinitionProps = { + description?: React.ReactNode; +}; + +const TradeParamDefinition = ({ description }: TTradeParamDefinitionProps) => { + if (!description) return null; + return ( + + {description} + + ); +}; + +export default TradeParamDefinition; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/AccumulatorsInformation/__tests__/accumulators-information.spec.tsx b/packages/trader/src/AppV2/Components/TradeParameters/AccumulatorsInformation/__tests__/accumulators-information.spec.tsx new file mode 100644 index 000000000000..47e532ac032c --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/AccumulatorsInformation/__tests__/accumulators-information.spec.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { mockStore } from '@deriv/stores'; +import AccumulatorsInformation from '../accumulators-information'; +import ModulesProvider from 'Stores/Providers/modules-providers'; +import TraderProviders from '../../../../../trader-providers'; + +describe('AccumulatorsInformation', () => { + let default_mock_store: ReturnType; + + beforeEach( + () => + (default_mock_store = mockStore({ + modules: { + trade: { + ...mockStore({}), + currency: 'USD', + maximum_payout: 4000, + }, + }, + })) + ); + + const mockAccumulatorsInformation = (props?: React.ComponentProps) => + render( + + + + + + ); + it('should not render if description is not passed', () => { + const { container } = mockAccumulatorsInformation({ is_minimized: true }); + + expect(container).toBeEmptyDOMElement(); + }); + + it('should render description that is provided', () => { + mockAccumulatorsInformation(); + + expect(screen.getByText('Max. payout')).toBeInTheDocument(); + expect(screen.getByText('4,000.00 USD')).toBeInTheDocument(); + }); +}); diff --git a/packages/trader/src/AppV2/Components/TradeParameters/AccumulatorsInformation/accumulators-information.scss b/packages/trader/src/AppV2/Components/TradeParameters/AccumulatorsInformation/accumulators-information.scss index ab04ec211a56..a327699360de 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/AccumulatorsInformation/accumulators-information.scss +++ b/packages/trader/src/AppV2/Components/TradeParameters/AccumulatorsInformation/accumulators-information.scss @@ -1,12 +1,9 @@ .accumulators-info { &__wrapper { width: 100%; - } - &__row { display: flex; justify-content: space-between; align-items: center; - padding-block: var(--component-badge-notification-spacing-padding-sm); } &__title { border-bottom: var(--core-borderWidth-75) dotted var(--component-textIcon-normal-default); diff --git a/packages/trader/src/AppV2/Components/TradeParameters/AccumulatorsInformation/accumulators-information.tsx b/packages/trader/src/AppV2/Components/TradeParameters/AccumulatorsInformation/accumulators-information.tsx index 271d00c30a47..2046ea529e2e 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/AccumulatorsInformation/accumulators-information.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/AccumulatorsInformation/accumulators-information.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { observer } from 'mobx-react'; -import { Localize, localize } from '@deriv/translations'; +import { Localize } from '@deriv/translations'; import { Money } from '@deriv/components'; import { Text } from '@deriv-com/quill-ui'; import { useTraderStore } from 'Stores/useTraderStores'; @@ -10,32 +10,17 @@ type TAccumulatorsInformationProps = { }; const AccumulatorsInformation = observer(({ is_minimized }: TAccumulatorsInformationProps) => { - const { currency, maximum_payout, maximum_ticks } = useTraderStore(); - const content = [ - { - label: , - value: , - }, - { - label: , - value: `${maximum_ticks || 0} ${maximum_ticks === 1 ? localize('tick') : localize('ticks')}`, - }, - ]; + const { currency, maximum_payout } = useTraderStore(); if (is_minimized) return null; - return (
    - {content.map(({ label, value }) => ( -
    - - {label} - - - {value} - -
    - ))} + + + + + +
    ); }); diff --git a/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/__tests__/growth-rate.spec.tsx b/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/__tests__/growth-rate.spec.tsx new file mode 100644 index 000000000000..f0b5e8f9d257 --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/__tests__/growth-rate.spec.tsx @@ -0,0 +1,158 @@ +import React from 'react'; +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { mockStore } from '@deriv/stores'; +import { CONTRACT_TYPES, getGrowthRatePercentage } from '@deriv/shared'; +import ModulesProvider from 'Stores/Providers/modules-providers'; +import TraderProviders from '../../../../../trader-providers'; +import GrowthRate from '../growth-rate'; + +const growth_rate_param_label = 'Growth rate'; +const growth_rate_carousel_testid = 'dt_carousel'; +const skeleton_testid = 'dt_skeleton'; +const mocked_definition = 'A growth rate is...'; + +jest.mock('@deriv-com/quill-ui', () => ({ + ...jest.requireActual('@deriv-com/quill-ui'), + WheelPicker: jest.fn(({ data, setSelectedValue }) => ( +
    +

    WheelPicker

    +
      + {data.map(({ value }: { value: string }) => ( +
    • + +
    • + ))} +
    +
    + )), +})); +jest.mock('AppV2/Components/TradeParamDefinition', () => jest.fn(() =>
    {mocked_definition}
    )); +jest.mock('lodash.debounce', () => + jest.fn(fn => { + fn.cancel = () => null; + return fn; + }) +); + +describe('GrowthRate', () => { + let default_mock_store: ReturnType; + + beforeEach( + () => + (default_mock_store = mockStore({ + modules: { + trade: { + ...mockStore({}), + accumulator_range_list: [0.01, 0.02, 0.03, 0.04, 0.05], + growth_rate: 0.01, + is_purchase_enabled: true, + proposal_info: { + [CONTRACT_TYPES.ACCUMULATOR]: { id: 12345 }, + }, + tick_size_barrier_percentage: '0.03612%', + }, + }, + })) + ); + + afterEach(() => jest.clearAllMocks()); + + const mockGrowthRate = () => + render( + + + + + + ); + it('should render Skeleton loader if growth_rate is falsy', () => { + default_mock_store.modules.trade.growth_rate = 0; + mockGrowthRate(); + + expect(screen.getByTestId(skeleton_testid)).toBeInTheDocument(); + expect(screen.queryByText(growth_rate_param_label)).not.toBeInTheDocument(); + }); + it('should render trade param with "Growth rate" label and input with a value equal to the current growth_rate value in %', () => { + mockGrowthRate(); + + expect(screen.getByText(growth_rate_param_label)).toBeInTheDocument(); + expect(screen.getByRole('textbox')).toHaveValue( + `${getGrowthRatePercentage(default_mock_store.modules.trade.growth_rate)}%` + ); + }); + it('should disable trade param if has_open_accu_contract === true', () => { + default_mock_store.modules.trade.has_open_accu_contract = true; + mockGrowthRate(); + + expect(screen.getByRole('textbox')).toBeDisabled(); + }); + it('should open ActionSheet with WheelPicker component, details, "Save" button and trade param definition if user clicks on "Growth rate" trade param', () => { + default_mock_store.modules.trade.maximum_ticks = 55; + mockGrowthRate(); + + expect(screen.queryByTestId('dt-actionsheet-overlay')).not.toBeInTheDocument(); + + userEvent.click(screen.getByText(growth_rate_param_label)); + + expect(screen.getByTestId('dt-actionsheet-overlay')).toBeInTheDocument(); + expect(screen.getByText('WheelPicker')).toBeInTheDocument(); + expect(screen.getByText('Barrier')).toBeInTheDocument(); + expect( + screen.getByText(`±${default_mock_store.modules.trade.tick_size_barrier_percentage}`) + ).toBeInTheDocument(); + expect(screen.getByText('Max duration')).toBeInTheDocument(); + expect(screen.getByText(`${default_mock_store.modules.trade.maximum_ticks} ticks`)).toBeInTheDocument(); + expect(screen.getByText('Save')).toBeInTheDocument(); + expect(screen.getByText(mocked_definition)).toBeInTheDocument(); + }); + it('should render skeleton instead of WheelPicker if accumulator_range_list is empty', () => { + default_mock_store.modules.trade.accumulator_range_list = []; + mockGrowthRate(); + + userEvent.click(screen.getByText(growth_rate_param_label)); + + expect(screen.getByTestId('dt-actionsheet-overlay')).toBeInTheDocument(); + expect(screen.queryByText('WheelPicker')).not.toBeInTheDocument(); + expect(screen.getByTestId(skeleton_testid)).toBeInTheDocument(); + }); + it('should render skeletons instead of details if proposal data is not available', () => { + default_mock_store.modules.trade.proposal_info = {}; + default_mock_store.modules.trade.is_purchase_enabled = false; + mockGrowthRate(); + + userEvent.click(screen.getByText(growth_rate_param_label)); + + expect( + screen.queryByText(`±${default_mock_store.modules.trade.tick_size_barrier_percentage}`) + ).not.toBeInTheDocument(); + expect(screen.queryByText(`${default_mock_store.modules.trade.maximum_ticks} ticks`)).not.toBeInTheDocument(); + expect(screen.getAllByTestId(skeleton_testid)).toHaveLength(2); + }); + it('should apply specific className if innerHeight is <= 640px', () => { + const original_height = window.innerHeight; + window.innerHeight = 640; + mockGrowthRate(); + + userEvent.click(screen.getByText(growth_rate_param_label)); + + expect(screen.getByTestId(growth_rate_carousel_testid)).toHaveClass('growth-rate__carousel--small'); + window.innerHeight = original_height; + }); + it('should call onChange function if user changes selected value', async () => { + jest.useFakeTimers(); + mockGrowthRate(); + + const new_selected_value = default_mock_store.modules.trade.accumulator_range_list[1]; + userEvent.click(screen.getByText(growth_rate_param_label)); + userEvent.click(screen.getByText(`${getGrowthRatePercentage(new_selected_value)}%`)); + userEvent.click(screen.getByText('Save')); + + await waitFor(() => { + jest.advanceTimersByTime(200); + }); + + expect(default_mock_store.modules.trade.onChange).toBeCalled(); + jest.useRealTimers(); + }); +}); diff --git a/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/growth-rate-picker.tsx b/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/growth-rate-picker.tsx new file mode 100644 index 000000000000..a775ae3ef501 --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/growth-rate-picker.tsx @@ -0,0 +1,109 @@ +import React from 'react'; +import debounce from 'lodash.debounce'; +import { ActionSheet, Text, WheelPicker } from '@deriv-com/quill-ui'; +import { localize, Localize } from '@deriv/translations'; +import { getGrowthRatePercentage } from '@deriv/shared'; +import { Skeleton } from '@deriv/components'; + +type TGrowthRatePickerProps = { + accumulator_range_list?: number[]; + growth_rate: number; + maximum_ticks: number; + setGrowthRate: (growth_rate: number) => void; + should_show_details?: boolean; + tick_size_barrier_percentage: string; +}; + +const debouncedSetGrowthRate = debounce((setGrowthRate, growth_rate) => { + setGrowthRate(growth_rate); +}, 200); + +const GrowthRatePicker = ({ + accumulator_range_list = [], + growth_rate, + maximum_ticks, + setGrowthRate, + should_show_details, + tick_size_barrier_percentage, +}: TGrowthRatePickerProps) => { + const initial_growth_rate = React.useRef(); + const selected_growth_rate = React.useRef(growth_rate); + const data = accumulator_range_list.map(rate => ({ value: `${getGrowthRatePercentage(rate)}%` })); + const details_content = [ + { + label: , + value: `±${tick_size_barrier_percentage}`, + }, + { + label: , + value: `${maximum_ticks || 0} ${maximum_ticks === 1 ? localize('tick') : localize('ticks')}`, + }, + ]; + + React.useEffect(() => { + if (!initial_growth_rate.current && growth_rate) { + initial_growth_rate.current = growth_rate; + } + return () => { + if (initial_growth_rate.current && initial_growth_rate.current !== selected_growth_rate.current) { + setGrowthRate(initial_growth_rate.current); + } + debouncedSetGrowthRate.cancel(); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const handleSave = () => { + initial_growth_rate.current = selected_growth_rate.current; + }; + + const handlePickerValuesChange = (value: string | number) => { + const new_value = Number((value as string).slice(0, -1)) / 100; + if (new_value === selected_growth_rate.current) return; + debouncedSetGrowthRate(setGrowthRate, new_value); + selected_growth_rate.current = new_value; + }; + + return ( + + +
    + {accumulator_range_list.length ? ( + + ) : ( + + )} +
    +
    + {details_content.map(({ label, value }) => ( + + + {label} + +
    + {should_show_details ? ( + {value} + ) : ( + + )} +
    +
    + ))} +
    +
    + , + onAction: handleSave, + }} + /> +
    + ); +}; + +export default GrowthRatePicker; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/growth-rate.scss b/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/growth-rate.scss new file mode 100644 index 000000000000..a7d52c64153d --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/growth-rate.scss @@ -0,0 +1,53 @@ +$HANDLEBAR_HEIGHT: var(--core-size-1000); +$HEADER_TITLE_HEIGHT: var(--core-size-3200); +$FOOTER_BUTTON_HEIGHT: var(--core-size-4000); + +.growth-rate { + &__carousel { + & > .carousel__item { + height: 100%; + } + .trade-param-definition { + height: calc(480px - $HANDLEBAR_HEIGHT - $HEADER_TITLE_HEIGHT); + } + &--small { + .growth-rate__picker { + height: calc(90dvh - $HANDLEBAR_HEIGHT - $HEADER_TITLE_HEIGHT - $FOOTER_BUTTON_HEIGHT); + } + .trade-param-definition { + height: calc(90dvh - $HANDLEBAR_HEIGHT - $HEADER_TITLE_HEIGHT); + } + } + } + &__picker { + height: calc(480px - $HANDLEBAR_HEIGHT - $HEADER_TITLE_HEIGHT - $FOOTER_BUTTON_HEIGHT); + gap: var(--core-spacing-400); + padding: 0 var(--component-actionSheet-spacing-padding-md); + } + &__picker, + &__details-item { + display: flex; + flex-direction: column; + } + &__wheel-picker { + flex-grow: 1; + min-height: 0; + overflow: hidden; + } + &__details { + display: flex; + justify-content: space-around; + min-height: var(--core-size-2200); + + &-item { + align-items: center; + + &-value { + display: flex; + justify-content: center; + align-items: center; + flex-grow: 1; + } + } + } +} diff --git a/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/growth-rate.tsx b/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/growth-rate.tsx index 3711f453919a..9e95138d98b5 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/growth-rate.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/growth-rate.tsx @@ -1,26 +1,109 @@ import React from 'react'; import clsx from 'clsx'; import { observer } from 'mobx-react'; -import { TextField } from '@deriv-com/quill-ui'; +import { ActionSheet, TextField } from '@deriv-com/quill-ui'; +import { Skeleton } from '@deriv/components'; import { Localize } from '@deriv/translations'; import { useTraderStore } from 'Stores/useTraderStores'; -import { getGrowthRatePercentage } from '@deriv/shared'; +import { CONTRACT_TYPES, getGrowthRatePercentage, isEmptyObject } from '@deriv/shared'; +import Carousel from 'AppV2/Components/Carousel'; +import CarouselHeader from 'AppV2/Components/Carousel/carousel-header'; +import TradeParamDefinition from 'AppV2/Components/TradeParamDefinition'; +import GrowthRatePicker from './growth-rate-picker'; type TGrowthRateProps = { is_minimized?: boolean; }; const GrowthRate = observer(({ is_minimized }: TGrowthRateProps) => { - const { growth_rate, has_open_accu_contract } = useTraderStore(); + const { + accumulator_range_list, + growth_rate, + is_purchase_enabled, + is_trade_enabled, + has_open_accu_contract, + maximum_ticks, + onChange, + proposal_info, + tick_size_barrier_percentage, + } = useTraderStore(); + + const [is_open, setIsOpen] = React.useState(false); + const is_small_screen = window.innerHeight <= 640; + const info = proposal_info?.[CONTRACT_TYPES.ACCUMULATOR] || {}; + const is_proposal_data_available = + is_trade_enabled && !isEmptyObject(proposal_info) && !!info.id && is_purchase_enabled; + const classname = clsx('trade-params__option', is_minimized && 'trade-params__option--minimized'); + + const handleGrowthRateChange = (rate: number) => { + onChange({ target: { name: 'growth_rate', value: rate } }); + }; + const onActionSheetClose = () => { + setIsOpen(false); + }; + + const action_sheet_content = [ + { + id: 1, + component: ( + + ), + }, + { + id: 2, + component: ( + + } + /> + ), + }, + ]; + + if (!growth_rate) + return ( +
    + +
    + ); return ( - } - value={`${getGrowthRatePercentage(growth_rate)}%`} - className={clsx('trade-params__option', is_minimized && 'trade-params__option--minimized')} - disabled={has_open_accu_contract} - /> + <> + + } + onClick={() => setIsOpen(true)} + readOnly + value={`${getGrowthRatePercentage(growth_rate)}%`} + variant='fill' + /> + + + } + /> + + + ); }); diff --git a/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/index.tsx b/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/index.tsx index 32449048a620..b3a09fa9922d 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/index.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/GrowthRate/index.tsx @@ -1,3 +1,4 @@ +import './growth-rate.scss'; import GrowthRate from './growth-rate'; export default GrowthRate; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/__tests__/take-profit.spec.tsx b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/__tests__/take-profit.spec.tsx index 898a53e01b10..b87a30e7b28e 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/__tests__/take-profit.spec.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/__tests__/take-profit.spec.tsx @@ -7,6 +7,7 @@ import TraderProviders from '../../../../../trader-providers'; import TakeProfit from '../take-profit'; const take_profit_trade_param = 'Take profit'; +const data_testid = 'dt_input_with_steppers'; const mediaQueryList = { matches: true, @@ -47,7 +48,7 @@ describe('TakeProfit', () => { userEvent.click(screen.getByText(take_profit_trade_param)); expect(screen.getByTestId('dt-actionsheet-overlay')).toBeInTheDocument(); - const input = screen.getByRole('spinbutton'); + const input = screen.getByTestId(data_testid); expect(input).toBeInTheDocument(); expect(screen.getByText('Save')).toBeInTheDocument(); expect( @@ -72,7 +73,7 @@ describe('TakeProfit', () => { userEvent.click(screen.getByText(take_profit_trade_param)); const toggle_switcher = screen.getAllByRole('button')[0]; - const input = screen.getByRole('spinbutton'); + const input = screen.getByTestId(data_testid); expect(input).toBeDisabled(); userEvent.click(toggle_switcher); @@ -85,7 +86,7 @@ describe('TakeProfit', () => { userEvent.click(screen.getByText(take_profit_trade_param)); const take_profit_overlay = screen.getByTestId('dt_take_profit_overlay'); - const input = screen.getByRole('spinbutton'); + const input = screen.getByTestId(data_testid); expect(input).toBeDisabled(); userEvent.click(take_profit_overlay); @@ -106,8 +107,8 @@ describe('TakeProfit', () => { const toggle_switcher = screen.getAllByRole('button')[0]; userEvent.click(toggle_switcher); - const input = screen.getByRole('spinbutton'); - userEvent.type(input, ' '); + const input = screen.getByTestId(data_testid); + userEvent.type(input, '{space}{backspace}'); expect(screen.getByText('Please enter a take profit amount.')); const save_button = screen.getByText('Save'); @@ -137,7 +138,7 @@ describe('TakeProfit', () => { const toggle_switcher = screen.getAllByRole('button')[0]; userEvent.click(toggle_switcher); - const input = screen.getByRole('spinbutton'); + const input = screen.getByTestId(data_testid); userEvent.type(input, '2'); expect(screen.getByText('Acceptable range: 0.01 to 100')); diff --git a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit-description.tsx b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit-description.tsx deleted file mode 100644 index 58a76c6c5a26..000000000000 --- a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit-description.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import { ActionSheet, Text } from '@deriv-com/quill-ui'; -import { Localize } from '@deriv/translations'; - -const TakeProfitDescription = () => ( - - - - - -); - -export default TakeProfitDescription; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit-input.tsx b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit-input.tsx index 84ed031af22c..1faf6f7fd1f0 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit-input.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit-input.tsx @@ -44,6 +44,7 @@ const TakeProfitInput = React.forwardRef( allowDecimals disabled={!is_enabled} decimals={decimals} + data-testid='dt_input_with_steppers' message={message} name='take_profit' onChange={onInputChange} diff --git a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.scss b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.scss index 3005bc086bd3..a5b7eb2ebecc 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.scss +++ b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.scss @@ -7,11 +7,6 @@ $FOOTER_BUTTON_HEIGHT: var(--core-size-4000); position: relative; height: calc(400px - $HANDLEBAR_HEIGHT - $HEADER_TITLE_HEIGHT - $FOOTER_BUTTON_HEIGHT); padding-block: 0; - - &--definition { - height: calc(400px - $HANDLEBAR_HEIGHT - $HEADER_TITLE_HEIGHT); - padding-block-start: 0; - } } &__accu-information { diff --git a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.tsx b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.tsx index d4d29b7af3d4..5035a706ecdf 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.tsx @@ -8,8 +8,8 @@ import { getCurrencyDisplayCode, getDecimalPlaces } from '@deriv/shared'; import { focusAndOpenKeyboard } from 'AppV2/Utils/trade-params-utils'; import Carousel from 'AppV2/Components/Carousel'; import CarouselHeader from 'AppV2/Components/Carousel/carousel-header'; -import TakeProfitDescription from './take-profit-description'; import TakeProfitInput from './take-profit-input'; +import TradeParamDefinition from 'AppV2/Components/TradeParamDefinition'; type TTakeProfitProps = { is_minimized?: boolean; @@ -139,7 +139,13 @@ const TakeProfit = observer(({ is_minimized }: TTakeProfitProps) => { }, { id: 2, - component: , + component: ( + + } + /> + ), }, ]; From 47934cc932e7453828f7956b863c380e35e0e29b Mon Sep 17 00:00:00 2001 From: Jim Daniels Wasswa <104334373+jim-deriv@users.noreply.github.com> Date: Fri, 9 Aug 2024 15:48:56 +0800 Subject: [PATCH 19/72] chore: add empty list message for citizenship dropdown (#16426) --- .../PersonalDetails/PersonalDetails.tsx | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.tsx b/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.tsx index aaf1ff600d29..b368393f5138 100644 --- a/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.tsx +++ b/packages/wallets/src/features/accounts/screens/PersonalDetails/PersonalDetails.tsx @@ -1,6 +1,7 @@ import React, { useEffect, useMemo } from 'react'; import * as Yup from 'yup'; import { useResidenceList, useSettings } from '@deriv/api-v2'; +import { useTranslations } from '@deriv-com/translations'; import { Dropdown, Loader } from '@deriv-com/ui'; import { FlowTextField, InlineMessage, useFlow, WalletText } from '../../../../components'; import { accountOpeningReasonList } from './constants'; @@ -10,6 +11,7 @@ const PersonalDetails = () => { const { data: residenceList, isLoading, isSuccess: isResidenceListSuccess } = useResidenceList(); const { formValues, setFormValues, setTouched, touched } = useFlow(); const { data: getSettings } = useSettings(); + const { localize } = useTranslations(); const countryCodeToPatternMapper = useMemo(() => { const countryCodeToPatternMapping: Record = {}; @@ -89,6 +91,7 @@ const PersonalDetails = () => {
    ({ @@ -97,6 +100,23 @@ const PersonalDetails = () => { }))} listHeight='sm' name='wallets-personal-details__dropdown-citizenship' + onBlur={e => { + const matchFound = residenceList.find( + residence => + residence.text?.toLocaleLowerCase() === e.target.value.toLocaleLowerCase() + ); + if (!matchFound) { + setFormValues('citizenship', ''); + } + }} + onSearch={inputValue => { + residenceList.some(residence => { + if (residence.text?.toLowerCase() === inputValue.toLowerCase()) { + setFormValues('citizenship', residence.value); + return true; + } + }); + }} onSelect={selectedItem => setFormValues('citizenship', selectedItem)} value={formValues?.citizenship ?? getSettings?.citizen} /> @@ -121,6 +141,7 @@ const PersonalDetails = () => {
    Date: Fri, 9 Aug 2024 11:23:27 +0300 Subject: [PATCH 20/72] DTRA / Kate / DTRA-1470 / Implement Strike trade param functionality (#16361) * refactor: update quill * feat: add action sheet with definition for strike * feat: integrate wheel-picker component * feat: enaple save function * refactor: add custom regexp for take profit * feat: add payout * refactor: removed memo * fix: tests * refactor: add tests for strike component * refactor: tests * feat: update payout per point based on selected strike * refactor: add debounce cancel * chore: increase debounce time * chore: increase tomer in test * refactor: tests --- .../DatePicker/__tests__/date-picker.spec.tsx | 7 - .../__tests__/contract-type-filter.spec.tsx | 7 - .../Filter/__tests__/time-filter.spec.tsx | 7 - .../__tests__/guide-definition-modal.spec.tsx | 7 - .../guide-description-modal.spec.tsx | 7 - .../Components/Guide/__tests__/guide.spec.tsx | 6 - .../__tests__/allow-equals.spec.tsx | 7 - .../__tests__/last-digit-prediction.spec.tsx | 7 - .../Strike/__tests__/strike.spec.tsx | 133 ++++++++++++++++++ .../TradeParameters/Strike/index.ts | 1 + .../TradeParameters/Strike/strike-wheel.tsx | 99 +++++++++++++ .../TradeParameters/Strike/strike.scss | 49 +++++++ .../TradeParameters/Strike/strike.tsx | 82 +++++++++-- .../TakeProfit/__tests__/take-profit.spec.tsx | 8 -- .../TakeProfit/take-profit-input.tsx | 3 + .../TakeProfit/take-profit.tsx | 18 +-- .../__tests__/positions-content.spec.tsx | 8 -- 17 files changed, 363 insertions(+), 93 deletions(-) create mode 100644 packages/trader/src/AppV2/Components/TradeParameters/Strike/__tests__/strike.spec.tsx create mode 100644 packages/trader/src/AppV2/Components/TradeParameters/Strike/strike-wheel.tsx create mode 100644 packages/trader/src/AppV2/Components/TradeParameters/Strike/strike.scss diff --git a/packages/trader/src/AppV2/Components/DatePicker/__tests__/date-picker.spec.tsx b/packages/trader/src/AppV2/Components/DatePicker/__tests__/date-picker.spec.tsx index 9a1447cc6092..2fae212fe688 100644 --- a/packages/trader/src/AppV2/Components/DatePicker/__tests__/date-picker.spec.tsx +++ b/packages/trader/src/AppV2/Components/DatePicker/__tests__/date-picker.spec.tsx @@ -12,13 +12,6 @@ const mockProps = { setCustomTimeRangeFilter: jest.fn(), handleDateChange: jest.fn(), }; -const mediaQueryList = { - matches: true, - addEventListener: jest.fn(), - removeEventListener: jest.fn(), -}; - -window.matchMedia = jest.fn().mockImplementation(() => mediaQueryList); describe('DateRangePicker', () => { it('should render Action Sheet with Date Picker', () => { diff --git a/packages/trader/src/AppV2/Components/Filter/__tests__/contract-type-filter.spec.tsx b/packages/trader/src/AppV2/Components/Filter/__tests__/contract-type-filter.spec.tsx index fb5abf1a03a5..d9834d2457e5 100644 --- a/packages/trader/src/AppV2/Components/Filter/__tests__/contract-type-filter.spec.tsx +++ b/packages/trader/src/AppV2/Components/Filter/__tests__/contract-type-filter.spec.tsx @@ -8,13 +8,6 @@ const mockProps = { onApplyContractTypeFilter: jest.fn(), contractTypeFilter: [], }; -const mediaQueryList = { - matches: true, - addEventListener: jest.fn(), - removeEventListener: jest.fn(), -}; - -window.matchMedia = jest.fn().mockImplementation(() => mediaQueryList); describe('ContractTypeFilter', () => { it('should change data-state of the dropdown if user clicks on the filter', () => { diff --git a/packages/trader/src/AppV2/Components/Filter/__tests__/time-filter.spec.tsx b/packages/trader/src/AppV2/Components/Filter/__tests__/time-filter.spec.tsx index 75b977665263..88f7d721d9ea 100644 --- a/packages/trader/src/AppV2/Components/Filter/__tests__/time-filter.spec.tsx +++ b/packages/trader/src/AppV2/Components/Filter/__tests__/time-filter.spec.tsx @@ -11,13 +11,6 @@ const mockProps = { setCustomTimeRangeFilter: jest.fn(), setNoMatchesFound: jest.fn(), }; -const mediaQueryList = { - matches: true, - addEventListener: jest.fn(), - removeEventListener: jest.fn(), -}; - -window.matchMedia = jest.fn().mockImplementation(() => mediaQueryList); describe('TimeFilter', () => { it('should change data-state of the dropdown if user clicks on the filter', () => { diff --git a/packages/trader/src/AppV2/Components/Guide/__tests__/guide-definition-modal.spec.tsx b/packages/trader/src/AppV2/Components/Guide/__tests__/guide-definition-modal.spec.tsx index fba53ef51ca8..fa0eb229ea73 100644 --- a/packages/trader/src/AppV2/Components/Guide/__tests__/guide-definition-modal.spec.tsx +++ b/packages/trader/src/AppV2/Components/Guide/__tests__/guide-definition-modal.spec.tsx @@ -9,13 +9,6 @@ const mockProps = { term: TERM.GROWTH_RATE, onClose: jest.fn(), }; -const mediaQueryList = { - matches: true, - addEventListener: jest.fn(), - removeEventListener: jest.fn(), -}; - -window.matchMedia = jest.fn().mockImplementation(() => mediaQueryList); jest.mock('@lottiefiles/dotlottie-react', () => ({ DotLottieReact: jest.fn(() =>
    DotLottieReact
    ), diff --git a/packages/trader/src/AppV2/Components/Guide/__tests__/guide-description-modal.spec.tsx b/packages/trader/src/AppV2/Components/Guide/__tests__/guide-description-modal.spec.tsx index 74ac1a3ebf36..1cf86cee4aae 100644 --- a/packages/trader/src/AppV2/Components/Guide/__tests__/guide-description-modal.spec.tsx +++ b/packages/trader/src/AppV2/Components/Guide/__tests__/guide-description-modal.spec.tsx @@ -12,18 +12,11 @@ const mockProps = { selected_contract_type: CONTRACT_LIST.ACCUMULATORS, show_guide_for_selected_contract: false, }; -const mediaQueryList = { - matches: true, - addEventListener: jest.fn(), - removeEventListener: jest.fn(), -}; jest.mock('@lottiefiles/dotlottie-react', () => ({ DotLottieReact: jest.fn(() =>
    DotLottieReact
    ), })); -window.matchMedia = jest.fn().mockImplementation(() => mediaQueryList); - describe('DescriptionModal', () => { beforeAll(() => { HTMLDialogElement.prototype.show = jest.fn(); diff --git a/packages/trader/src/AppV2/Components/Guide/__tests__/guide.spec.tsx b/packages/trader/src/AppV2/Components/Guide/__tests__/guide.spec.tsx index 92736d5250fe..626bd9beca7f 100644 --- a/packages/trader/src/AppV2/Components/Guide/__tests__/guide.spec.tsx +++ b/packages/trader/src/AppV2/Components/Guide/__tests__/guide.spec.tsx @@ -9,18 +9,12 @@ import { TERM } from 'AppV2/Utils/contract-description-utils'; import TraderProviders from '../../../../trader-providers'; import Guide from '../guide'; -const mediaQueryList = { - matches: true, - addEventListener: jest.fn(), - removeEventListener: jest.fn(), -}; const trade_types = 'Trade types'; jest.mock('@lottiefiles/dotlottie-react', () => ({ DotLottieReact: jest.fn(() =>
    DotLottieReact
    ), })); -window.matchMedia = jest.fn().mockImplementation(() => mediaQueryList); Loadable.preloadAll(); describe('Guide', () => { diff --git a/packages/trader/src/AppV2/Components/TradeParameters/AllowEquals/__tests__/allow-equals.spec.tsx b/packages/trader/src/AppV2/Components/TradeParameters/AllowEquals/__tests__/allow-equals.spec.tsx index 9e9246e20db3..03b3caeac8a1 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/AllowEquals/__tests__/allow-equals.spec.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/AllowEquals/__tests__/allow-equals.spec.tsx @@ -14,13 +14,6 @@ jest.mock('Stores/Modules/Trading/Helpers/allow-equals', () => ({ })); const title = 'Allow equals'; -const mediaQueryList = { - matches: true, - addEventListener: jest.fn(), - removeEventListener: jest.fn(), -}; - -window.matchMedia = jest.fn().mockImplementation(() => mediaQueryList); describe('AllowEquals', () => { let default_mock_store: ReturnType; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/LastDigitPrediction/__tests__/last-digit-prediction.spec.tsx b/packages/trader/src/AppV2/Components/TradeParameters/LastDigitPrediction/__tests__/last-digit-prediction.spec.tsx index 48e8bd1c3bd0..85cd53f42459 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/LastDigitPrediction/__tests__/last-digit-prediction.spec.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/LastDigitPrediction/__tests__/last-digit-prediction.spec.tsx @@ -7,13 +7,6 @@ import ModulesProvider from 'Stores/Providers/modules-providers'; import LastDigitPrediction from '../last-digit-prediction'; const title = 'Last digit prediction'; -const mediaQueryList = { - matches: true, - addEventListener: jest.fn(), - removeEventListener: jest.fn(), -}; - -window.matchMedia = jest.fn().mockImplementation(() => mediaQueryList); describe('LastDigitPrediction', () => { let default_mock_store: ReturnType; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Strike/__tests__/strike.spec.tsx b/packages/trader/src/AppV2/Components/TradeParameters/Strike/__tests__/strike.spec.tsx new file mode 100644 index 000000000000..4e4ef0dfdfb7 --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/Strike/__tests__/strike.spec.tsx @@ -0,0 +1,133 @@ +import React from 'react'; +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { mockStore } from '@deriv/stores'; +import { CONTRACT_TYPES, TRADE_TYPES } from '@deriv/shared'; +import ModulesProvider from 'Stores/Providers/modules-providers'; +import TraderProviders from '../../../../../trader-providers'; +import Strike from '../strike'; + +const strike_trade_param_label = 'Strike price'; + +jest.mock('@deriv-com/quill-ui', () => ({ + ...jest.requireActual('@deriv-com/quill-ui'), + WheelPicker: jest.fn(({ data, setSelectedValue }) => ( +
    +

    WheelPicker

    +
      + {data.map(({ value }: { value: string }) => ( +
    • + +
    • + ))} +
    +
    + )), +})); + +jest.mock('lodash.debounce', () => + jest.fn(fn => { + fn.cancel = () => null; + return fn; + }) +); + +describe('Strike', () => { + let default_mock_store: ReturnType; + + beforeEach( + () => + (default_mock_store = mockStore({ + modules: { + trade: { + ...mockStore({}), + barrier_1: '+1.80', + barrier_choices: ['+1.80', '+1.00', '+0.00', '-1.00', '-1.80'], + contract_type: TRADE_TYPES.VANILLA.CALL, + currency: 'USD', + proposal_info: { + [CONTRACT_TYPES.VANILLA.CALL]: { obj_contract_basis: { value: '14.245555' } }, + }, + }, + }, + })) + ); + + afterEach(() => jest.clearAllMocks()); + + const mockStrike = () => + render( + + + + + + ); + it('should render Skeleton loader if strike (barrier_1) is falsy', () => { + default_mock_store.modules.trade.barrier_1 = ''; + mockStrike(); + + expect(screen.getByTestId('dt_skeleton')).toBeInTheDocument(); + expect(screen.queryByText(strike_trade_param_label)).not.toBeInTheDocument(); + }); + + it('should render trade param with "Strike price" label and input with value equal to current strike value (barrier_1)', () => { + mockStrike(); + + expect(screen.getByText(strike_trade_param_label)).toBeInTheDocument(); + expect(screen.getByRole('textbox')).toHaveValue('+1.80'); + }); + + it('should open ActionSheet with WheelPicker component, Payout per point information, "Save" button and text content with definition if user clicks on trade param', () => { + mockStrike(); + + expect(screen.queryByTestId('dt-actionsheet-overlay')).not.toBeInTheDocument(); + + userEvent.click(screen.getByText(strike_trade_param_label)); + + expect(screen.getByTestId('dt-actionsheet-overlay')).toBeInTheDocument(); + expect(screen.getByText('WheelPicker')).toBeInTheDocument(); + expect(screen.getByText('Payout per point:')).toBeInTheDocument(); + expect(screen.getByText(/14.245555/)).toBeInTheDocument(); + expect(screen.getByText('Save')).toBeInTheDocument(); + expect(screen.getByText('Content goes here.')).toBeInTheDocument(); + }); + + it('should not render Payout per point information if proposal_info is empty object', () => { + default_mock_store.modules.trade.proposal_info = {}; + mockStrike(); + + userEvent.click(screen.getByText(strike_trade_param_label)); + + expect(screen.getByText('Payout per point:')).toBeInTheDocument(); + expect(screen.queryByText(/14.245555/)).not.toBeInTheDocument(); + }); + + it('should apply specific className if innerHeight is <= 640px', () => { + const original_height = window.innerHeight; + window.innerHeight = 640; + mockStrike(); + + userEvent.click(screen.getByText(strike_trade_param_label)); + + expect(screen.getByTestId('dt_carousel')).toHaveClass('strike__carousel--small'); + window.innerHeight = original_height; + }); + + it('should call onChange function if user changes selected value', async () => { + jest.useFakeTimers(); + mockStrike(); + + const new_selected_value = default_mock_store.modules.trade.barrier_choices[1]; + userEvent.click(screen.getByText(strike_trade_param_label)); + userEvent.click(screen.getByText(new_selected_value)); + userEvent.click(screen.getByText('Save')); + + await waitFor(() => { + jest.advanceTimersByTime(200); + }); + + expect(default_mock_store.modules.trade.onChange).toBeCalled(); + jest.useRealTimers(); + }); +}); diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Strike/index.ts b/packages/trader/src/AppV2/Components/TradeParameters/Strike/index.ts index 3189f709652c..0561cc182574 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/Strike/index.ts +++ b/packages/trader/src/AppV2/Components/TradeParameters/Strike/index.ts @@ -1,3 +1,4 @@ +import './strike.scss'; import Strike from './strike'; export default Strike; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Strike/strike-wheel.tsx b/packages/trader/src/AppV2/Components/TradeParameters/Strike/strike-wheel.tsx new file mode 100644 index 000000000000..f6f24314debb --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/Strike/strike-wheel.tsx @@ -0,0 +1,99 @@ +import React from 'react'; +import debounce from 'lodash.debounce'; +import { ActionSheet, Text, WheelPicker } from '@deriv-com/quill-ui'; +import { Skeleton } from '@deriv/components'; +import { Localize } from '@deriv/translations'; + +type TStrikeWheelProps = { + current_strike: string; + currency: string; + onStrikePriceSelect: (e: { + target: { + name: string; + value: unknown; + }; + }) => void; + payout_per_point?: string | number; + strike_price_list: { + value: string; + }[]; +}; + +const onWheelPickerScrollDebounced = debounce( + (new_value: string | number, callback: TStrikeWheelProps['onStrikePriceSelect']) => { + callback({ target: { name: 'barrier_1', value: new_value } }); + }, + 200 +); + +const StrikeWheel = ({ + current_strike, + currency, + onStrikePriceSelect, + payout_per_point, + strike_price_list, +}: TStrikeWheelProps) => { + const initial_value_ref = React.useRef(); + const selected_value_ref = React.useRef(current_strike); + + const onSave = () => { + if (selected_value_ref.current !== initial_value_ref.current) { + initial_value_ref.current = selected_value_ref.current; + } + }; + + React.useEffect(() => { + if (!initial_value_ref.current && current_strike) { + initial_value_ref.current = current_strike; + } + + return () => { + if (initial_value_ref.current !== selected_value_ref.current) { + onStrikePriceSelect({ target: { name: 'barrier_1', value: initial_value_ref.current } }); + } + onWheelPickerScrollDebounced.cancel(); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + +
    + { + if (new_value === selected_value_ref.current) return; + selected_value_ref.current = new_value; + onWheelPickerScrollDebounced(new_value, onStrikePriceSelect); + }} + /> +
    +
    + + + + + {payout_per_point ? ( + + {payout_per_point} {currency} + + ) : ( + + )} + +
    +
    + , + onAction: onSave, + }} + /> +
    + ); +}; + +export default StrikeWheel; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Strike/strike.scss b/packages/trader/src/AppV2/Components/TradeParameters/Strike/strike.scss new file mode 100644 index 000000000000..e1b0b415b0f8 --- /dev/null +++ b/packages/trader/src/AppV2/Components/TradeParameters/Strike/strike.scss @@ -0,0 +1,49 @@ +$HANDLEBAR_HEIGHT: var(--core-size-1000); +$HEADER_TITLE_HEIGHT: var(--core-size-3200); +$FOOTER_BUTTON_HEIGHT: var(--core-size-4000); + +.strike { + &__carousel { + & > .carousel__item { + height: 100%; + } + .trade-param-definition { + height: calc(480px - $HANDLEBAR_HEIGHT - $HEADER_TITLE_HEIGHT); + } + &--small { + .strike__wrapper { + height: calc(90dvh - $HANDLEBAR_HEIGHT - $HEADER_TITLE_HEIGHT - $FOOTER_BUTTON_HEIGHT); + } + .trade-param-definition { + height: calc(90dvh - $HANDLEBAR_HEIGHT - $HEADER_TITLE_HEIGHT); + } + } + } + + &__wrapper { + height: calc(480px - $HANDLEBAR_HEIGHT - $HEADER_TITLE_HEIGHT - $FOOTER_BUTTON_HEIGHT); + padding-block: 0; + display: flex; + flex-direction: column; + gap: var(--core-spacing-400); + } + + &__wheel-picker { + flex-grow: 1; + min-height: 0; + } + + &__payout { + min-height: var(--core-size-2200); + display: flex; + flex-direction: column; + align-items: center; + + &__content { + display: flex; + justify-content: center; + align-items: center; + flex-grow: 1; + } + } +} diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Strike/strike.tsx b/packages/trader/src/AppV2/Components/TradeParameters/Strike/strike.tsx index d6a0a49850a2..6fc7cb444f16 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/Strike/strike.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/Strike/strike.tsx @@ -1,24 +1,84 @@ import React from 'react'; -import { observer } from 'mobx-react'; -import { TextField } from '@deriv-com/quill-ui'; -import { Localize } from '@deriv/translations'; import clsx from 'clsx'; +import { observer } from 'mobx-react'; import { useTraderStore } from 'Stores/useTraderStores'; +import { ActionSheet, TextField } from '@deriv-com/quill-ui'; +import { getCurrencyDisplayCode, isEmptyObject } from '@deriv/shared'; +import { Localize } from '@deriv/translations'; +import { Skeleton } from '@deriv/components'; +import TradeParamDefinition from 'AppV2/Components/TradeParamDefinition'; +import Carousel from 'AppV2/Components/Carousel'; +import CarouselHeader from 'AppV2/Components/Carousel/carousel-header'; +import StrikeWheel from './strike-wheel'; type TStrikeProps = { is_minimized?: boolean; }; const Strike = observer(({ is_minimized }: TStrikeProps) => { - const { barrier_1 } = useTraderStore(); + const [is_open, setIsOpen] = React.useState(false); + const { + barrier_1, + barrier_choices: strike_price_choices, + contract_type, + currency, + onChange, + proposal_info, + } = useTraderStore(); + + const is_small_screen = window.innerHeight <= 640; + const strike_price_list = strike_price_choices.map((strike_price: string) => ({ value: strike_price })); + const payout_per_point: string | number = isEmptyObject(proposal_info) + ? '' + : proposal_info[contract_type.toUpperCase()]?.obj_contract_basis?.value; + const action_sheet_content = [ + { + id: 1, + component: ( + + ), + }, + { + id: 2, + component: } />, + }, + ]; + const classname = clsx('trade-params__option', is_minimized && 'trade-params__option--minimized'); + + if (!barrier_1) + return ( +
    + +
    + ); + return ( - } - value={barrier_1} - className={clsx('trade-params__option', is_minimized && 'trade-params__option--minimized')} - /> + + } + onClick={() => setIsOpen(true)} + readOnly + variant='fill' + value={barrier_1} + /> + setIsOpen(false)} position='left' expandable={false}> + + } + /> + + + ); }); diff --git a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/__tests__/take-profit.spec.tsx b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/__tests__/take-profit.spec.tsx index b87a30e7b28e..5c504aabfb25 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/__tests__/take-profit.spec.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/__tests__/take-profit.spec.tsx @@ -9,14 +9,6 @@ import TakeProfit from '../take-profit'; const take_profit_trade_param = 'Take profit'; const data_testid = 'dt_input_with_steppers'; -const mediaQueryList = { - matches: true, - addEventListener: jest.fn(), - removeEventListener: jest.fn(), -}; - -window.matchMedia = jest.fn().mockImplementation(() => mediaQueryList); - describe('TakeProfit', () => { let default_mock_store: ReturnType; diff --git a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit-input.tsx b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit-input.tsx index 1faf6f7fd1f0..ef2412b7e00a 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit-input.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit-input.tsx @@ -46,12 +46,15 @@ const TakeProfitInput = React.forwardRef( decimals={decimals} data-testid='dt_input_with_steppers' message={message} + minusDisabled={Number(take_profit_value) - 1 <= 0} name='take_profit' onChange={onInputChange} placeholder={localize('Amount')} ref={ref} + regex={/[^0-9.,]/g} status={error_message ? 'error' : 'neutral'} textAlignment='center' + inputMode='decimal' unitLeft={currency} variant='fill' value={take_profit_value} diff --git a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.tsx b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.tsx index 5035a706ecdf..7e0078ff10d3 100644 --- a/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.tsx +++ b/packages/trader/src/AppV2/Components/TradeParameters/TakeProfit/take-profit.tsx @@ -85,11 +85,7 @@ const TakeProfit = observer(({ is_minimized }: TTakeProfitProps) => { }; const onInputChange = (e: React.ChangeEvent) => { - //TODO: check if we will need all this logic with latest Quill update. Add disabling "-" icon when value is < 1 - let value: string | number = e.target.value; - value = String(value).trim().replace(',', '.'); - - if (value !== '' && Number(value) <= 0) value = '0'; + const value: string | number = e.target.value.replace(',', '.'); setTakeProfitValue(value); isTakeProfitOutOfRange(value); @@ -123,7 +119,7 @@ const TakeProfit = observer(({ is_minimized }: TTakeProfitProps) => { id: 1, component: ( { return ( } - value={has_take_profit && take_profit ? `${take_profit} ${getCurrencyDisplayCode(currency)}` : '-'} - className={clsx('trade-params__option', is_minimized && 'trade-params__option--minimized')} - disabled={has_open_accu_contract} onClick={() => setIsOpen(true)} + readOnly + variant='fill' + value={has_take_profit && take_profit ? `${take_profit} ${getCurrencyDisplayCode(currency)}` : '-'} /> diff --git a/packages/trader/src/AppV2/Containers/Positions/__tests__/positions-content.spec.tsx b/packages/trader/src/AppV2/Containers/Positions/__tests__/positions-content.spec.tsx index a4c592e249e6..dd5e69bdc1aa 100644 --- a/packages/trader/src/AppV2/Containers/Positions/__tests__/positions-content.spec.tsx +++ b/packages/trader/src/AppV2/Containers/Positions/__tests__/positions-content.spec.tsx @@ -14,14 +14,6 @@ const emptyPositions = 'EmptyPositions'; const loaderTestId = 'dt_positions_loader'; const totalProfitLoss = 'Total profit/loss:'; -const mediaQueryList = { - matches: true, - addEventListener: jest.fn(), - removeEventListener: jest.fn(), -}; - -window.matchMedia = jest.fn().mockImplementation(() => mediaQueryList); - jest.mock('@deriv/shared', () => ({ ...jest.requireActual('@deriv/shared'), WS: { From a3da32aede03283a880286b747795c8dc3a65fa7 Mon Sep 17 00:00:00 2001 From: George Usynin <103181646+heorhi-deriv@users.noreply.github.com> Date: Fri, 9 Aug 2024 17:03:23 +0300 Subject: [PATCH 21/72] [WALL] george / WALL-4560 / Translations in Wallet Overlay - Transfer/Transactions (#16327) * feat(wallets): :sparkles: add translations to transactions and transfers * refactor(wallets): :recycle: apply comments * fix(wallets): :ambulance: fix typo --- .../api-v2/src/hooks/useCryptoTransactions.ts | 88 ------------ .../src/components/AppCard/AppCard.tsx | 4 +- .../components/AppCardBadge/AppCardBadge.tsx | 9 +- .../Base/ATMAmountInput/ATMAmountInput.tsx | 8 +- .../wallets/src/components/Timer/Timer.tsx | 9 +- .../WalletsActionScreen.tsx | 12 +- .../WalletActionModal/WalletActionModal.tsx | 2 +- .../cashier/helpers/transaction-helpers.tsx | 110 +++++++++++++++ .../TransactionStatus/TransactionStatus.tsx | 10 +- .../CryptoTransaction/CryptoTransaction.tsx | 129 +++++++++++------- .../__tests__/CryptoTransaction.spec.tsx | 9 +- .../TransactionStatusError.tsx | 12 +- .../TransactionStatusSuccess.tsx | 10 +- .../TransactionStatusSuccess.spec.tsx | 22 ++- .../modules/Transactions/Transactions.tsx | 19 ++- .../TransactionsCompleted.tsx | 7 +- .../__tests__/TransactionsCompleted.spec.tsx | 1 + .../TransactionsCompletedDemoResetBalance.tsx | 7 +- ...sactionsCompletedDemoResetBalance.spec.tsx | 1 + .../TransactionsCompletedRow.tsx | 38 ++++-- ...TransactionsCompletedRowAccountDetails.tsx | 2 +- ...ionsCompletedRowTransferAccountDetails.tsx | 6 +- ...ompletedRowTransferAccountDetails.spec.tsx | 12 +- .../components/index.ts | 4 + .../TransactionsNoDataState.tsx | 7 +- .../TransactionsPending.tsx | 7 +- .../__tests__/TransactionsPending.spec.tsx | 1 + .../TransactionsPendingRow.tsx | 85 +++++++----- .../__tests__/TransactionsPendingRow.spec.tsx | 3 - .../TransactionsPendingRowField.tsx | 27 ++-- .../Transactions/constants/constants.ts | 9 ++ .../modules/Transactions/constants/index.ts | 1 + .../components/TransferForm/TransferForm.tsx | 3 +- .../TransferFormAccountCard.tsx | 22 +-- .../TransferFormAccountSelection.tsx | 57 +++++--- .../TransferFormAccountSelection.spec.tsx | 1 + .../TransferFormAmountInput.tsx | 8 +- .../TransferFormDropdown.tsx | 20 ++- .../TransferMessages/TransferMessages.tsx | 11 +- .../__tests__/TransferMessages.spec.tsx | 10 +- .../TransferReceipt/TransferReceipt.tsx | 33 +++-- .../cashier/modules/Transfer/hooks/index.ts | 1 - .../hooks/useSortedTransferAccounts.ts | 7 +- .../__tests__/useTransferMessages.spec.tsx | 7 - ...ferMessages.ts => useTransferMessages.tsx} | 0 ....spec.ts => countLimitsMessageFn.spec.tsx} | 36 +++-- ...cumulativeAccountLimitsMessageFn.spec.tsx} | 118 ++++++++-------- ... => insufficientBalanceMessageFn.spec.tsx} | 22 +-- ...untLimitsBetweenWalletsMessageFn.spec.tsx} | 111 ++++++++++----- ...sMessageFn.ts => countLimitsMessageFn.tsx} | 44 +++--- ...s => cumulativeAccountLimitsMessageFn.tsx} | 99 +++++++++----- ...Fn.ts => insufficientBalanceMessageFn.tsx} | 13 +- ...eAccountLimitsBetweenWalletsMessageFn.tsx} | 85 ++++++++---- ...> transferFeesBetweenWalletsMessageFn.tsx} | 33 +++-- .../cashier/modules/Transfer/types/types.ts | 9 +- .../TransferNotAvailableProvider.tsx | 44 ++++-- 56 files changed, 879 insertions(+), 586 deletions(-) create mode 100644 packages/wallets/src/features/cashier/helpers/transaction-helpers.tsx create mode 100644 packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/index.ts create mode 100644 packages/wallets/src/features/cashier/modules/Transactions/constants/constants.ts create mode 100644 packages/wallets/src/features/cashier/modules/Transactions/constants/index.ts rename packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/{useTransferMessages.ts => useTransferMessages.tsx} (100%) rename packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/{countLimitsMessageFn.spec.ts => countLimitsMessageFn.spec.tsx} (80%) rename packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/{cumulativeAccountLimitsMessageFn.spec.ts => cumulativeAccountLimitsMessageFn.spec.tsx} (80%) rename packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/{insufficientBalanceMessageFn.spec.ts => insufficientBalanceMessageFn.spec.tsx} (81%) rename packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/{lifetimeAccountLimitsBetweenWalletsMessageFn.spec.ts => lifetimeAccountLimitsBetweenWalletsMessageFn.spec.tsx} (74%) rename packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/{countLimitsMessageFn.ts => countLimitsMessageFn.tsx} (55%) rename packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/{cumulativeAccountLimitsMessageFn.ts => cumulativeAccountLimitsMessageFn.tsx} (57%) rename packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/{insufficientBalanceMessageFn.ts => insufficientBalanceMessageFn.tsx} (62%) rename packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/{lifetimeAccountLimitsBetweenWalletsMessageFn.ts => lifetimeAccountLimitsBetweenWalletsMessageFn.tsx} (53%) rename packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/{transferFeesBetweenWalletsMessageFn.ts => transferFeesBetweenWalletsMessageFn.tsx} (57%) diff --git a/packages/api-v2/src/hooks/useCryptoTransactions.ts b/packages/api-v2/src/hooks/useCryptoTransactions.ts index 5bfd032d6801..f061c492ffb3 100644 --- a/packages/api-v2/src/hooks/useCryptoTransactions.ts +++ b/packages/api-v2/src/hooks/useCryptoTransactions.ts @@ -1,5 +1,4 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; -import { getTruncatedString } from '@deriv/utils'; import useSubscription from '../useSubscription'; import useActiveAccount from './useActiveAccount'; import useAuthorize from './useAuthorize'; @@ -23,83 +22,10 @@ type TModifiedTransaction = Omit { - switch (transaction.status_code) { - case 'CONFIRMED': - return 'Confirmed'; - case 'ERROR': - return 'NA'; - default: - return transaction.confirmations ?? 'Pending'; - } -}; - -const getStatusName = (status_code: TModifiedTransaction['status_code']) => { - switch (status_code) { - case 'CONFIRMED': - case 'SENT': - return 'Successful'; - case 'ERROR': - case 'REJECTED': - case 'REVERTED': - return 'Unsuccessful'; - case 'PENDING': - case 'PERFORMING_BLOCKCHAIN_TXN': - case 'PROCESSING': - case 'REVERTING': - case 'VERIFIED': - return 'In process'; - case 'CANCELLED': - return 'Cancelled'; - case 'LOCKED': - return 'In review'; - default: - return ''; - } -}; - -const getStatusDescription = ( - transaction_type: TModifiedTransaction['transaction_type'], - status_code: TModifiedTransaction['status_code'] -) => { - switch (status_code) { - // deposit-specific: - case 'CONFIRMED': - return 'Your deposit is successful.'; - case 'PENDING': - return "We've received your request and are waiting for more blockchain confirmations."; - // withdrawal-specific: - case 'CANCELLED': - return "You've cancelled your withdrawal request."; - case 'LOCKED': - return "We're reviewing your withdrawal request. You may still cancel this transaction if you wish.\nOnce we start processing, you won't be able to cancel."; - case 'PERFORMING_BLOCKCHAIN_TXN': - return "We're sending your request to the blockchain."; - case 'PROCESSING': - return "We're awaiting confirmation from the blockchain."; - case 'REJECTED': - case 'REVERTED': - return "Your withdrawal is unsuccessful. We've sent you an email with more information."; - case 'REVERTING': - case 'VERIFIED': - return "We're processing your withdrawal."; - case 'SENT': - return 'Your withdrawal is successful.'; - // both: - case 'ERROR': - return `Your ${transaction_type} is unsuccessful due to an error on the blockchain. Please contact ${ - transaction_type === 'deposit' ? 'your crypto wallet service provider' : 'us via live chat' - } for more info.`; - default: - return ''; - } -}; - /** A custom hook that returns the list of pending crypto transactions for the current user. */ const useCryptoTransactions = () => { const { subscribe, data, ...rest } = useSubscription('cashier_payments'); const [transactions, setTransactions] = useState(); - const { data: { preferred_language }, } = useAuthorize(); @@ -146,29 +72,15 @@ const useCryptoTransactions = () => { return transactions.map(transaction => ({ ...transaction, - /** Description of a transaction status */ - description: getStatusDescription(transaction.transaction_type, transaction.status_code), /** Formatted amount */ formatted_amount: displayMoney(transaction.amount || 0, display_code, { fractional_digits, preferred_language, }), - /** Formatted transaction hash */ - formatted_transaction_hash: transaction.transaction_hash - ? getTruncatedString(transaction.transaction_hash, { type: 'middle' }) - : 'Pending', - /** Formatted address hash */ - formatted_address_hash: transaction.address_hash - ? getTruncatedString(transaction.address_hash, { type: 'middle' }) - : 'NA', - /** Formatted confirmations status */ - formatted_confirmations: getFormattedConfirmations(transaction), /** Determine if the transaction is a deposit or not. */ is_deposit: transaction.transaction_type === 'deposit', /** Determine if the transaction is a withdrawal or not. */ is_withdrawal: transaction.transaction_type === 'withdrawal', - /** Status name */ - status_name: getStatusName(transaction.status_code), })); }, [display_code, fractional_digits, preferred_language, transactions]); diff --git a/packages/wallets/src/components/AppCard/AppCard.tsx b/packages/wallets/src/components/AppCard/AppCard.tsx index 114788d2464e..aab11a9f3905 100644 --- a/packages/wallets/src/components/AppCard/AppCard.tsx +++ b/packages/wallets/src/components/AppCard/AppCard.tsx @@ -8,14 +8,14 @@ import './AppCard.scss'; type TProps = { activeWalletCurrency?: THooks.ActiveWalletAccount['currency']; - appName?: string; + appName?: JSX.Element | string; balance?: string; cardSize: Extract; device: 'desktop' | 'mobile'; isDemoWallet?: THooks.ActiveWalletAccount['is_virtual']; marketType?: React.ComponentProps['marketType']; platform?: React.ComponentProps['platform']; - walletName?: string; + walletName?: JSX.Element | string; }; const AppCard: React.FC = ({ diff --git a/packages/wallets/src/components/AppCardBadge/AppCardBadge.tsx b/packages/wallets/src/components/AppCardBadge/AppCardBadge.tsx index 9cab908dd43a..b0d648d1de63 100644 --- a/packages/wallets/src/components/AppCardBadge/AppCardBadge.tsx +++ b/packages/wallets/src/components/AppCardBadge/AppCardBadge.tsx @@ -1,7 +1,8 @@ import React from 'react'; import classNames from 'classnames'; +import { Localize } from '@deriv-com/translations'; +import { Text } from '@deriv-com/ui'; import { THooks } from '../../types'; -import { WalletText } from '../Base'; import './AppCardBadge.scss'; type TProps = { @@ -14,13 +15,13 @@ const AppCardBadge: React.FC = ({ isDemo }) => { 'wallets-app-card-badge--real': !isDemo, }); - const formattedLabel = isDemo ? 'Demo' : 'Real'; + const formattedLabel = isDemo ? : ; return (
    - + {formattedLabel} - +
    ); }; diff --git a/packages/wallets/src/components/Base/ATMAmountInput/ATMAmountInput.tsx b/packages/wallets/src/components/Base/ATMAmountInput/ATMAmountInput.tsx index 105bde76a912..45a66fe31608 100644 --- a/packages/wallets/src/components/Base/ATMAmountInput/ATMAmountInput.tsx +++ b/packages/wallets/src/components/Base/ATMAmountInput/ATMAmountInput.tsx @@ -1,8 +1,8 @@ import React, { useCallback, useEffect, useRef, useState } from 'react'; import classnames from 'classnames'; import unFormatLocaleString from '@deriv/utils/src/unFormatLocaleString'; +import { Text } from '@deriv-com/ui'; import useInputATMFormatter from '../../../hooks/useInputATMFormatter'; -import { WalletText } from '../..'; import './ATMAmountInput.scss'; type TProps = { @@ -63,9 +63,9 @@ const WalletTransferFormInputField: React.FC = ({ return (
    - {label} + {label}
    - + = ({ type='tel' value={formattedValue} /> - +
    ); diff --git a/packages/wallets/src/components/Timer/Timer.tsx b/packages/wallets/src/components/Timer/Timer.tsx index 9464b8e1a940..3114ed7498dd 100644 --- a/packages/wallets/src/components/Timer/Timer.tsx +++ b/packages/wallets/src/components/Timer/Timer.tsx @@ -1,6 +1,7 @@ import React, { useEffect } from 'react'; import { useCountdown } from 'usehooks-ts'; -import { WalletText } from '../Base'; +import { Localize } from '@deriv-com/translations'; +import { Text } from '@deriv-com/ui'; type TTimerProps = { countStart?: number; @@ -25,9 +26,9 @@ const Timer = ({ countStart = 60, intervalMs = 1000, onComplete }: TTimerProps) }, [count, onComplete, resetCountdown, startCountdown]); return ( - - {`${count}s`} - + + + ); }; diff --git a/packages/wallets/src/components/WalletsActionScreen/WalletsActionScreen.tsx b/packages/wallets/src/components/WalletsActionScreen/WalletsActionScreen.tsx index c629984c8cc3..da8453e8eea3 100644 --- a/packages/wallets/src/components/WalletsActionScreen/WalletsActionScreen.tsx +++ b/packages/wallets/src/components/WalletsActionScreen/WalletsActionScreen.tsx @@ -1,4 +1,4 @@ -import React, { ComponentProps, isValidElement, PropsWithChildren, ReactElement, ReactNode } from 'react'; +import React, { ComponentProps, PropsWithChildren, ReactElement, ReactNode } from 'react'; import { WalletButton, WalletButtonGroup } from '../Base'; import WalletText from '../Base/WalletText/WalletText'; import './WalletsActionScreen.scss'; @@ -38,13 +38,9 @@ const WalletsActionScreen: React.FC> = ({ {title} )} - {isValidElement(description) ? ( - description - ) : ( - - {description} - - )} + + {description} +
    {renderButtons?.()}
    diff --git a/packages/wallets/src/features/cashier/components/WalletActionModal/WalletActionModal.tsx b/packages/wallets/src/features/cashier/components/WalletActionModal/WalletActionModal.tsx index 184bb9681b70..edf8a50bb9c9 100644 --- a/packages/wallets/src/features/cashier/components/WalletActionModal/WalletActionModal.tsx +++ b/packages/wallets/src/features/cashier/components/WalletActionModal/WalletActionModal.tsx @@ -10,7 +10,7 @@ type TWalletActionModal = { onClick: VoidFunction; text: string; }[]; - description?: string; + description?: JSX.Element | string; hideCloseButton?: React.ComponentProps['hideCloseButton']; title: string; }; diff --git a/packages/wallets/src/features/cashier/helpers/transaction-helpers.tsx b/packages/wallets/src/features/cashier/helpers/transaction-helpers.tsx new file mode 100644 index 000000000000..6e99c560f6e9 --- /dev/null +++ b/packages/wallets/src/features/cashier/helpers/transaction-helpers.tsx @@ -0,0 +1,110 @@ +import React from 'react'; +import { useSubscription } from '@deriv/api-v2'; +import { Localize } from '@deriv-com/translations'; + +type TTransaction = NonNullable< + NonNullable>['data']>['cashier_payments'] +>['crypto'][number]; + +type TStatus = TTransaction['status_code']; + +type TDepositStatus = 'CONFIRMED' | 'ERROR' | 'PENDING'; + +type TWithdrawalStatus = Exclude; + +// Since BE sends the `status_code` for both `deposit` and `withdrawal` in the same field, +// Here we modify the BE type to make `status_code` type more specific to the `transaction_type` field. +type TModifiedTransaction = Omit & + ( + | { statusCode: TDepositStatus; transactionType: 'deposit' } + | { statusCode: TWithdrawalStatus; transactionType: 'withdrawal' } + ); + +export const getStatusName = (statusCode: TModifiedTransaction['statusCode']) => { + switch (statusCode) { + case 'CONFIRMED': + case 'SENT': + return ; + case 'ERROR': + case 'REJECTED': + case 'REVERTED': + return ; + case 'PENDING': + case 'PERFORMING_BLOCKCHAIN_TXN': + case 'PROCESSING': + case 'REVERTING': + case 'VERIFIED': + return ; + case 'CANCELLED': + return ; + case 'LOCKED': + return ; + default: + return ''; + } +}; + +export const getStatusDescription = ( + transactionType: TModifiedTransaction['transactionType'], + statusCode: TModifiedTransaction['statusCode'] +) => { + switch (statusCode) { + // deposit-specific: + case 'CONFIRMED': + return ; + case 'PENDING': + return ( + + ); + // withdrawal-specific: + case 'CANCELLED': + return ; + case 'LOCKED': + return ( + + ); + case 'PERFORMING_BLOCKCHAIN_TXN': + return ; + case 'PROCESSING': + return ; + case 'REJECTED': + case 'REVERTED': + return ( + + ); + case 'REVERTING': + case 'VERIFIED': + return ; + case 'SENT': + return ; + // both: + case 'ERROR': + return transactionType === 'deposit' ? ( + + ) : ( + + ); + default: + return ''; + } +}; + +export const getFormattedConfirmations = ( + confirmations: TModifiedTransaction['confirmations'], + statusCode: TModifiedTransaction['statusCode'] +) => { + switch (statusCode) { + case 'CONFIRMED': + return ; + case 'ERROR': + return ; + default: + return confirmations?.toString() ?? ; + } +}; diff --git a/packages/wallets/src/features/cashier/modules/TransactionStatus/TransactionStatus.tsx b/packages/wallets/src/features/cashier/modules/TransactionStatus/TransactionStatus.tsx index e3a02e1f7851..ec9087693951 100644 --- a/packages/wallets/src/features/cashier/modules/TransactionStatus/TransactionStatus.tsx +++ b/packages/wallets/src/features/cashier/modules/TransactionStatus/TransactionStatus.tsx @@ -1,8 +1,8 @@ import React, { useCallback, useEffect } from 'react'; import { useActiveWalletAccount, useCryptoTransactions } from '@deriv/api-v2'; import { LegacyWarningIcon } from '@deriv/quill-icons'; -import { Divider, Loader } from '@deriv-com/ui'; -import { WalletText } from '../../../../components/Base'; +import { Localize } from '@deriv-com/translations'; +import { Divider, Loader, Text } from '@deriv-com/ui'; import { THooks } from '../../../../types'; import { TransactionStatusError } from './components/TransactionStatusError'; import { TransactionStatusSuccess } from './components/TransactionStatusSuccess'; @@ -47,9 +47,9 @@ const TransactionStatus: React.FC = ({ transactionType }) => return (
    - - Transaction status - + + + {isError && }
    diff --git a/packages/wallets/src/features/cashier/modules/TransactionStatus/components/CryptoTransaction/CryptoTransaction.tsx b/packages/wallets/src/features/cashier/modules/TransactionStatus/components/CryptoTransaction/CryptoTransaction.tsx index 7ab32dc1a46e..5dbb0867611b 100644 --- a/packages/wallets/src/features/cashier/modules/TransactionStatus/components/CryptoTransaction/CryptoTransaction.tsx +++ b/packages/wallets/src/features/cashier/modules/TransactionStatus/components/CryptoTransaction/CryptoTransaction.tsx @@ -3,12 +3,14 @@ import classNames from 'classnames'; import moment from 'moment'; import { useCancelCryptoTransaction } from '@deriv/api-v2'; import { LegacyClose1pxIcon } from '@deriv/quill-icons'; -import { Button } from '@deriv-com/ui'; -import { WalletText } from '../../../../../../components/Base'; +import { getTruncatedString } from '@deriv/utils'; +import { Localize, useTranslations } from '@deriv-com/translations'; +import { Button, Text } from '@deriv-com/ui'; import { useModal } from '../../../../../../components/ModalProvider'; import useDevice from '../../../../../../hooks/useDevice'; import { THooks } from '../../../../../../types'; import { WalletActionModal } from '../../../../components/WalletActionModal'; +import { getFormattedConfirmations, getStatusName } from '../../../../helpers/transaction-helpers'; import './CryptoTransaction.scss'; type TCryptoTransaction = { @@ -26,6 +28,14 @@ const CryptoTransaction: React.FC = ({ }) => { const { hide, show } = useModal(); const { isMobile } = useDevice(); + const { localize } = useTranslations(); + const formattedTransactionHash = transaction.transaction_hash + ? getTruncatedString(transaction.transaction_hash, { type: 'middle' }) + : localize('Pending'); + const formattedAddressHash = transaction.address_hash + ? getTruncatedString(transaction.address_hash, { type: 'middle' }) + : localize('NA'); + const formattedConfirmations = getFormattedConfirmations(transaction.confirmations, transaction.status_code); const { mutate } = useCancelCryptoTransaction(); @@ -40,30 +50,34 @@ const CryptoTransaction: React.FC = ({ actionButtonsOptions={[ { onClick: hide, - text: "No, don't cancel", + text: localize("No, don't cancel"), }, { isPrimary: true, onClick: cancelTransaction, - text: 'Yes, cancel', + text: localize('Yes, cancel'), }, ]} - description='Are you sure you want to cancel this transaction?' - hideCloseButton={true} - title='Cancel transaction' + description={localize('Are you sure you want to cancel this transaction?')} + hideCloseButton + title={localize('Cancel transaction')} />, { defaultRootId: 'wallets_modal_root', } ); - }, [cancelTransaction, hide, show]); + }, [cancelTransaction, hide, localize, show]); return (
    - - {transaction.is_deposit ? `Deposit ${currency}` : `Withdrawal ${currency}`} - + + {transaction.is_deposit ? ( + + ) : ( + + )} +
    = ({ .replace('_', '-')}` )} /> - - {transaction.status_name} - + + {getStatusName(transaction.status_code)} + {!!transaction.is_valid_to_cancel && !isMobile && (
    - + {transaction.formatted_amount} - - + + {moment.unix(transaction.submit_date).utc().format('MMM D, YYYY')} - +
    {transaction?.transaction_fee && ( - - Transaction fee: {Number(transaction.transaction_fee).toFixed(currencyDisplayFraction)} {currency} - + + + )} - - Address:{' '} - - {transaction.formatted_address_hash} - - - - Transaction hash:{' '} - - {transaction.formatted_transaction_hash} - - + + , + ]} + i18n_default_text='Address: <0>{{address}}' + values={{ address: formattedAddressHash }} + /> + + + , + ]} + i18n_default_text='Transaction hash: <0>{{hash}}' + values={{ hash: formattedTransactionHash }} + /> + {transaction.is_deposit && (
    - - Confirmations:{' '} - - {transaction.formatted_confirmations} - - + + ]} + i18n_default_text='Confirmations: <0>{{confirmations}}' + values={{ confirmations: formattedConfirmations }} + /> +
    )} {!!transaction.is_valid_to_cancel && isMobile && ( @@ -142,7 +171,7 @@ const CryptoTransaction: React.FC = ({ size='sm' variant='outlined' > - Cancel transaction +
    )} diff --git a/packages/wallets/src/features/cashier/modules/TransactionStatus/components/CryptoTransaction/__tests__/CryptoTransaction.spec.tsx b/packages/wallets/src/features/cashier/modules/TransactionStatus/components/CryptoTransaction/__tests__/CryptoTransaction.spec.tsx index 03cdfda9d1ce..b8580ee088a8 100644 --- a/packages/wallets/src/features/cashier/modules/TransactionStatus/components/CryptoTransaction/__tests__/CryptoTransaction.spec.tsx +++ b/packages/wallets/src/features/cashier/modules/TransactionStatus/components/CryptoTransaction/__tests__/CryptoTransaction.spec.tsx @@ -30,10 +30,7 @@ const mockTransaction = { address_url: '', amount: 0.0002, description: '', - formatted_address_hash: '', formatted_amount: '', - formatted_confirmations: 'Pending', - formatted_transaction_hash: 'Pending', id: '', is_deposit: false, is_valid_to_cancel: 1 as const, @@ -70,10 +67,7 @@ describe('CryptoTransaction', () => { address_url: '', amount: 0.0002, description: '', - formatted_address_hash: '', formatted_amount: '', - formatted_confirmations: 'Pending', - formatted_transaction_hash: 'Pending', id: '', is_deposit: true, is_valid_to_cancel: 1 as const, @@ -82,6 +76,7 @@ describe('CryptoTransaction', () => { status_message: '', status_name: '', submit_date: 123456, + transaction_hash: '', transaction_type: 'withdrawal' as const, }; (useCancelCryptoTransaction as jest.Mock).mockReturnValue({ mutate: jest.fn() }); @@ -94,7 +89,7 @@ describe('CryptoTransaction', () => { expect(screen.getByText('Deposit BTC')).toBeInTheDocument(); expect(screen.getByText(/Confirmations/)).toBeInTheDocument(); - expect(screen.getAllByText(/Pending/)[1]).toBeInTheDocument(); + expect(screen.getByText(/Pending/)).toBeInTheDocument(); }); it('should open modal when cancel button is clicked', async () => { diff --git a/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusError/TransactionStatusError.tsx b/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusError/TransactionStatusError.tsx index 044f32fe8be2..08e2aa845bb8 100644 --- a/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusError/TransactionStatusError.tsx +++ b/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusError/TransactionStatusError.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Button, Divider } from '@deriv-com/ui'; -import { WalletText } from '../../../../../../components/Base'; +import { Localize } from '@deriv-com/translations'; +import { Button, Divider, Text } from '@deriv-com/ui'; type TTransactionStatusError = { refresh: VoidFunction; @@ -8,12 +8,12 @@ type TTransactionStatusError = { const TransactionStatusError: React.FC = ({ refresh }) => ( - - Unfortunately, we cannot retrieve the information at this time. - + + + ); diff --git a/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusSuccess/TransactionStatusSuccess.tsx b/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusSuccess/TransactionStatusSuccess.tsx index 5c0f12544868..7577b22eafc2 100644 --- a/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusSuccess/TransactionStatusSuccess.tsx +++ b/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusSuccess/TransactionStatusSuccess.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { useHistory } from 'react-router-dom'; -import { Button, Divider } from '@deriv-com/ui'; -import { WalletText } from '../../../../../../components/Base'; +import { Localize } from '@deriv-com/translations'; +import { Button, Divider, Text } from '@deriv-com/ui'; import { THooks } from '../../../../../../types'; import { CryptoTransaction } from '../CryptoTransaction'; @@ -55,13 +55,15 @@ const TransactionStatusSuccess: React.FC = ({ transac size='sm' variant='outlined' > - View more + )} ) : ( - No recent transactions. + + + )} diff --git a/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusSuccess/__tests__/TransactionStatusSuccess.spec.tsx b/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusSuccess/__tests__/TransactionStatusSuccess.spec.tsx index 77cb510f4b8e..49b35d08b96a 100644 --- a/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusSuccess/__tests__/TransactionStatusSuccess.spec.tsx +++ b/packages/wallets/src/features/cashier/modules/TransactionStatus/components/TransactionStatusSuccess/__tests__/TransactionStatusSuccess.spec.tsx @@ -17,10 +17,7 @@ const mockTransactions = [ address_url: '', amount: 0.0001, description: '', - formatted_address_hash: '', formatted_amount: '0.00010000 BTC', - formatted_confirmations: '', - formatted_transaction_hash: '', id: '', is_deposit: false, is_valid_to_cancel: 1 as const, @@ -29,6 +26,7 @@ const mockTransactions = [ status_message: '', status_name: '', submit_date: 123456, + transaction_hash: '', transaction_type: 'withdrawal' as const, }, ]; @@ -104,7 +102,7 @@ describe('TransactionStatusSuccess', () => { jest.clearAllMocks(); }); - it('should render winthdrawal info for withdrawal transactions', () => { + it('should render withdrawal info for withdrawal transactions', () => { render( @@ -119,7 +117,7 @@ describe('TransactionStatusSuccess', () => { ); - expect(screen.getByText('Withdrawal')).toBeInTheDocument(); + expect(screen.getByText(/Withdrawal/)).toBeInTheDocument(); expect(screen.getByText('0.00010000 BTC')).toBeInTheDocument(); expect(screen.queryByText('No recent transactions.')).not.toBeInTheDocument(); expect(screen.queryByText('View more')).not.toBeInTheDocument(); @@ -132,10 +130,7 @@ describe('TransactionStatusSuccess', () => { address_url: '', amount: 0.0001, description: '', - formatted_address_hash: '', formatted_amount: '0.00010000 BTC', - formatted_confirmations: '', - formatted_transaction_hash: '', id: '', is_deposit: true, is_valid_to_cancel: 1 as const, @@ -144,6 +139,7 @@ describe('TransactionStatusSuccess', () => { status_message: '', status_name: '', submit_date: 123456, + transaction_hash: '', transaction_type: 'withdrawal' as const, }, ]; @@ -162,7 +158,7 @@ describe('TransactionStatusSuccess', () => { ); - expect(screen.getByText('Deposit')).toBeInTheDocument(); + expect(screen.getByText(/Deposit/)).toBeInTheDocument(); expect(screen.getByText('0.00010000 BTC')).toBeInTheDocument(); expect(screen.queryByText('No recent transactions.')).not.toBeInTheDocument(); expect(screen.queryByText('View more')).not.toBeInTheDocument(); @@ -180,7 +176,7 @@ describe('TransactionStatusSuccess', () => { ); expect(screen.getByText('No recent transactions.')).toBeInTheDocument(); - expect(screen.queryByText('Deposit')).not.toBeInTheDocument(); + expect(screen.queryByText(/Deposit/)).not.toBeInTheDocument(); expect(screen.queryByText('Withdrawal')).not.toBeInTheDocument(); expect(screen.queryByText('View more')).not.toBeInTheDocument(); }); @@ -195,10 +191,7 @@ describe('TransactionStatusSuccess', () => { address_url: '', amount: 0.0001, description: '', - formatted_address_hash: '', formatted_amount: '', - formatted_confirmations: '', - formatted_transaction_hash: '', id: `transaction_${i}`, is_deposit: false, is_valid_to_cancel: 1 as const, @@ -207,6 +200,7 @@ describe('TransactionStatusSuccess', () => { status_message: '', status_name: '', submit_date: 123456, + transaction_hash: '', transaction_type: 'withdrawal' as const, }; @@ -228,7 +222,7 @@ describe('TransactionStatusSuccess', () => { ); expect(screen.queryByText('No recent transactions.')).not.toBeInTheDocument(); - expect(screen.getAllByText('Withdrawal')[0]).toBeInTheDocument(); + expect(screen.getAllByText(/Withdrawal/)[0]).toBeInTheDocument(); expect(screen.getAllByText('0.00010000 BTC')[0]).toBeInTheDocument(); expect(screen.getByText('View more')).toBeInTheDocument(); diff --git a/packages/wallets/src/features/cashier/modules/Transactions/Transactions.tsx b/packages/wallets/src/features/cashier/modules/Transactions/Transactions.tsx index 0dd115074d65..8edb438cb0e3 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/Transactions.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/Transactions.tsx @@ -3,10 +3,12 @@ import classNames from 'classnames'; import { useHistory } from 'react-router-dom'; import { useActiveWalletAccount, useCurrencyConfig } from '@deriv/api-v2'; import { LegacyFilter1pxIcon } from '@deriv/quill-icons'; -import { Dropdown } from '@deriv-com/ui'; -import { ToggleSwitch, WalletText } from '../../../../components'; +import { Localize, useTranslations } from '@deriv-com/translations'; +import { Dropdown, Text } from '@deriv-com/ui'; +import { ToggleSwitch } from '../../../../components'; import useDevice from '../../../../hooks/useDevice'; import { TransactionsCompleted, TransactionsCompletedDemoResetBalance, TransactionsPending } from './components'; +import { getTransactionLabels } from './constants'; import './Transactions.scss'; type TTransactionsPendingFilter = React.ComponentProps['filter']; @@ -31,6 +33,8 @@ const filtersMapper: Record> = { const Transactions = () => { const { data: wallet } = useActiveWalletAccount(); + const { localize } = useTranslations(); + const { isLoading } = useCurrencyConfig(); const { isMobile } = useDevice(); @@ -52,8 +56,9 @@ const Transactions = () => { .map(key => ({ text: key === 'deposit' && wallet?.is_virtual - ? 'Reset balance' - : key.replace(/^\w/, c => c.toUpperCase()), + ? getTransactionLabels().reset_balance + : //@ts-expect-error we only need partial filter values + getTransactionLabels()[key], value: key, })), [isPendingActive, wallet?.is_virtual] @@ -83,7 +88,9 @@ const Transactions = () => {
    {wallet?.is_crypto && (
    - Pending Transactions + + + setIsPendingActive(!isPendingActive)} value={isPendingActive} />
    )} @@ -92,7 +99,7 @@ const Transactions = () => { data-testid='dt_wallets_transactions_dropdown' icon={} isFullWidth - label='Filter' + label={localize('Filter')} list={filterOptionsList} name='wallets-transactions__dropdown' onSelect={value => { diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompleted/TransactionsCompleted.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompleted/TransactionsCompleted.tsx index 29300313bc80..377936312506 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompleted/TransactionsCompleted.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompleted/TransactionsCompleted.tsx @@ -2,8 +2,7 @@ import React, { useCallback, useEffect } from 'react'; import moment from 'moment'; import { useActiveWalletAccount, useAllAccountsList, useInfiniteTransactions } from '@deriv/api-v2'; import { TSocketRequestPayload } from '@deriv/api-v2/types'; -import { Loader } from '@deriv-com/ui'; -import { WalletText } from '../../../../../../components/Base'; +import { Loader, Text } from '@deriv-com/ui'; import { useCashierScroll } from '../../../../context'; import { TransactionsCompletedRow } from '../TransactionsCompletedRow'; import { TransactionsNoDataState } from '../TransactionsNoDataState'; @@ -70,10 +69,10 @@ const TransactionsCompleted: React.FC = ({ filter }) => { groupBy={['date']} rowGroupRender={transaction => (
    - + {transaction.transaction_time && moment.unix(transaction.transaction_time).format('DD MMM YYYY')} - +
    )} rowRender={transaction => ( diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompleted/__tests__/TransactionsCompleted.spec.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompleted/__tests__/TransactionsCompleted.spec.tsx index ea8d18cab3fa..8fe953928676 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompleted/__tests__/TransactionsCompleted.spec.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompleted/__tests__/TransactionsCompleted.spec.tsx @@ -14,6 +14,7 @@ jest.mock('@deriv/api-v2', () => ({ })); jest.mock('@deriv-com/ui', () => ({ + ...jest.requireActual('@deriv-com/ui'), Loader: jest.fn(() =>
    Loading...
    ), })); diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedDemoResetBalance/TransactionsCompletedDemoResetBalance.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedDemoResetBalance/TransactionsCompletedDemoResetBalance.tsx index ff403adcb55d..897b1898c77f 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedDemoResetBalance/TransactionsCompletedDemoResetBalance.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedDemoResetBalance/TransactionsCompletedDemoResetBalance.tsx @@ -1,8 +1,7 @@ import React, { useEffect } from 'react'; import moment from 'moment'; import { useActiveWalletAccount, useAllAccountsList, useTransactions } from '@deriv/api-v2'; -import { Loader } from '@deriv-com/ui'; -import { WalletText } from '../../../../../../components/Base'; +import { Loader, Text } from '@deriv-com/ui'; import { TransactionsCompletedRow } from '../TransactionsCompletedRow'; import { TransactionsNoDataState } from '../TransactionsNoDataState'; import { TransactionsTable } from '../TransactionsTable'; @@ -51,10 +50,10 @@ const TransactionsCompletedDemoResetBalance: React.FC = () => { groupBy={['date']} rowGroupRender={transaction => (
    - + {transaction.transaction_time && moment.unix(transaction.transaction_time).format('DD MMM YYYY')} - +
    )} rowRender={transaction => ( diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedDemoResetBalance/__tests__/TransactionsCompletedDemoResetBalance.spec.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedDemoResetBalance/__tests__/TransactionsCompletedDemoResetBalance.spec.tsx index 8d837881c01c..783b67b21a30 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedDemoResetBalance/__tests__/TransactionsCompletedDemoResetBalance.spec.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedDemoResetBalance/__tests__/TransactionsCompletedDemoResetBalance.spec.tsx @@ -15,6 +15,7 @@ jest.mock('@deriv/api-v2', () => ({ })); jest.mock('@deriv-com/ui', () => ({ + ...jest.requireActual('@deriv-com/ui'), Loader: jest.fn(() =>
    Loading...
    ), })); diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/TransactionsCompletedRow.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/TransactionsCompletedRow.tsx index 5c0023bec26c..6dd80fe62c2d 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/TransactionsCompletedRow.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/TransactionsCompletedRow.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { Divider } from '@deriv-com/ui'; -import { WalletText } from '../../../../../../components/Base'; +import { Localize, useTranslations } from '@deriv-com/translations'; +import { Divider, Text } from '@deriv-com/ui'; import { THooks } from '../../../../../../types'; -import { TransactionsCompletedRowAccountDetails } from './components/TransactionsCompletedRowAccountDetails'; -import { TransactionsCompletedRowTransferAccountDetails } from './components/TransactionsCompletedRowTransferAccountDetails'; +import { getTransactionLabels } from '../../constants'; +import { TransactionsCompletedRowAccountDetails, TransactionsCompletedRowTransferAccountDetails } from './components'; import './TransactionsCompletedRow.scss'; type TProps = { @@ -13,14 +13,19 @@ type TProps = { }; const TransactionsCompletedRow: React.FC = ({ accounts, transaction, wallet }) => { + const { localize } = useTranslations(); + if (!transaction.action_type || !transaction.amount) return null; const displayCurrency = wallet?.currency_config?.display_code || 'USD'; const displayWalletName = `${displayCurrency} Wallet`; - const displayActionType = + const displayNonTransferActionType = wallet.is_virtual && ['deposit', 'withdrawal'].includes(transaction.action_type) - ? 'Reset balance' - : transaction.action_type.replace(/^\w/, c => c.toUpperCase()); + ? getTransactionLabels().reset_balance + : //@ts-expect-error we only need partial action types + getTransactionLabels()[transaction.action_type]; + const displayTransferActionType = + transaction.from?.loginid === wallet?.loginid ? localize('Transfer to') : localize('Transfer from'); return ( @@ -32,13 +37,13 @@ const TransactionsCompletedRow: React.FC = ({ accounts, transaction, wal actionType={transaction.action_type} currency={wallet?.currency ?? 'USD'} displayAccountName={displayWalletName} - displayActionType={displayActionType} + displayActionType={displayNonTransferActionType} isDemo={Boolean(wallet?.is_virtual)} /> ) : ( loginid !== wallet?.loginid @@ -47,13 +52,18 @@ const TransactionsCompletedRow: React.FC = ({ accounts, transaction, wal /> )}
    - 0 ? 'success' : 'error'} size='xs' weight='bold'> + 0 ? 'success' : 'error'} size='xs' weight='bold'> {transaction.amount && transaction.amount > 0 ? '+' : ''} {transaction.display_amount} - - - Balance: {transaction.display_balance_after} - + + + +
    diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowAccountDetails/TransactionsCompletedRowAccountDetails.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowAccountDetails/TransactionsCompletedRowAccountDetails.tsx index a40aff3ce171..e73ac4d278e6 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowAccountDetails/TransactionsCompletedRowAccountDetails.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowAccountDetails/TransactionsCompletedRowAccountDetails.tsx @@ -9,7 +9,7 @@ type TProps = { accountType: string; actionType: NonNullable<(THooks.InfiniteTransactions | THooks.Transactions)['action_type']>; currency: string; - displayAccountName: string; + displayAccountName: JSX.Element | string; displayActionType: string; isDemo: boolean; isInterWallet?: boolean; diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowTransferAccountDetails/TransactionsCompletedRowTransferAccountDetails.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowTransferAccountDetails/TransactionsCompletedRowTransferAccountDetails.tsx index 5d98cea24278..f51c0edc6cb5 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowTransferAccountDetails/TransactionsCompletedRowTransferAccountDetails.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowTransferAccountDetails/TransactionsCompletedRowTransferAccountDetails.tsx @@ -6,11 +6,11 @@ import { TransactionsCompletedRowAccountDetails } from '../TransactionsCompleted type TProps = { accounts: THooks.AllAccountsList; - direction: 'from' | 'to'; + displayActionType: string; loginid: string; }; -const TransactionsCompletedRowTransferAccountDetails: React.FC = ({ accounts, direction, loginid }) => { +const TransactionsCompletedRowTransferAccountDetails: React.FC = ({ accounts, displayActionType, loginid }) => { const { data: activeWallet } = useActiveWalletAccount(); const wallet = accounts.wallets?.find(account => account.loginid === loginid); @@ -39,7 +39,7 @@ const TransactionsCompletedRowTransferAccountDetails: React.FC = ({ acco actionType='transfer' currency={transferAccount.currency ?? 'USD'} displayAccountName={displayAccountName ?? ''} - displayActionType={`Transfer ${direction}`} + displayActionType={displayActionType} isDemo={Boolean(transferAccount.is_virtual)} isInterWallet={transferAccount === wallet} mt5Group={transferAccount === mt5Account ? mt5Account.group : undefined} diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowTransferAccountDetails/__tests__/TransactionsCompletedRowTransferAccountDetails.spec.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowTransferAccountDetails/__tests__/TransactionsCompletedRowTransferAccountDetails.spec.tsx index 97aa837e244f..9ea6f32ec9e9 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowTransferAccountDetails/__tests__/TransactionsCompletedRowTransferAccountDetails.spec.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/TransactionsCompletedRowTransferAccountDetails/__tests__/TransactionsCompletedRowTransferAccountDetails.spec.tsx @@ -89,7 +89,7 @@ describe('TransactionsCompletedRowTransferAccountDetails', () => { render( ); @@ -107,7 +107,7 @@ describe('TransactionsCompletedRowTransferAccountDetails', () => { render( ); @@ -125,7 +125,7 @@ describe('TransactionsCompletedRowTransferAccountDetails', () => { render( ); @@ -143,7 +143,7 @@ describe('TransactionsCompletedRowTransferAccountDetails', () => { render( ); @@ -162,7 +162,7 @@ describe('TransactionsCompletedRowTransferAccountDetails', () => { render( ); @@ -180,7 +180,7 @@ describe('TransactionsCompletedRowTransferAccountDetails', () => { const { container } = render( ); diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/index.ts b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/index.ts new file mode 100644 index 000000000000..2a42d04fab3a --- /dev/null +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsCompletedRow/components/index.ts @@ -0,0 +1,4 @@ +import { TransactionsCompletedRowAccountDetails } from './TransactionsCompletedRowAccountDetails'; +import { TransactionsCompletedRowTransferAccountDetails } from './TransactionsCompletedRowTransferAccountDetails'; + +export { TransactionsCompletedRowAccountDetails, TransactionsCompletedRowTransferAccountDetails }; diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsNoDataState/TransactionsNoDataState.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsNoDataState/TransactionsNoDataState.tsx index b5b1a1f3de12..12c0d47ee839 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsNoDataState/TransactionsNoDataState.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsNoDataState/TransactionsNoDataState.tsx @@ -1,13 +1,16 @@ import React from 'react'; +import { useTranslations } from '@deriv-com/translations'; +import { WalletsActionScreen } from '../../../../../../components'; //TODO: replace with quill-icons import NoRecentTransactions from '../../../../../../public/images/no-recent-transactions.svg'; -import { WalletsActionScreen } from '../../../../../../components'; import './TransactionsNoDataState.scss'; const TransactionsNoDataState = () => { + const { localize } = useTranslations(); + return (
    - } title={'No transactions found'} /> + } title={localize('No transactions found')} />
    ); }; diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPending/TransactionsPending.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPending/TransactionsPending.tsx index ba8a4670d640..21c95c0dbfc6 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPending/TransactionsPending.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPending/TransactionsPending.tsx @@ -1,8 +1,7 @@ import React, { useEffect } from 'react'; import moment from 'moment'; import { useCryptoTransactions } from '@deriv/api-v2'; -import { Loader } from '@deriv-com/ui'; -import { WalletText } from '../../../../../../components/Base'; +import { Loader, Text } from '@deriv-com/ui'; import { TransactionsNoDataState } from '../TransactionsNoDataState'; import { TransactionsPendingRow } from '../TransactionsPendingRow'; import { TransactionsTable } from '../TransactionsTable'; @@ -42,9 +41,9 @@ const TransactionsPending: React.FC = ({ filter = 'all' }) => { groupBy={['date']} rowGroupRender={transaction => (
    - + {transaction.submit_date && moment.unix(transaction.submit_date).format('DD MMM YYYY')} - +
    )} rowRender={transaction => } diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPending/__tests__/TransactionsPending.spec.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPending/__tests__/TransactionsPending.spec.tsx index 49a9911c9152..92d2738e15d1 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPending/__tests__/TransactionsPending.spec.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPending/__tests__/TransactionsPending.spec.tsx @@ -19,6 +19,7 @@ jest.mock('@deriv/api-v2', () => ({ })); jest.mock('@deriv-com/ui', () => ({ + ...jest.requireActual('@deriv-com/ui'), Loader: jest.fn(() =>
    Loading...
    ), })); diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/TransactionsPendingRow.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/TransactionsPendingRow.tsx index a0db1d26f8f9..0dd484fd9e13 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/TransactionsPendingRow.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/TransactionsPendingRow.tsx @@ -3,13 +3,20 @@ import classNames from 'classnames'; import moment from 'moment'; import { useActiveWalletAccount, useCancelCryptoTransaction } from '@deriv/api-v2'; import { LegacyClose1pxIcon } from '@deriv/quill-icons'; -import { Button, Divider, Tooltip } from '@deriv-com/ui'; -import { WalletText } from '../../../../../../components/Base'; +import { getTruncatedString } from '@deriv/utils'; +import { Localize, useTranslations } from '@deriv-com/translations'; +import { Button, Divider, Text, Tooltip } from '@deriv-com/ui'; import { useModal } from '../../../../../../components/ModalProvider'; import { WalletCurrencyCard } from '../../../../../../components/WalletCurrencyCard'; import useDevice from '../../../../../../hooks/useDevice'; import { THooks } from '../../../../../../types'; import { WalletActionModal } from '../../../../components/WalletActionModal'; +import { + getFormattedConfirmations, + getStatusDescription, + getStatusName, +} from '../../../../helpers/transaction-helpers'; +import { getTransactionLabels } from '../../constants'; import { TransactionsPendingRowField } from './components/TransactionsPendingRowField'; import './TransactionsPendingRow.scss'; @@ -20,8 +27,17 @@ type TProps = { const TransactionsPendingRow: React.FC = ({ transaction }) => { const { data } = useActiveWalletAccount(); const { isMobile } = useDevice(); + const { localize } = useTranslations(); const displayCode = useMemo(() => data?.currency_config?.display_code || 'USD', [data]); const modal = useModal(); + const formattedTransactionHash = transaction.transaction_hash + ? getTruncatedString(transaction.transaction_hash, { type: 'middle' }) + : localize('Pending'); + const formattedAddressHash = transaction.address_hash + ? getTruncatedString(transaction.address_hash, { type: 'middle' }) + : localize('NA'); + const formattedConfirmations = getFormattedConfirmations(transaction.confirmations, transaction.status_code); + const statusDescription = getStatusDescription(transaction.transaction_type, transaction.status_code); const { mutate } = useCancelCryptoTransaction(); @@ -36,21 +52,21 @@ const TransactionsPendingRow: React.FC = ({ transaction }) => { actionButtonsOptions={[ { onClick: modal.hide, - text: "No, don't cancel", + text: localize("No, don't cancel"), }, { isPrimary: true, onClick: cancelTransaction, - text: 'Yes, cancel', + text: localize('Yes, cancel'), }, ]} - description='Are you sure you want to cancel this transaction?' + description={localize('Are you sure you want to cancel this transaction?')} hideCloseButton - title='Cancel transaction' + title={localize('Cancel transaction')} />, { defaultRootId: 'wallets_modal_root' } ); - }, [cancelTransaction, modal]); + }, [cancelTransaction, localize, modal]); const onMobileStatusClick = useCallback(() => { if (isMobile) { @@ -60,17 +76,17 @@ const TransactionsPendingRow: React.FC = ({ transaction }) => { { isPrimary: true, onClick: modal.hide, - text: 'Ok', + text: localize('Ok'), }, ]} - description={transaction.description} + description={statusDescription} hideCloseButton - title='Transaction details' + title={localize('Transaction details')} />, { defaultRootId: 'wallets_modal_root' } ); } - }, [isMobile, modal, transaction.description]); + }, [isMobile, localize, modal, statusDescription]); return ( @@ -79,13 +95,12 @@ const TransactionsPendingRow: React.FC = ({ transaction }) => {
    - - {transaction.transaction_type.charAt(0).toUpperCase() + - transaction.transaction_type.slice(1)} - - + + {getTransactionLabels()[transaction.transaction_type]} + + {displayCode} Wallet - +
    @@ -95,40 +110,40 @@ const TransactionsPendingRow: React.FC = ({ transaction }) => { transaction.transaction_url ? { link: transaction.transaction_url, - text: 'View transaction hash on Blockchain', + text: localize('View transaction hash on Blockchain'), tooltipAlignment: 'right', } : undefined } - name='Transaction hash' - value={transaction.formatted_transaction_hash} + name={localize('Transaction hash')} + value={formattedTransactionHash} /> {isMobile && ( = ({ transaction }) => { )} = ({ transaction }) => { /> {!isMobile && (
    - = ({ transaction }) => { > {transaction.is_deposit ? '+' : '-'} {transaction.formatted_amount} - +
    )}
    @@ -170,7 +185,7 @@ const TransactionsPendingRow: React.FC = ({ transaction }) => { data-testid='dt_transaction_status_button' hideTooltip={isMobile} onClick={onMobileStatusClick} - tooltipContent={transaction.description} + tooltipContent={statusDescription} tooltipPosition='left' >
    = ({ transaction }) => { .replace('_', '-')}` )} /> - - {transaction.status_name} - + + {getStatusName(transaction.status_code)} + {!isMobile && !!transaction.is_valid_to_cancel && ( )}
    diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/__tests__/TransactionsPendingRow.spec.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/__tests__/TransactionsPendingRow.spec.tsx index 4256a58ad2ab..f3fc3372ead1 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/__tests__/TransactionsPendingRow.spec.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/__tests__/TransactionsPendingRow.spec.tsx @@ -37,10 +37,7 @@ const mockWithdrawal = { address_url: '', amount: 0.0002, description: '', - formatted_address_hash: '', formatted_amount: '', - formatted_confirmations: 'Pending', - formatted_transaction_hash: 'Pending', id: '0123', is_deposit: false, is_valid_to_cancel: 1 as const, diff --git a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/components/TransactionsPendingRowField/TransactionsPendingRowField.tsx b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/components/TransactionsPendingRowField/TransactionsPendingRowField.tsx index dd65528edd10..5f282beb4485 100644 --- a/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/components/TransactionsPendingRowField/TransactionsPendingRowField.tsx +++ b/packages/wallets/src/features/cashier/modules/Transactions/components/TransactionsPendingRow/components/TransactionsPendingRowField/TransactionsPendingRowField.tsx @@ -1,7 +1,7 @@ import React, { useCallback } from 'react'; import classNames from 'classnames'; -import { Tooltip } from '@deriv-com/ui'; -import { WalletText } from '../../../../../../../../components/Base'; +import { useTranslations } from '@deriv-com/translations'; +import { Text, Tooltip } from '@deriv-com/ui'; import { useModal } from '../../../../../../../../components/ModalProvider'; import useDevice from '../../../../../../../../hooks/useDevice'; import { WalletActionModal } from '../../../../../../components/WalletActionModal'; @@ -15,12 +15,13 @@ type TProps = { tooltipAlignment?: React.ComponentProps['tooltipPosition']; }; name: string; - value: string; - valueTextProps?: Omit, 'children'>; + value: JSX.Element | string; + valueTextProps?: Omit, 'children'>; }; const TransactionsPendingRowField: React.FC = ({ className, hint, name, value, valueTextProps }) => { const { isMobile } = useDevice(); + const { localize } = useTranslations(); const { show } = useModal(); const onValueClick = useCallback(() => { @@ -32,23 +33,23 @@ const TransactionsPendingRowField: React.FC = ({ className, hint, name, { isPrimary: true, onClick: () => window.open(hint?.link), - text: 'View', + text: localize('View'), }, ] : [] } description={hint?.text} - title='Transaction details' + title={localize('Transaction details')} />, { defaultRootId: 'wallets_modal_root' } ); - }, [hint, show]); + }, [hint?.link, hint?.text, localize, show]); return (
    - + {name} - + {hint ? ( = ({ className, hint, name, tooltipContent={hint.text} tooltipPosition={hint.tooltipAlignment} > - + {isMobile ? (
    ); diff --git a/packages/wallets/src/features/cashier/modules/Transactions/constants/constants.ts b/packages/wallets/src/features/cashier/modules/Transactions/constants/constants.ts new file mode 100644 index 000000000000..09a31f8baeba --- /dev/null +++ b/packages/wallets/src/features/cashier/modules/Transactions/constants/constants.ts @@ -0,0 +1,9 @@ +import { localize } from '@deriv-com/translations'; + +export const getTransactionLabels = () => ({ + all: localize('All'), + deposit: localize('Deposit'), + reset_balance: localize('Reset balance'), + transfer: localize('Transfer'), + withdrawal: localize('Withdrawal'), +}); diff --git a/packages/wallets/src/features/cashier/modules/Transactions/constants/index.ts b/packages/wallets/src/features/cashier/modules/Transactions/constants/index.ts new file mode 100644 index 000000000000..c94f80f843a1 --- /dev/null +++ b/packages/wallets/src/features/cashier/modules/Transactions/constants/index.ts @@ -0,0 +1 @@ +export * from './constants'; diff --git a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferForm/TransferForm.tsx b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferForm/TransferForm.tsx index f04a81ffc37d..6a148a8b3db4 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferForm/TransferForm.tsx +++ b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferForm/TransferForm.tsx @@ -1,5 +1,6 @@ import React, { useCallback, useRef } from 'react'; import { Formik } from 'formik'; +import { Localize } from '@deriv-com/translations'; import { Button, Loader } from '@deriv-com/ui'; import useDevice from '../../../../../../hooks/useDevice'; import { useTransfer } from '../../provider'; @@ -60,7 +61,7 @@ const TransferForm = () => { textSize={isMobile ? 'sm' : 'md'} type='submit' > - Transfer +
    diff --git a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormAccountCard/TransferFormAccountCard.tsx b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormAccountCard/TransferFormAccountCard.tsx index d711b320b278..ed2c6f985b69 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormAccountCard/TransferFormAccountCard.tsx +++ b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormAccountCard/TransferFormAccountCard.tsx @@ -1,11 +1,8 @@ import React from 'react'; import classNames from 'classnames'; -import { - WalletCurrencyCard, - WalletListCardBadge, - WalletMarketCurrencyIcon, - WalletText, -} from '../../../../../../components'; +import { Localize } from '@deriv-com/translations'; +import { Text } from '@deriv-com/ui'; +import { WalletCurrencyCard, WalletListCardBadge, WalletMarketCurrencyIcon } from '../../../../../../components'; import useDevice from '../../../../../../hooks/useDevice'; import { TPlatforms } from '../../../../../../types'; import type { TAccount } from '../../types'; @@ -50,10 +47,17 @@ const TransferFormAccountCard: React.FC = ({ account, type = 'modal' })
    - + {account?.accountName} - - Balance: {account?.displayBalance} + + + +
    {isModal && !!account?.demo_account && ( diff --git a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormAccountSelection/TransferFormAccountSelection.tsx b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormAccountSelection/TransferFormAccountSelection.tsx index 973d58fd6567..6d5629ac3ee9 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormAccountSelection/TransferFormAccountSelection.tsx +++ b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormAccountSelection/TransferFormAccountSelection.tsx @@ -1,8 +1,8 @@ import React, { useMemo } from 'react'; import classNames from 'classnames'; import { LegacyClose2pxIcon } from '@deriv/quill-icons'; -import { Divider } from '@deriv-com/ui'; -import { WalletText } from '../../../../../../components'; +import { Localize } from '@deriv-com/translations'; +import { Divider, Text } from '@deriv-com/ui'; import { useModal } from '../../../../../../components/ModalProvider'; import useDevice from '../../../../../../hooks/useDevice'; import type { TAccount, TAccountsList } from '../../types'; @@ -13,7 +13,8 @@ type TProps = { accountsList: TAccountsList; activeWallet: TAccount; fromAccount?: TAccount; - label: 'Transfer from' | 'Transfer to'; + isFromAccountDropdown: boolean; + label: string; onSelect: (value?: TAccount) => void; selectedAccount?: TAccount; toAccount?: TAccount; @@ -30,6 +31,7 @@ const TransferFormAccountSelection: React.FC = ({ accountsList, activeWallet, fromAccount, + isFromAccountDropdown, label, onSelect, selectedAccount, @@ -39,12 +41,26 @@ const TransferFormAccountSelection: React.FC = ({ const modal = useModal(); const transferToHint = useMemo(() => { - const isTransferToHintVisible = label === 'Transfer to' && toAccount?.loginid === activeWallet?.loginid; + const isTransferToHintVisible = !isFromAccountDropdown && toAccount?.loginid === activeWallet?.loginid; - return isTransferToHintVisible - ? `You can only transfers funds from the ${fromAccount?.accountName} to the linked ${activeWallet?.accountName}.` - : ''; - }, [activeWallet?.accountName, activeWallet?.loginid, fromAccount?.accountName, label, toAccount?.loginid]); + return isTransferToHintVisible ? ( + + ) : ( + '' + ); + }, [ + activeWallet?.accountName, + activeWallet?.loginid, + fromAccount?.accountName, + isFromAccountDropdown, + toAccount?.loginid, + ]); const isSingleAccountsGroup = useMemo( () => Object.values(accountsList).filter(accounts => accounts.length > 0).length === 1, @@ -55,9 +71,9 @@ const TransferFormAccountSelection: React.FC = ({
    - + {label} - +
    )}
    diff --git a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormDropdown/TransferFormDropdown.tsx b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormDropdown/TransferFormDropdown.tsx index 86b9ceff810b..65e1e37dc34e 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormDropdown/TransferFormDropdown.tsx +++ b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferFormDropdown/TransferFormDropdown.tsx @@ -2,7 +2,9 @@ import React, { RefObject, useCallback, useEffect, useMemo } from 'react'; import { useFormikContext } from 'formik'; import { useHistory } from 'react-router-dom'; import { LegacyChevronDown2pxIcon } from '@deriv/quill-icons'; -import { WalletListCardBadge, WalletText } from '../../../../../../components'; +import { Localize, useTranslations } from '@deriv-com/translations'; +import { Text } from '@deriv-com/ui'; +import { WalletListCardBadge } from '../../../../../../components'; import { useModal } from '../../../../../../components/ModalProvider'; import useDevice from '../../../../../../hooks/useDevice'; import { useTransfer } from '../../provider'; @@ -19,6 +21,7 @@ type TProps = { const TransferFormDropdown: React.FC = ({ fieldName, mobileAccountsListRef }) => { const { setValues, values } = useFormikContext(); const { accounts, activeWallet } = useTransfer(); + const { localize } = useTranslations(); const { fromAccount, toAccount } = values; const { isMobile } = useDevice(); const modal = useModal(); @@ -45,7 +48,7 @@ const TransferFormDropdown: React.FC = ({ fieldName, mobileAccountsListR const selectedAccount = isFromAccountDropdown ? fromAccount : toAccount; const accountsList = isFromAccountDropdown ? fromAccountList : toAccountList; - const label = isFromAccountDropdown ? 'Transfer from' : 'Transfer to'; + const label = isFromAccountDropdown ? localize('Transfer from') : localize('Transfer to'); const { location } = useHistory(); const toAccountLoginId = location.pathname === '/wallet/account-transfer' ? location.state?.toAccountLoginId : undefined; @@ -116,6 +119,7 @@ const TransferFormDropdown: React.FC = ({ fieldName, mobileAccountsListR accountsList={accountsList} activeWallet={activeWallet} fromAccount={fromAccount} + isFromAccountDropdown={isFromAccountDropdown} label={label} onSelect={handleSelect} selectedAccount={selectedAccount} @@ -130,7 +134,7 @@ const TransferFormDropdown: React.FC = ({ fieldName, mobileAccountsListR >
    - {label} + {label} {isMobile && }
    @@ -139,9 +143,13 @@ const TransferFormDropdown: React.FC = ({ fieldName, mobileAccountsListR ) : (
    - - Select a trading account{activeWallet?.demo_account === 0 ? ` or a Wallet` : ''} - + + {activeWallet?.demo_account === 0 ? ( + + ) : ( + + )} +
    )}
    diff --git a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferMessages/TransferMessages.tsx b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferMessages/TransferMessages.tsx index e5a6fe8e25d8..01c769af64b1 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferMessages/TransferMessages.tsx +++ b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferMessages/TransferMessages.tsx @@ -1,10 +1,9 @@ import React, { useEffect } from 'react'; import { useFormikContext } from 'formik'; import { Link } from 'react-router-dom'; -import { Localize } from '@deriv-com/translations'; import { Button } from '@deriv-com/ui'; import { FadedAnimatedList, WalletAlertMessage } from '../../../../../../components'; -import { useTransferMessages } from '../../hooks'; +import useTransferMessages from '../../hooks/useTransferMessages'; import { useTransfer } from '../../provider'; import { TInitialTransferFormValues } from '../../types'; import './TransferMessages.scss'; @@ -30,11 +29,9 @@ const TransferMessages: React.FC = () => { return ( - {messages.map(({ action, message: { text, values }, type }) => { - const message = ; - + {messages.map(({ action, message, type }, idx) => { return ( - + {action?.buttonLabel && action?.navigateTo && (
    diff --git a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferMessages/__tests__/TransferMessages.spec.tsx b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferMessages/__tests__/TransferMessages.spec.tsx index 939e137828db..23de602a75bd 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferMessages/__tests__/TransferMessages.spec.tsx +++ b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferMessages/__tests__/TransferMessages.spec.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useFormikContext } from 'formik'; import { BrowserRouter as Router } from 'react-router-dom'; import { render, screen } from '@testing-library/react'; -import { useTransferMessages } from '../../../hooks'; +import useTransferMessages from '../../../hooks/useTransferMessages'; import { useTransfer } from '../../../provider'; import TransferMessages from '../TransferMessages'; @@ -10,9 +10,7 @@ jest.mock('formik', () => ({ useFormikContext: jest.fn(), })); -jest.mock('../../../hooks', () => ({ - useTransferMessages: jest.fn(), -})); +jest.mock('../../../hooks/useTransferMessages', () => jest.fn()); jest.mock('../../../provider', () => ({ useTransfer: jest.fn(), @@ -40,12 +38,12 @@ describe('TransferMessages', () => { (useTransferMessages as jest.Mock).mockReturnValue([ { action: { buttonLabel: 'Action', navigateTo: '/action', shouldOpenInNewTab: true }, - message: { text: 'Error message', values: {} }, + message: 'Error message', type: 'error', }, { action: null, - message: { text: 'Info message', values: {} }, + message: 'Info message', type: 'info', }, ]); diff --git a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferReceipt/TransferReceipt.tsx b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferReceipt/TransferReceipt.tsx index c6b8dfd92f37..c3bf325b9c8b 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/components/TransferReceipt/TransferReceipt.tsx +++ b/packages/wallets/src/features/cashier/modules/Transfer/components/TransferReceipt/TransferReceipt.tsx @@ -1,8 +1,9 @@ import React from 'react'; import classNames from 'classnames'; import { LegacyArrowRight2pxIcon } from '@deriv/quill-icons'; -import { Button } from '@deriv-com/ui'; -import { AppCard, WalletCard, WalletText } from '../../../../../../components'; +import { Localize } from '@deriv-com/translations'; +import { Button, Text } from '@deriv-com/ui'; +import { AppCard, WalletCard } from '../../../../../../components'; import useDevice from '../../../../../../hooks/useDevice'; import { TPlatforms } from '../../../../../../types'; import { useTransfer } from '../../provider'; @@ -65,7 +66,17 @@ const TransferReceipt = () => { const transferredAmountMessage = isSameCurrency ? displayTransferredFromAmount : `${displayTransferredFromAmount} (${displayTransferredToAmount})`; - const feeMessage = feeAmount ? `Transfer fees: ${feeAmount} ${fromAccount?.currencyConfig?.display_code}` : ''; + const feeMessage = feeAmount ? ( + + ) : ( + '' + ); return (
    @@ -90,18 +101,18 @@ const TransferReceipt = () => { })} >
    - + {transferredAmountMessage} - + {Boolean(feeMessage) && ( - + {feeMessage} - + )}
    - - Your transfer is successful! - + + +
    diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/index.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/index.ts index 7c2aac9420cd..6528e2633dbf 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/index.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/index.ts @@ -1,3 +1,2 @@ export { default as useExtendedTransferAccountProperties } from './useExtendedTransferAccountProperties'; export { default as useSortedTransferAccounts } from './useSortedTransferAccounts'; -export { default as useTransferMessages } from './useTransferMessages'; diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useSortedTransferAccounts.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useSortedTransferAccounts.ts index af321374acd1..0c465f20e762 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useSortedTransferAccounts.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useSortedTransferAccounts.ts @@ -17,11 +17,12 @@ export default useSortedTransferAccounts; /** A custom hook that sort trading and wallet accounts to display on the screen. */ const sortWalletsAccounts = (a: TAccount, b: TAccount) => { - if (!a?.accountName || !b?.accountName) return 0; + if (!a?.currency || !b?.currency) return 0; + if (a.account_type === 'doughflow' && b.account_type === 'doughflow') { - return a.accountName.localeCompare(b.accountName); + return a.currency.localeCompare(b.currency); } else if (a.account_type === 'crypto' && b.account_type === 'crypto') { - return a.accountName.localeCompare(b.accountName); + return a.currency.localeCompare(b.currency); } else if (a.account_type === 'doughflow') { // 'doughflow' comes first return -1; diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/__tests__/useTransferMessages.spec.tsx b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/__tests__/useTransferMessages.spec.tsx index f258dd8136ac..feb6d76c9bcf 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/__tests__/useTransferMessages.spec.tsx +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/__tests__/useTransferMessages.spec.tsx @@ -214,13 +214,6 @@ describe('useTransferMessages', () => { ]); }); - test('should pass values with correct format to messageFns', () => { - const { result } = renderHook(() => useTransferMessages(mockWalletsTransfer)); - - expect(result.current[0].message.values.feeMessageText).toEqual('0.1 USD'); - expect(result.current[0].message.values.minimumFeeText).toEqual('0.1 USD'); - }); - test('should not render transfer messages when active wallet is null', () => { (useActiveWalletAccount as jest.Mock).mockReturnValueOnce({ data: null }); diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/useTransferMessages.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/useTransferMessages.tsx similarity index 100% rename from packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/useTransferMessages.ts rename to packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/useTransferMessages.tsx diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/countLimitsMessageFn.spec.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/countLimitsMessageFn.spec.tsx similarity index 80% rename from packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/countLimitsMessageFn.spec.ts rename to packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/countLimitsMessageFn.spec.tsx index 9bbad27512bc..f1e1d2eb36f1 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/countLimitsMessageFn.spec.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/countLimitsMessageFn.spec.tsx @@ -1,3 +1,5 @@ +import React from 'react'; +import { Localize } from '@deriv-com/translations'; import countLimitMessageFn from '../countLimitsMessageFn'; describe('countLimitMessageFn', () => { @@ -27,10 +29,12 @@ describe('countLimitMessageFn', () => { targetAccount: {}, }); expect(result).toEqual({ - message: { - text: 'You have reached your daily transfer limit of {{allowedCount}} transfers for your virtual funds. The limit will reset at 00:00 GMT.', - values: { allowedCount: 10 }, - }, + message: ( + + ), type: 'error', }); }); @@ -53,10 +57,12 @@ describe('countLimitMessageFn', () => { targetAccount: { account_category: 'wallet', accountName: 'Target Wallet' }, }); expect(result).toEqual({ - message: { - text: 'You have reached your daily transfer limit of {{allowedCount}} transfers between your Wallets. The limit will reset at 00:00 GMT.', - values: { allowedCount: 5, sourceAccountName: 'Source Wallet', targetAccountName: 'Target Wallet' }, - }, + message: ( + + ), type: 'error', }); }); @@ -79,10 +85,16 @@ describe('countLimitMessageFn', () => { targetAccount: { account_category: 'trading', accountName: 'Target Account' }, }); expect(result).toEqual({ - message: { - text: 'You have reached your daily transfer limit of {{allowedCount}} transfers between your {{sourceAccountName}} and {{targetAccountName}}. The limit will reset at 00:00 GMT.', - values: { allowedCount: 5, sourceAccountName: 'Source Account', targetAccountName: 'Target Account' }, - }, + message: ( + + ), type: 'error', }); }); diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/cumulativeAccountLimitsMessageFn.spec.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/cumulativeAccountLimitsMessageFn.spec.tsx similarity index 80% rename from packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/cumulativeAccountLimitsMessageFn.spec.ts rename to packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/cumulativeAccountLimitsMessageFn.spec.tsx index 32bd8bdfbb21..261e9393e78f 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/cumulativeAccountLimitsMessageFn.spec.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/cumulativeAccountLimitsMessageFn.spec.tsx @@ -1,3 +1,5 @@ +import React from 'react'; +import { Localize } from '@deriv-com/translations'; import cumulativeAccountLimitsMessageFn from '../cumulativeAccountLimitsMessageFn'; const mockDisplayMoney = jest.fn((amount, currency, decimals) => `${amount.toFixed(decimals)} ${currency}`); @@ -57,10 +59,12 @@ describe('cumulativeAccountLimitsMessageFn', () => { targetAccount: fiatAccount, }); expect(result).toEqual({ - message: { - text: 'Your daily transfer limit for virtual funds is {{formattedDemoLimit}}', - values: { formattedDemoLimit: '1000.00 USD' }, - }, + message: ( + + ), type: 'success', }); }); @@ -86,10 +90,12 @@ describe('cumulativeAccountLimitsMessageFn', () => { targetAccount: fiatAccount, }); expect(result).toEqual({ - message: { - text: 'Your remaining daily transfer limit for virtual funds is {{formattedDemoLimit}}.', - values: { formattedDemoLimit: '500.00 USD' }, - }, + message: ( + + ), type: 'success', }); }); @@ -114,14 +120,12 @@ describe('cumulativeAccountLimitsMessageFn', () => { targetAccount: fiatAccount, }); expect(result).toEqual({ - message: { - text: 'The remaining daily transfer limit between your Wallets is {{formattedSourceCurrencyRemainder}}.', - values: { - formattedSourceCurrencyRemainder: '800.00 USD', - sourceAccountName: 'Fiat Account', - targetAccountName: 'Fiat Account', - }, - }, + message: ( + + ), type: 'success', }); }); @@ -146,14 +150,16 @@ describe('cumulativeAccountLimitsMessageFn', () => { targetAccount: fiatAccount, }); expect(result).toEqual({ - message: { - text: 'The remaining daily transfer limit between your {{sourceAccountName}} and {{targetAccountName}} is {{formattedSourceCurrencyRemainder}}.', - values: { - formattedSourceCurrencyRemainder: '800.00 USD', - sourceAccountName: 'Trading Account', - targetAccountName: 'Fiat Account', - }, - }, + message: ( + + ), type: 'success', }); }); @@ -179,14 +185,12 @@ describe('cumulativeAccountLimitsMessageFn', () => { targetAccount: fiatAccount, }); expect(result).toEqual({ - message: { - text: 'The daily transfer limit between your Wallets is {{formattedSourceCurrencyLimit}}.', - values: { - formattedSourceCurrencyLimit: '1000.00 USD', - sourceAccountName: 'Fiat Account', - targetAccountName: 'Fiat Account', - }, - }, + message: ( + + ), type: 'success', }); }); @@ -212,14 +216,16 @@ describe('cumulativeAccountLimitsMessageFn', () => { targetAccount: fiatAccount, }); expect(result).toEqual({ - message: { - text: 'The daily transfer limit between your {{sourceAccountName}} and {{targetAccountName}} is {{formattedSourceCurrencyLimit}}.', - values: { - formattedSourceCurrencyLimit: '1000.00 USD', - sourceAccountName: 'Trading Account', - targetAccountName: 'Fiat Account', - }, - }, + message: ( + + ), type: 'success', }); }); @@ -245,14 +251,12 @@ describe('cumulativeAccountLimitsMessageFn', () => { targetAccount: fiatAccount, }); expect(result).toEqual({ - message: { - text: 'You have reached your daily transfer limit of {{formattedSourceCurrencyLimit}} between your Wallets. The limit will reset at 00:00 GMT.', - values: { - formattedSourceCurrencyLimit: '1000.00 USD', - sourceAccountName: 'Fiat Account', - targetAccountName: 'Fiat Account', - }, - }, + message: ( + + ), type: 'error', }); }); @@ -278,14 +282,16 @@ describe('cumulativeAccountLimitsMessageFn', () => { targetAccount: fiatAccount, }); expect(result).toEqual({ - message: { - text: 'You have reached your daily transfer limit of {{formattedSourceCurrencyLimit}} between your {{sourceAccountName}} and {{targetAccountName}}. The limit will reset at 00:00 GMT.', - values: { - formattedSourceCurrencyLimit: '1000.00 USD', - sourceAccountName: 'Trading Account', - targetAccountName: 'Fiat Account', - }, - }, + message: ( + + ), type: 'error', }); }); diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/insufficientBalanceMessageFn.spec.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/insufficientBalanceMessageFn.spec.tsx similarity index 81% rename from packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/insufficientBalanceMessageFn.spec.ts rename to packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/insufficientBalanceMessageFn.spec.tsx index 991f91a61f60..693386a5b672 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/insufficientBalanceMessageFn.spec.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/insufficientBalanceMessageFn.spec.tsx @@ -1,3 +1,5 @@ +import React from 'react'; +import { Localize } from '@deriv-com/translations'; import insufficientBalanceMessageFn from '../insufficientBalanceMessageFn'; describe('insufficientBalanceMessageFn', () => { @@ -33,10 +35,12 @@ describe('insufficientBalanceMessageFn', () => { } as Parameters[0]); expect(result).toEqual({ - message: { - text: 'Your {{sourceAccountName}} has insufficient balance.', - values: { sourceAccountName: 'USD Wallet' }, - }, + message: ( + + ), type: 'error', }); }); @@ -51,10 +55,12 @@ describe('insufficientBalanceMessageFn', () => { } as Parameters[0]); expect(result).toEqual({ - message: { - text: 'Your {{sourceAccountName}} has insufficient balance.', - values: { sourceAccountName: 'USD Wallet' }, - }, + message: ( + + ), type: 'error', }); }); diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/lifetimeAccountLimitsBetweenWalletsMessageFn.spec.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/lifetimeAccountLimitsBetweenWalletsMessageFn.spec.tsx similarity index 74% rename from packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/lifetimeAccountLimitsBetweenWalletsMessageFn.spec.ts rename to packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/lifetimeAccountLimitsBetweenWalletsMessageFn.spec.tsx index 692865a038ec..2b7aae29c719 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/lifetimeAccountLimitsBetweenWalletsMessageFn.spec.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/__tests__/lifetimeAccountLimitsBetweenWalletsMessageFn.spec.tsx @@ -1,3 +1,5 @@ +import React from 'react'; +import { Localize } from '@deriv-com/translations'; import lifetimeAccountLimitsBetweenWalletsMessageFn from '../lifetimeAccountLimitsBetweenWalletsMessageFn'; const mockDisplayMoney = jest.fn((amount, currency, decimals) => `${amount.toFixed(decimals)} ${currency}`); @@ -54,11 +56,17 @@ describe('lifetimeAccountLimitsBetweenWalletsMessageFn', () => { targetAccount: fiatAccount, }); expect(result).toEqual({ - action: { buttonLabel: 'Verify', navigateTo: '/account/proof-of-identity', shouldOpenInNewTab: true }, - message: { - text: "You've reached the lifetime transfer limit from your {{sourceAccountName}} to any fiat Wallet. Verify your account to upgrade the limit.", - values: { sourceAccountName: 'Crypto Account' }, + action: { + buttonLabel: , + navigateTo: '/account/proof-of-identity', + shouldOpenInNewTab: true, }, + message: ( + + ), type: 'error', }); }); @@ -82,11 +90,17 @@ describe('lifetimeAccountLimitsBetweenWalletsMessageFn', () => { targetAccount: cryptoAccount, }); expect(result).toEqual({ - action: { buttonLabel: 'Verify', navigateTo: '/account/proof-of-identity', shouldOpenInNewTab: true }, - message: { - text: "You've reached the lifetime transfer limit from your {{sourceAccountName}} to any cryptocurrency Wallet. Verify your account to upgrade the limit.", - values: { sourceAccountName: 'Fiat Account' }, + action: { + buttonLabel: , + navigateTo: '/account/proof-of-identity', + shouldOpenInNewTab: true, }, + message: ( + + ), type: 'error', }); }); @@ -111,11 +125,20 @@ describe('lifetimeAccountLimitsBetweenWalletsMessageFn', () => { targetAccount: cryptoAccount, }); expect(result).toEqual({ - action: { buttonLabel: 'Verify', navigateTo: '/account/proof-of-identity', shouldOpenInNewTab: true }, - message: { - text: 'Your remaining lifetime transfer limit from {{sourceAccountName}} to any cryptocurrency Wallets is {{formattedSourceCurrencyRemainder}}. Verify your account to upgrade the limit.', - values: { formattedSourceCurrencyRemainder: '500.00 USD', sourceAccountName: 'Fiat Account' }, + action: { + buttonLabel: , + navigateTo: '/account/proof-of-identity', + shouldOpenInNewTab: true, }, + message: ( + + ), type: 'success', }); }); @@ -140,10 +163,12 @@ describe('lifetimeAccountLimitsBetweenWalletsMessageFn', () => { targetAccount: cryptoAccount, }); expect(result).toEqual({ - message: { - text: 'The lifetime transfer limit from {{sourceAccountName}} to any cryptocurrency Wallets is up to {{formattedSourceCurrencyLimit}}.', - values: { formattedSourceCurrencyLimit: '1000.00 USD', sourceAccountName: 'Fiat Account' }, - }, + message: ( + + ), type: 'success', }); }); @@ -168,11 +193,20 @@ describe('lifetimeAccountLimitsBetweenWalletsMessageFn', () => { targetAccount: fiatAccount, }); expect(result).toEqual({ - action: { buttonLabel: 'Verify', navigateTo: '/account/proof-of-identity', shouldOpenInNewTab: true }, - message: { - text: 'Your remaining lifetime transfer limit from {{sourceAccountName}} to any fiat Wallets is {{formattedSourceCurrencyRemainder}}. Verify your account to upgrade the limit.', - values: { formattedSourceCurrencyRemainder: '5.00000000 BTC', sourceAccountName: 'Crypto Account' }, + action: { + buttonLabel: , + navigateTo: '/account/proof-of-identity', + shouldOpenInNewTab: true, }, + message: ( + + ), type: 'success', }); }); @@ -197,10 +231,15 @@ describe('lifetimeAccountLimitsBetweenWalletsMessageFn', () => { targetAccount: fiatAccount, }); expect(result).toEqual({ - message: { - text: 'The lifetime transfer limit from {{sourceAccountName}} to any fiat Wallets is up to {{formattedSourceCurrencyLimit}}.', - values: { formattedSourceCurrencyLimit: '10.00000000 BTC', sourceAccountName: 'Crypto Account' }, - }, + message: ( + + ), type: 'success', }); }); @@ -225,11 +264,17 @@ describe('lifetimeAccountLimitsBetweenWalletsMessageFn', () => { targetAccount: cryptoAccount, }); expect(result).toEqual({ - action: { buttonLabel: 'Verify', navigateTo: '/account/proof-of-identity', shouldOpenInNewTab: true }, - message: { - text: 'Your remaining lifetime transfer limit between cryptocurrency Wallets is {{formattedSourceCurrencyRemainder}}. Verify your account to upgrade the limit.', - values: { formattedSourceCurrencyRemainder: '500.00000000 BTC' }, + action: { + buttonLabel: , + navigateTo: '/account/proof-of-identity', + shouldOpenInNewTab: true, }, + message: ( + + ), type: 'success', }); }); @@ -254,10 +299,12 @@ describe('lifetimeAccountLimitsBetweenWalletsMessageFn', () => { targetAccount: cryptoAccount, }); expect(result).toEqual({ - message: { - text: 'The lifetime transfer limit between cryptocurrency Wallets is up to {{formattedSourceCurrencyLimit}}.', - values: { formattedSourceCurrencyLimit: '1000.00000000 BTC' }, - }, + message: ( + + ), type: 'success', }); }); diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/countLimitsMessageFn.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/countLimitsMessageFn.tsx similarity index 55% rename from packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/countLimitsMessageFn.ts rename to packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/countLimitsMessageFn.tsx index 1823a8fea33d..d60b82d54c7e 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/countLimitsMessageFn.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/countLimitsMessageFn.tsx @@ -1,8 +1,8 @@ +import React from 'react'; +import { Localize } from '@deriv-com/translations'; import { TMessageFnProps, TTransferMessage } from '../../../types'; -let text: TTransferMessage['message']['text'], - type: TTransferMessage['type'], - values: TTransferMessage['message']['values']; +let message: TTransferMessage['message'], type: TTransferMessage['type']; const countLimitMessageFn = ({ activeWallet, limits, sourceAccount, targetAccount }: TMessageFnProps) => { if (!targetAccount) return null; @@ -32,32 +32,40 @@ const countLimitMessageFn = ({ activeWallet, limits, sourceAccount, targetAccoun if (allowedCount === undefined || availableCount === undefined) return null; if (availableCount === 0 && isDemoTransfer) { - text = - 'You have reached your daily transfer limit of {{allowedCount}} transfers for your virtual funds. The limit will reset at 00:00 GMT.'; - values = { - allowedCount, - }; + message = ( + + ); type = 'error' as const; return { - message: { text, values }, + message, type, }; } if (availableCount === 0) { - text = isTransferBetweenWallets - ? 'You have reached your daily transfer limit of {{allowedCount}} transfers between your Wallets. The limit will reset at 00:00 GMT.' - : 'You have reached your daily transfer limit of {{allowedCount}} transfers between your {{sourceAccountName}} and {{targetAccountName}}. The limit will reset at 00:00 GMT.'; - values = { - allowedCount, - sourceAccountName: sourceAccount.accountName, - targetAccountName: targetAccount.accountName, - }; + message = isTransferBetweenWallets ? ( + + ) : ( + + ); type = 'error' as const; return { - message: { text, values }, + message, type, }; } diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/cumulativeAccountLimitsMessageFn.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/cumulativeAccountLimitsMessageFn.tsx similarity index 57% rename from packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/cumulativeAccountLimitsMessageFn.ts rename to packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/cumulativeAccountLimitsMessageFn.tsx index bf424d7e7323..7cac0b7c83a8 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/cumulativeAccountLimitsMessageFn.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/cumulativeAccountLimitsMessageFn.tsx @@ -1,6 +1,8 @@ +import React from 'react'; +import { Localize } from '@deriv-com/translations'; import { TMessageFnProps, TTransferMessage } from '../../../types'; -let text: TTransferMessage['message']['text'], values: TTransferMessage['message']['values']; +let message: TTransferMessage['message']; const cumulativeAccountLimitsMessageFn = ({ activeWallet, @@ -53,20 +55,28 @@ const cumulativeAccountLimitsMessageFn = ({ if (isDemoTransfer) { if (allowedSumUSD === availableSumUSD) { - text = 'Your daily transfer limit for virtual funds is {{formattedDemoLimit}}'; - values = { formattedDemoLimit }; + message = ( + + ); return { - message: { text, values }, + message, type: 'success' as const, }; } - text = 'Your remaining daily transfer limit for virtual funds is {{formattedDemoLimit}}.'; - values = { formattedDemoLimit }; + message = ( + + ); return { - message: { text, values }, + message, type: 'success' as const, }; } @@ -105,48 +115,69 @@ const cumulativeAccountLimitsMessageFn = ({ ); if (availableSumUSD === 0) { - text = isTransferBetweenWallets - ? 'You have reached your daily transfer limit of {{formattedSourceCurrencyLimit}} between your Wallets. The limit will reset at 00:00 GMT.' - : 'You have reached your daily transfer limit of {{formattedSourceCurrencyLimit}} between your {{sourceAccountName}} and {{targetAccountName}}. The limit will reset at 00:00 GMT.'; - values = { - formattedSourceCurrencyLimit, - sourceAccountName: sourceAccount.accountName, - targetAccountName: targetAccount.accountName, - }; + message = isTransferBetweenWallets ? ( + + ) : ( + + ); return { - message: { text, values }, + message, type: 'error' as const, }; } if (allowedSumUSD === availableSumUSD) { - text = isTransferBetweenWallets - ? 'The daily transfer limit between your Wallets is {{formattedSourceCurrencyLimit}}.' - : 'The daily transfer limit between your {{sourceAccountName}} and {{targetAccountName}} is {{formattedSourceCurrencyLimit}}.'; - values = { - formattedSourceCurrencyLimit, - sourceAccountName: sourceAccount.accountName, - targetAccountName: targetAccount.accountName, - }; + message = isTransferBetweenWallets ? ( + + ) : ( + + ); return { - message: { text, values }, + message, type: sourceAmount > sourceCurrencyRemainder ? ('error' as const) : ('success' as const), }; } - text = isTransferBetweenWallets - ? 'The remaining daily transfer limit between your Wallets is {{formattedSourceCurrencyRemainder}}.' - : 'The remaining daily transfer limit between your {{sourceAccountName}} and {{targetAccountName}} is {{formattedSourceCurrencyRemainder}}.'; - values = { - formattedSourceCurrencyRemainder, - sourceAccountName: sourceAccount.accountName, - targetAccountName: targetAccount.accountName, - }; + message = isTransferBetweenWallets ? ( + + ) : ( + + ); return { - message: { text, values }, + message, type: sourceAmount > sourceCurrencyRemainder ? ('error' as const) : ('success' as const), }; }; diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/insufficientBalanceMessageFn.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/insufficientBalanceMessageFn.tsx similarity index 62% rename from packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/insufficientBalanceMessageFn.ts rename to packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/insufficientBalanceMessageFn.tsx index efed851e510b..83a51a5d0901 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/insufficientBalanceMessageFn.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/insufficientBalanceMessageFn.tsx @@ -1,3 +1,5 @@ +import React from 'react'; +import { Localize } from '@deriv-com/translations'; import { TMessageFnProps } from '../../../types'; const insufficientBalanceMessageFn = ({ sourceAccount, sourceAmount }: TMessageFnProps) => { @@ -6,10 +8,13 @@ const insufficientBalanceMessageFn = ({ sourceAccount, sourceAmount }: TMessageF const sourceAccountBalance = Number(sourceAccount.balance); if (sourceAccountBalance === 0 || sourceAccountBalance < sourceAmount) { - const message = { - text: 'Your {{sourceAccountName}} has insufficient balance.', - values: { sourceAccountName: sourceAccount.accountName }, - }; + const message = ( + + ); + return { message, type: 'error' as const, diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/lifetimeAccountLimitsBetweenWalletsMessageFn.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/lifetimeAccountLimitsBetweenWalletsMessageFn.tsx similarity index 53% rename from packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/lifetimeAccountLimitsBetweenWalletsMessageFn.ts rename to packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/lifetimeAccountLimitsBetweenWalletsMessageFn.tsx index 3c3eefa482b4..98c99d86aef9 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/lifetimeAccountLimitsBetweenWalletsMessageFn.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/lifetimeAccountLimitsBetweenWalletsMessageFn.tsx @@ -1,9 +1,11 @@ +import React from 'react'; +import { Localize } from '@deriv-com/translations'; import { TMessageFnProps, TTransferMessage } from '../../../types'; -let text: TTransferMessage['message']['text'], values: TTransferMessage['message']['values']; +let message: TTransferMessage['message']; const verifyPOIAction = { - buttonLabel: 'Verify', + buttonLabel: , navigateTo: '/account/proof-of-identity', shouldOpenInNewTab: true, }; @@ -70,15 +72,22 @@ const lifetimeAccountLimitsBetweenWalletsMessageFn = ({ ); if (availableSumActiveWalletCurrency === 0) { - text = - targetWalletType === 'crypto' - ? "You've reached the lifetime transfer limit from your {{sourceAccountName}} to any cryptocurrency Wallet. Verify your account to upgrade the limit." - : "You've reached the lifetime transfer limit from your {{sourceAccountName}} to any fiat Wallet. Verify your account to upgrade the limit."; - values = { sourceAccountName: sourceAccount.accountName }; + message = + targetWalletType === 'crypto' ? ( + + ) : ( + + ); return { action: verifyPOIAction, - message: { text, values }, + message, type: 'error' as const, }; } @@ -87,23 +96,33 @@ const lifetimeAccountLimitsBetweenWalletsMessageFn = ({ switch (limitsCaseKey) { case 'fiat_to_crypto': case 'crypto_to_fiat': - text = - targetWalletType === 'crypto' - ? 'The lifetime transfer limit from {{sourceAccountName}} to any cryptocurrency Wallets is up to {{formattedSourceCurrencyLimit}}.' - : 'The lifetime transfer limit from {{sourceAccountName}} to any fiat Wallets is up to {{formattedSourceCurrencyLimit}}.'; - values = { formattedSourceCurrencyLimit, sourceAccountName: sourceAccount.accountName }; + message = + targetWalletType === 'crypto' ? ( + + ) : ( + + ); return { - message: { text, values }, + message, type: 'success' as const, }; case 'crypto_to_crypto': - text = - 'The lifetime transfer limit between cryptocurrency Wallets is up to {{formattedSourceCurrencyLimit}}.'; - values = { formattedSourceCurrencyLimit }; + message = ( + + ); return { - message: { text, values }, + message, type: 'success' as const, }; default: @@ -113,25 +132,35 @@ const lifetimeAccountLimitsBetweenWalletsMessageFn = ({ switch (limitsCaseKey) { case 'fiat_to_crypto': case 'crypto_to_fiat': - text = - targetWalletType === 'crypto' - ? 'Your remaining lifetime transfer limit from {{sourceAccountName}} to any cryptocurrency Wallets is {{formattedSourceCurrencyRemainder}}. Verify your account to upgrade the limit.' - : 'Your remaining lifetime transfer limit from {{sourceAccountName}} to any fiat Wallets is {{formattedSourceCurrencyRemainder}}. Verify your account to upgrade the limit.'; - values = { formattedSourceCurrencyRemainder, sourceAccountName: sourceAccount.accountName }; + message = + targetWalletType === 'crypto' ? ( + + ) : ( + + ); return { action: verifyPOIAction, - message: { text, values }, + message, type: 'success' as const, }; case 'crypto_to_crypto': - text = - 'Your remaining lifetime transfer limit between cryptocurrency Wallets is {{formattedSourceCurrencyRemainder}}. Verify your account to upgrade the limit.'; - values = { formattedSourceCurrencyRemainder }; + message = ( + + ); return { action: verifyPOIAction, - message: { text, values }, + message, type: 'success' as const, }; default: diff --git a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/transferFeesBetweenWalletsMessageFn.ts b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/transferFeesBetweenWalletsMessageFn.tsx similarity index 57% rename from packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/transferFeesBetweenWalletsMessageFn.ts rename to packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/transferFeesBetweenWalletsMessageFn.tsx index 45cda1e0040a..b67cddc45209 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/transferFeesBetweenWalletsMessageFn.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/hooks/useTransferMessages/utils/transferFeesBetweenWalletsMessageFn.tsx @@ -1,3 +1,5 @@ +import React from 'react'; +import { Localize } from '@deriv-com/translations'; import { TMessageFnProps } from '../../../types'; const transferFeesBetweenWalletsMessageFn = ({ @@ -37,18 +39,29 @@ const transferFeesBetweenWalletsMessageFn = ({ sourceAccount.currencyConfig.fractional_digits ); - const text = - 'Fee: {{feeMessageText}} ({{feePercentage}}% transfer fee or {{minimumFeeText}}, whichever is higher, applies for fund transfers between your {{fiatAccountName}}{{conjunction}} cryptocurrency Wallets)'; - const values = { - conjunction: isTransferBetweenCryptoWallets ? '' : ' Wallet and ', - feeMessageText, - feePercentage, - fiatAccountName: isTransferBetweenCryptoWallets ? '' : fiatAccount?.wallet_currency_type, - minimumFeeText, - }; + const message = isTransferBetweenCryptoWallets ? ( + + ) : ( + + ); return { - message: { text, values }, + message, type: 'info' as const, }; }; diff --git a/packages/wallets/src/features/cashier/modules/Transfer/types/types.ts b/packages/wallets/src/features/cashier/modules/Transfer/types/types.ts index c8f27651e1f5..9c3f8dbdff1b 100644 --- a/packages/wallets/src/features/cashier/modules/Transfer/types/types.ts +++ b/packages/wallets/src/features/cashier/modules/Transfer/types/types.ts @@ -15,19 +15,14 @@ export type TInitialTransferFormValues = { }; type TAction = { - buttonLabel?: string; + buttonLabel?: JSX.Element; navigateTo?: string; shouldOpenInNewTab?: boolean; }; -type TMessage = { - text: string; - values: Record; -}; - export type TTransferMessage = { action?: TAction; - message: TMessage; + message: JSX.Element; type: 'error' | 'info' | 'success'; }; diff --git a/packages/wallets/src/features/cashier/screens/TransferNotAvailable/TransferNotAvailableProvider.tsx b/packages/wallets/src/features/cashier/screens/TransferNotAvailable/TransferNotAvailableProvider.tsx index 291d8da55519..358ed577ccf0 100644 --- a/packages/wallets/src/features/cashier/screens/TransferNotAvailable/TransferNotAvailableProvider.tsx +++ b/packages/wallets/src/features/cashier/screens/TransferNotAvailable/TransferNotAvailableProvider.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { useHistory } from 'react-router-dom'; +import { Localize } from '@deriv-com/translations'; import { Button } from '@deriv-com/ui'; import { THooks } from '../../../../types'; @@ -19,17 +20,21 @@ const getMessage = ({ isVirtual, }: TGetMessageProps) => { if (!hasAccountsForTransfer) { - const title = isVirtual - ? 'No trading accounts are available to receive funds' - : 'No trading accounts or other wallets are available to receive funds'; - const description = isVirtual - ? "Add a demo trading account in Trader's hub to receive funds from this Wallet to start trading." - : "Add a trading account or Wallet in Trader's hub to receive funds from this Wallet."; + const title = isVirtual ? ( + + ) : ( + + ); + const description = isVirtual ? ( + + ) : ( + + ); return { actionButton: () => ( ), description, @@ -38,14 +43,25 @@ const getMessage = ({ } if (!hasTransferAccountsWithFunds) { - const title = isVirtual - ? 'No funds in Demo wallet and demo trading accounts' - : 'No funds in any trading accounts or wallets'; - const description = isVirtual - ? 'Please reset the balance of your Demo Wallet to make a transfer.' - : `Please make a deposit to your ${currency} Wallet to make a transfer.`; + const title = isVirtual ? ( + + ) : ( + + ); + const description = isVirtual ? ( + + ) : ( + + ); const locationPathName = `/wallet/${isVirtual ? 'reset-balance' : 'deposit'}` as const; - const buttonText = isVirtual ? 'Reset balance' : 'Deposit'; + const buttonText = isVirtual ? ( + + ) : ( + + ); return { actionButton: () => ( From cd2f7b7b13ce0c9bda7384e5d39f13b5a9bafd19 Mon Sep 17 00:00:00 2001 From: Likhith Kolayari <98398322+likhith-deriv@users.noreply.github.com> Date: Mon, 12 Aug 2024 08:28:07 +0400 Subject: [PATCH 22/72] [COJ]/likhith/coj-784/replace localize import in Security section (#16101) * chore: replaced localize import * fix: added testcases * fix: eslint errors * fix: mock-translation * fix: resolved type error * fix: resolved localize mock * fix: mock Localize function * fix: removed unused ts-ignore * fix: localize in KO * fix: Date and time in Login issue * fix: resolved eslint errors * Update dayJs-config.ts --------- Co-authored-by: amina-deriv <84661147+amina-deriv@users.noreply.github.com> --- __mocks__/translation.mock.js | 32 ++++++------- .../__tests__/account-limit-overlay.spec.tsx | 2 +- ...account-limits-turnover-limit-row.spec.tsx | 12 +++-- .../__tests__/account-limits.spec.tsx | 12 +++-- .../account-limits/account-limits-article.tsx | 10 ++-- .../account-limits/account-limits-context.tsx | 4 +- .../account-limits-extra-info.tsx | 1 - .../account-limits/account-limits-footer.tsx | 6 +-- .../account-limits/account-limits-overlay.tsx | 7 +-- .../account-limits-table-cell.tsx | 6 +-- .../account-limits-table-header.tsx | 6 +-- .../account-limits-turnover-limit-row.tsx | 12 ++--- .../account-limits/account-limits.tsx | 28 ++++++----- .../withdrawal-limits-table.tsx | 24 ++++++---- .../api-token/api-token-article.tsx | 3 +- .../Components/api-token/api-token-card.tsx | 4 +- .../api-token/api-token-clipboard.tsx | 18 +++---- .../Components/api-token/api-token-context.ts | 4 +- .../api-token/api-token-delete-button.tsx | 16 +++---- .../api-token/api-token-table-row-cell.tsx | 4 +- .../api-token/api-token-table-row-header.tsx | 1 - .../api-token-table-row-token-cell.tsx | 6 +-- .../Components/api-token/api-token-table.tsx | 11 +++-- .../src/Components/article/article.tsx | 10 ++-- .../demo-message.spec.tsx | 0 .../Components/demo-message/demo-message.tsx | 19 ++++---- .../{ => __tests__}/error-component.spec.tsx | 2 +- .../error-component/error-component.tsx | 3 +- .../src/Components/error-component/index.js | 3 -- .../src/Components/error-component/index.ts | 3 ++ .../self-exclusion-article-content.tsx | 15 +++--- .../self-exclusion-confirm-page.tsx | 18 ++++--- .../self-exclusion/self-exclusion-context.tsx | 4 +- .../self-exclusion/self-exclusion-footer.tsx | 10 ++-- .../self-exclusion/self-exclusion-form.tsx | 4 +- .../self-exclusion/self-exclusion-inputs.tsx | 48 ++++++++++--------- .../self-exclusion/self-exclusion-modal.tsx | 4 +- .../self-exclusion/self-exclusion-wrapper.tsx | 6 +-- .../sent-email-modal/sent-email-modal.tsx | 11 +++-- .../unlink-account-modal.tsx | 4 +- .../__tests__/unlink-modal.spec.tsx | 24 ---------- .../src/Components/unlink-modal/index.ts | 3 -- .../Components/unlink-modal/unlink-modal.tsx | 39 --------------- .../src/Constants/api-token-card-details.tsx | 3 +- .../src/Constants/closing-account-config.tsx | 3 +- .../src/Constants/connected-apps-config.tsx | 3 +- .../get-login-history-table-headers.tsx | 2 +- .../src/Containers/reset-trading-password.tsx | 4 +- packages/account/src/Helpers/utils.tsx | 2 +- .../Modules/Page404/Components/Page404.tsx | 32 +++++++------ .../Security/AccountClosed/account-closed.tsx | 16 +++---- .../AccountLimits/account-limits-info.tsx | 12 ++--- .../Sections/Security/ApiToken/api-token.tsx | 19 ++++---- .../closing-account-general-error-content.tsx | 8 ++-- ...closing-account-has-pending-conditions.tsx | 15 +++--- .../closing-account-pending-balance.tsx | 17 +++---- .../closing-account-pending-content.tsx | 6 +-- .../closing-account-pending-positions.tsx | 3 +- .../closing-account-pending-wrapper.tsx | 6 +-- .../closing-account-reason-form.tsx | 19 ++++---- .../ClosingAccount/closing-account-reason.tsx | 12 ++--- .../ClosingAccount/closing-account-steps.tsx | 3 +- .../closing-account-warning-modal.tsx | 5 +- .../ClosingAccount/closing-account.tsx | 4 +- .../connected-apps-earn-more.tsx | 2 +- .../ConnectedApps/connected-apps-empty.tsx | 2 +- .../ConnectedApps/connected-apps-info.tsx | 8 ++-- .../connected-apps-know-more.tsx | 2 +- .../connected-apps-revoke-modal.tsx | 3 +- .../Security/ConnectedApps/connected-apps.tsx | 20 ++++---- .../data-list-template-entry.tsx | 6 +-- .../ConnectedApps/data-list-template.tsx | 3 +- .../ConnectedApps/data-table-template.tsx | 8 ++-- .../ConnectedApps/template-helper.tsx | 3 +- .../Security/LoginHistory/list-cell.tsx | 6 +-- .../LoginHistory/login-history-list-row.tsx | 2 +- .../LoginHistory/login-history-table-row.tsx | 2 +- .../Security/Passwords/deriv-email.tsx | 15 +++--- .../Security/Passwords/deriv-password.tsx | 34 +++++++------ .../Security/Passwords/passwords-platform.tsx | 13 ++--- .../Sections/Security/Passwords/passwords.tsx | 8 ++-- .../Passwords/platform-description.tsx | 3 +- .../Security/Passwords/platform-partials.tsx | 9 ++-- .../Security/SelfExclusion/self-exclusion.tsx | 21 ++++---- .../TwoFactorAuthentication/digit-form.tsx | 15 +++--- .../two-factor-authentication-article.tsx | 28 ++++++----- .../two-factor-authentication.tsx | 18 +++---- .../two-factor-disabled.tsx | 17 +++---- .../two-factor-enabled.tsx | 3 +- packages/core/src/Stores/common-store.js | 2 + .../src/utils/config/platform-config.ts | 3 +- .../shared/src/utils/date/dayJs-config.ts | 15 ++++++ packages/shared/src/utils/date/index.ts | 1 + packages/shared/tsconfig.json | 3 +- .../src/getLoginHistoryFormattedData.tsx | 4 +- 95 files changed, 453 insertions(+), 479 deletions(-) rename packages/account/src/Components/demo-message/{__test__ => __tests__}/demo-message.spec.tsx (100%) rename packages/account/src/Components/error-component/{ => __tests__}/error-component.spec.tsx (89%) delete mode 100644 packages/account/src/Components/error-component/index.js create mode 100644 packages/account/src/Components/error-component/index.ts delete mode 100644 packages/account/src/Components/unlink-modal/__tests__/unlink-modal.spec.tsx delete mode 100644 packages/account/src/Components/unlink-modal/index.ts delete mode 100644 packages/account/src/Components/unlink-modal/unlink-modal.tsx create mode 100644 packages/shared/src/utils/date/dayJs-config.ts diff --git a/__mocks__/translation.mock.js b/__mocks__/translation.mock.js index 0dd0e76a20d9..04a2d0c8d612 100644 --- a/__mocks__/translation.mock.js +++ b/__mocks__/translation.mock.js @@ -1,35 +1,31 @@ import React from 'react'; +const replaceValue = (text, values) => { + const valueMatch = text.match(/{{(\w+)}}/); + if (valueMatch) { + const valueKey = valueMatch[1]; + return values[valueKey] || text; + } + return text; +}; + const Localize = ({ i18n_default_text, components = [], values = {} }) => { - // Split text into parts, extracting placeholders for components and values + // Split text into parts, extracting placeholders for components const parts = i18n_default_text.split(/(<\d+>.*?<\/\d+>|{{\w+}})/g); - const replaceValues = text => { - return text.replace(/{{(\w+)}}/g, (match, key) => values[key] || match); - }; - return ( <> {parts.map((part, index) => { - // Replace component placeholders with actual components + // Handle component placeholders const componentMatch = part.match(/<(\d+)>(.*?)<\/\1>/); - if (componentMatch) { const componentIndex = parseInt(componentMatch[1]); - - // Replace values wrapped in components with actual values - const content = replaceValues(componentMatch[2]); + const content = replaceValue(componentMatch[2], values); const Component = components[componentIndex]; return Component ? React.cloneElement(Component, { key: index, children: content }) : content; } - - // Replace value placeholders with actual values - const valueMatch = part.match(/{{(\w+)}}/); - if (valueMatch) { - const valueKey = valueMatch[1]; - return values[valueKey] || part; - } - return part; + // Replace placeholders with actual values + return replaceValue(part, values); })} ); diff --git a/packages/account/src/Components/account-limits/__tests__/account-limit-overlay.spec.tsx b/packages/account/src/Components/account-limits/__tests__/account-limit-overlay.spec.tsx index b61ef8b811ea..4d9feb8cad77 100644 --- a/packages/account/src/Components/account-limits/__tests__/account-limit-overlay.spec.tsx +++ b/packages/account/src/Components/account-limits/__tests__/account-limit-overlay.spec.tsx @@ -36,7 +36,7 @@ describe('', () => { it('should go to help-centre page if the Help Centre link on the text is clicked', () => { render(); - expect(screen.getByText('Help Centre').hasAttribute('href')); + expect(screen.getByText(/Help Centre/).hasAttribute('href')); }); it('should show Done Button', () => { render(); diff --git a/packages/account/src/Components/account-limits/__tests__/account-limits-turnover-limit-row.spec.tsx b/packages/account/src/Components/account-limits/__tests__/account-limits-turnover-limit-row.spec.tsx index 388d45caa98a..08897b992c8e 100644 --- a/packages/account/src/Components/account-limits/__tests__/account-limits-turnover-limit-row.spec.tsx +++ b/packages/account/src/Components/account-limits/__tests__/account-limits-turnover-limit-row.spec.tsx @@ -1,12 +1,14 @@ import React from 'react'; import { screen, render } from '@testing-library/react'; -import { formatMoney } from '@deriv/shared'; import AccountLimitsTurnoverLimitRow from '../account-limits-turnover-limit-row'; import AccountLimitsContext from '../account-limits-context'; +import { FormatUtils } from '@deriv-com/utils'; -jest.mock('@deriv/shared', () => ({ - ...jest.requireActual('@deriv/shared'), - formatMoney: jest.fn(), +jest.mock('@deriv-com/utils', () => ({ + ...jest.requireActual('@deriv-com/utils'), + FormatUtils: { + formatMoney: jest.fn(), + }, })); const AccountLimitsTurnoverLimitRowComponent = (props: React.ComponentProps) => ( @@ -47,6 +49,6 @@ describe('', () => { container: document.body.appendChild(document.createElement('tbody')), }); - expect(formatMoney).toHaveBeenCalledWith('AUD', 100000, true); + expect(FormatUtils.formatMoney).toHaveBeenCalledWith(100000, { currency: 'AUD' }); }); }); diff --git a/packages/account/src/Components/account-limits/__tests__/account-limits.spec.tsx b/packages/account/src/Components/account-limits/__tests__/account-limits.spec.tsx index 7ce758a1d55e..283149f1c575 100644 --- a/packages/account/src/Components/account-limits/__tests__/account-limits.spec.tsx +++ b/packages/account/src/Components/account-limits/__tests__/account-limits.spec.tsx @@ -1,10 +1,10 @@ import React from 'react'; import { screen, render } from '@testing-library/react'; -import { formatMoney } from '@deriv/shared'; import { useDevice } from '@deriv-com/ui'; import AccountLimits from '../account-limits'; import { BrowserRouter } from 'react-router-dom'; import { StoreProvider, mockStore } from '@deriv/stores'; +import { FormatUtils } from '@deriv-com/utils'; jest.mock('@deriv/components', () => { const original_module = jest.requireActual('@deriv/components'); @@ -25,9 +25,11 @@ jest.mock('@deriv-com/ui', () => ({ useDevice: jest.fn(() => ({ isDesktop: true })), })); -jest.mock('@deriv/shared', () => ({ - ...jest.requireActual('@deriv/shared'), - formatMoney: jest.fn(), +jest.mock('@deriv-com/utils', () => ({ + ...jest.requireActual('@deriv-com/utils'), + FormatUtils: { + formatMoney: jest.fn(), + }, })); jest.mock('Components/demo-message', () => jest.fn(() => 'mockedDemoMessage')); @@ -288,7 +290,7 @@ describe('', () => { ); const { account_balance } = store.client.account_limits; - expect(formatMoney).toHaveBeenCalledWith(store.client.currency, account_balance, true); + expect(FormatUtils.formatMoney).toHaveBeenCalledWith(account_balance, { currency: store.client.currency }); }); it('should render Trading limits table and its maximum daily turnover contents properly', () => { diff --git a/packages/account/src/Components/account-limits/account-limits-article.tsx b/packages/account/src/Components/account-limits/account-limits-article.tsx index 03a2fee6ce33..d435b0b6fab8 100644 --- a/packages/account/src/Components/account-limits/account-limits-article.tsx +++ b/packages/account/src/Components/account-limits/account-limits-article.tsx @@ -1,13 +1,13 @@ -import React from 'react'; -import { Localize, localize } from '@deriv/translations'; +import { Localize, useTranslations } from '@deriv-com/translations'; import AccountArticle from '../article'; const getDescription = () => [ , ]; -const AccountLimitsArticle = () => ( - -); +const AccountLimitsArticle = () => { + const { localize } = useTranslations(); + return ; +}; export default AccountLimitsArticle; diff --git a/packages/account/src/Components/account-limits/account-limits-context.tsx b/packages/account/src/Components/account-limits/account-limits-context.tsx index 65423704ad3d..467ac797742b 100644 --- a/packages/account/src/Components/account-limits/account-limits-context.tsx +++ b/packages/account/src/Components/account-limits/account-limits-context.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { createContext } from 'react'; export type TAccountLimitsContext = { currency: string; @@ -7,7 +7,7 @@ export type TAccountLimitsContext = { toggleOverlay?: () => void; }; -const AccountLimitsContext = React.createContext({ +const AccountLimitsContext = createContext({ currency: '', overlay_ref: document.createElement('div'), }); diff --git a/packages/account/src/Components/account-limits/account-limits-extra-info.tsx b/packages/account/src/Components/account-limits/account-limits-extra-info.tsx index 07a1b632bd64..4c282b46e816 100644 --- a/packages/account/src/Components/account-limits/account-limits-extra-info.tsx +++ b/packages/account/src/Components/account-limits/account-limits-extra-info.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Popover, Text } from '@deriv/components'; import { useDevice } from '@deriv-com/ui'; diff --git a/packages/account/src/Components/account-limits/account-limits-footer.tsx b/packages/account/src/Components/account-limits/account-limits-footer.tsx index 8b598e33af10..c111415b8363 100644 --- a/packages/account/src/Components/account-limits/account-limits-footer.tsx +++ b/packages/account/src/Components/account-limits/account-limits-footer.tsx @@ -1,11 +1,11 @@ -import React from 'react'; +import { useContext } from 'react'; import { createPortal } from 'react-dom'; import { Text } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import AccountLimitsContext, { TAccountLimitsContext } from './account-limits-context'; const AccountLimitsFooterPortal = () => { - const { footer_ref, toggleOverlay } = React.useContext(AccountLimitsContext); + const { footer_ref, toggleOverlay } = useContext(AccountLimitsContext); return createPortal( diff --git a/packages/account/src/Components/account-limits/account-limits-overlay.tsx b/packages/account/src/Components/account-limits/account-limits-overlay.tsx index 4fd3c6547b76..ea31b7ee933d 100644 --- a/packages/account/src/Components/account-limits/account-limits-overlay.tsx +++ b/packages/account/src/Components/account-limits/account-limits-overlay.tsx @@ -1,10 +1,11 @@ -import React from 'react'; +import { useContext } from 'react'; import { Popup, StaticUrl } from '@deriv/components'; -import { Localize, localize } from '@deriv/translations'; +import { Localize, useTranslations } from '@deriv-com/translations'; import AccountLimitsContext from './account-limits-context'; const AccountLimitsOverlay = () => { - const { overlay_ref, toggleOverlay } = React.useContext(AccountLimitsContext); + const { localize } = useTranslations(); + const { overlay_ref, toggleOverlay } = useContext(AccountLimitsContext); return ( React.ReactElement; + renderExtraInfo: () => ReactElement; }; const AccountLimitsTableCell = ({ @@ -15,7 +15,7 @@ const AccountLimitsTableCell = ({ is_hint, level, renderExtraInfo, -}: React.PropsWithChildren>) => { +}: PropsWithChildren>) => { const text_size = is_hint ? 'xxxs' : 'xxs'; return ( diff --git a/packages/account/src/Components/account-limits/account-limits-table-header.tsx b/packages/account/src/Components/account-limits/account-limits-table-header.tsx index 96cef796795d..df453ad6cb5b 100644 --- a/packages/account/src/Components/account-limits/account-limits-table-header.tsx +++ b/packages/account/src/Components/account-limits/account-limits-table-header.tsx @@ -1,17 +1,17 @@ -import React from 'react'; +import { ReactNode, PropsWithChildren } from 'react'; import clsx from 'clsx'; import { Text } from '@deriv/components'; type TAccountLimitsTableHeader = { align: 'left' | 'right'; - renderExtraInfo: () => React.ReactNode; + renderExtraInfo: () => ReactNode; }; const AccountLimitsTableHeader = ({ align, children, renderExtraInfo, -}: React.PropsWithChildren>) => { +}: PropsWithChildren>) => { return ( { - const { currency } = React.useContext(AccountLimitsContext); + const { currency } = useContext(AccountLimitsContext); return ( - + {collection?.map(({ name, turnover_limit, level }) => ( @@ -28,11 +28,11 @@ const AccountLimitsTurnoverLimitRow = ({ collection, title }: TAccountLimitsTurn {name} - {formatMoney(currency, turnover_limit, true)} + {FormatUtils.formatMoney(turnover_limit, { currency: currency as CurrencyConstants.Currency })} ))} - + ); }; diff --git a/packages/account/src/Components/account-limits/account-limits.tsx b/packages/account/src/Components/account-limits/account-limits.tsx index faa0ee1df9fe..0142b02ba3b2 100644 --- a/packages/account/src/Components/account-limits/account-limits.tsx +++ b/packages/account/src/Components/account-limits/account-limits.tsx @@ -1,10 +1,11 @@ -import React from 'react'; +import { RefObject, useState, useEffect } from 'react'; import { FormikValues } from 'formik'; import clsx from 'clsx'; -import { formatMoney, useIsMounted } from '@deriv/shared'; +import { useIsMounted } from '@deriv/shared'; +import { FormatUtils, CurrencyConstants } from '@deriv-com/utils'; import { Loading, ThemedScrollbars } from '@deriv/components'; import { useDevice } from '@deriv-com/ui'; -import { Localize, localize } from '@deriv/translations'; +import { Localize, useTranslations } from '@deriv-com/translations'; import { observer, useStore } from '@deriv/stores'; import DemoMessage from '../demo-message'; import LoadErrorMessage from '../load-error-message'; @@ -19,7 +20,7 @@ import AccountLimitsTurnoverLimitRow, { TAccountLimitsCollection } from './accou import WithdrawalLimitsTable from './withdrawal-limits-table'; type TAccountLimits = { - footer_ref?: React.RefObject; + footer_ref?: RefObject; is_app_settings?: boolean; overlay_ref: HTMLDivElement; setIsOverlayShown?: (is_overlay_shown?: boolean) => void; @@ -37,18 +38,19 @@ const AccountLimits = observer( should_bypass_scrollbars, should_show_article = true, }: TAccountLimits) => { + const { localize } = useTranslations(); const { client } = useStore(); const { account_limits, account_status, currency, getLimits, is_virtual, is_switching } = client; const isMounted = useIsMounted(); - const [is_loading, setLoading] = React.useState(true); - const [is_overlay_shown, setIsOverlayShown] = React.useState(false); + const [is_loading, setLoading] = useState(true); + const [is_overlay_shown, setIsOverlayShown] = useState(false); const { isDesktop } = useDevice(); const handleGetLimitsResponse = () => { if (isMounted()) setLoading(false); }; - React.useEffect(() => { + useEffect(() => { if (is_virtual) { setLoading(false); } else { @@ -57,13 +59,13 @@ const AccountLimits = observer( // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - React.useEffect(() => { + useEffect(() => { if (!is_virtual && account_limits && is_loading && Object.keys(account_status).length > 0) { setLoading(false); } }, [account_limits, is_virtual, is_loading, account_status]); - React.useEffect(() => { + useEffect(() => { if (typeof setIsPopupOverlayShown === 'function') { setIsPopupOverlayShown(is_overlay_shown); } @@ -165,7 +167,9 @@ const AccountLimits = observer( {/* null or 0 are expected form BE when max balance limit is not set */} {account_balance ? ( - formatMoney(currency, account_balance, true) + FormatUtils.formatMoney(account_balance, { + currency: currency as CurrencyConstants.Currency, + }) ) : ( )} @@ -184,7 +188,9 @@ const AccountLimits = observer( - {formatMoney(currency, payout as number, true)} + {FormatUtils.formatMoney(payout as number, { + currency: currency as CurrencyConstants.Currency, + })} diff --git a/packages/account/src/Components/account-limits/withdrawal-limits-table.tsx b/packages/account/src/Components/account-limits/withdrawal-limits-table.tsx index 693dacc962b6..d25ca4eb36da 100644 --- a/packages/account/src/Components/account-limits/withdrawal-limits-table.tsx +++ b/packages/account/src/Components/account-limits/withdrawal-limits-table.tsx @@ -1,6 +1,6 @@ -import React from 'react'; +import { Fragment } from 'react'; import { Text } from '@deriv/components'; -import { formatMoney } from '@deriv/shared'; +import { FormatUtils, CurrencyConstants } from '@deriv-com/utils'; import { Localize } from '@deriv/translations'; import { observer, useStore } from '@deriv/stores'; import AccountLimitsTableCell from './account-limits-table-cell'; @@ -17,7 +17,7 @@ const WithdrawalLimitsTable = observer( const { client } = useStore(); const { currency, is_fully_authenticated } = client; return ( - + @@ -33,13 +33,15 @@ const WithdrawalLimitsTable = observer( {!is_fully_authenticated && ( - + - {formatMoney(currency, num_of_days_limit ?? 0, true)} + {FormatUtils.formatMoney((num_of_days_limit as number) ?? 0, { + currency: currency as CurrencyConstants.Currency, + })} @@ -47,7 +49,9 @@ const WithdrawalLimitsTable = observer( - {formatMoney(currency, withdrawal_since_inception_monetary ?? 0, true)} + {FormatUtils.formatMoney((withdrawal_since_inception_monetary as number) ?? 0, { + currency: currency as CurrencyConstants.Currency, + })} @@ -55,10 +59,12 @@ const WithdrawalLimitsTable = observer( - {formatMoney(currency, remainder ?? '', true)} + {FormatUtils.formatMoney((remainder as number) ?? 0, { + currency: currency as CurrencyConstants.Currency, + })} - + )}
    @@ -71,7 +77,7 @@ const WithdrawalLimitsTable = observer( )}
    - + ); } ); diff --git a/packages/account/src/Components/api-token/api-token-article.tsx b/packages/account/src/Components/api-token/api-token-article.tsx index 00a86872244d..772268f31a2e 100644 --- a/packages/account/src/Components/api-token/api-token-article.tsx +++ b/packages/account/src/Components/api-token/api-token-article.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import AccountArticle from '../article'; const ApiTokenArticle = () => ( diff --git a/packages/account/src/Components/api-token/api-token-card.tsx b/packages/account/src/Components/api-token/api-token-card.tsx index 72184ec1dd4a..f9d6cae3e6ed 100644 --- a/packages/account/src/Components/api-token/api-token-card.tsx +++ b/packages/account/src/Components/api-token/api-token-card.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { PropsWithChildren } from 'react'; import { Field, FieldProps } from 'formik'; import { CompositeCheckbox } from '@deriv/components'; @@ -8,7 +8,7 @@ type TApiTokenCard = { name: string; }; -const ApiTokenCard = ({ name, display_name, description, children }: React.PropsWithChildren) => { +const ApiTokenCard = ({ name, display_name, description, children }: PropsWithChildren) => { return ( {({ field, form: { setFieldValue } }: FieldProps) => ( diff --git a/packages/account/src/Components/api-token/api-token-clipboard.tsx b/packages/account/src/Components/api-token/api-token-clipboard.tsx index cbdc68425fd2..54a07a5e85ef 100644 --- a/packages/account/src/Components/api-token/api-token-clipboard.tsx +++ b/packages/account/src/Components/api-token/api-token-clipboard.tsx @@ -1,7 +1,7 @@ -import React from 'react'; +import { Fragment, useState, useEffect } from 'react'; import { useIsMounted } from '@deriv/shared'; import { Button, Icon, Modal, Text, Popover, useCopyToClipboard } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import { TPopoverAlignment } from '../../Types'; type TApiTokenClipboard = { @@ -26,7 +26,7 @@ const WarningNoteBullet = ({ message }: TWarningNoteBullet) => ( ); const WarningDialogMessage = () => ( - + @@ -37,7 +37,7 @@ const WarningDialogMessage = () => ( /> } />
    -
    + ); const ApiTokenClipboard = ({ @@ -48,8 +48,8 @@ const ApiTokenClipboard = ({ popover_alignment = 'bottom', }: TApiTokenClipboard) => { const [is_copied, copyToClipboard, setIsCopied] = useCopyToClipboard(); - const [is_modal_open, setIsModalOpen] = React.useState(false); - const [is_popover_open, setIsPopoverOpen] = React.useState(false); + const [is_modal_open, setIsModalOpen] = useState(false); + const [is_popover_open, setIsPopoverOpen] = useState(false); const isMounted = useIsMounted(); let timeout_clipboard: NodeJS.Timeout | undefined, timeout_clipboard_2: NodeJS.Timeout | undefined; const has_admin_scope = scopes?.includes('Admin'); @@ -88,7 +88,7 @@ const ApiTokenClipboard = ({ } else onClick(); }; - React.useEffect(() => { + useEffect(() => { return () => { clearTimeout(timeout_clipboard); clearTimeout(timeout_clipboard_2); @@ -96,7 +96,7 @@ const ApiTokenClipboard = ({ }, [timeout_clipboard, timeout_clipboard_2]); return ( - + @@ -125,7 +125,7 @@ const ApiTokenClipboard = ({ onMouseLeave={onMouseLeaveHandler} /> - + ); }; diff --git a/packages/account/src/Components/api-token/api-token-context.ts b/packages/account/src/Components/api-token/api-token-context.ts index 84465b0a9705..ae61881e6c36 100644 --- a/packages/account/src/Components/api-token/api-token-context.ts +++ b/packages/account/src/Components/api-token/api-token-context.ts @@ -1,7 +1,7 @@ -import React from 'react'; +import { createContext } from 'react'; import { TApiContext } from '../../Types'; -const ApiTokenContext = React.createContext({ +const ApiTokenContext = createContext({ api_tokens: [], deleteToken: () => Promise.resolve(), }); diff --git a/packages/account/src/Components/api-token/api-token-delete-button.tsx b/packages/account/src/Components/api-token/api-token-delete-button.tsx index 4f036a8a23a2..bcb9f5a5ca4f 100644 --- a/packages/account/src/Components/api-token/api-token-delete-button.tsx +++ b/packages/account/src/Components/api-token/api-token-delete-button.tsx @@ -1,7 +1,7 @@ -import React from 'react'; +import { useContext, useState, Fragment } from 'react'; import { Button, Icon, Modal, Text, Popover } from '@deriv/components'; import { useIsMounted } from '@deriv/shared'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import ApiTokenContext from './api-token-context'; import { TPopoverAlignment, TFormattedToken, TApiContext } from '../../Types'; import { useDevice } from '@deriv-com/ui'; @@ -13,10 +13,10 @@ type TApiTokenDeleteButton = { const ApiTokenDeleteButton = ({ token, popover_alignment = 'left' }: TApiTokenDeleteButton) => { const { isDesktop } = useDevice(); - const { deleteToken } = React.useContext(ApiTokenContext); - const [is_deleting, setIsDeleting] = React.useState(false); - const [is_loading, setIsLoading] = React.useState(false); - const [is_popover_open, setIsPopoverOpen] = React.useState(false); + const { deleteToken } = useContext(ApiTokenContext); + const [is_deleting, setIsDeleting] = useState(false); + const [is_loading, setIsLoading] = useState(false); + const [is_popover_open, setIsPopoverOpen] = useState(false); const isMounted = useIsMounted(); const getConfirmationBeforeDelete = () => { @@ -44,7 +44,7 @@ const ApiTokenDeleteButton = ({ token, popover_alignment = 'left' }: TApiTokenDe }; return ( - + @@ -89,7 +89,7 @@ const ApiTokenDeleteButton = ({ token, popover_alignment = 'left' }: TApiTokenDe onMouseLeave={onMouseLeaveHandler} /> - + ); }; diff --git a/packages/account/src/Components/api-token/api-token-table-row-cell.tsx b/packages/account/src/Components/api-token/api-token-table-row-cell.tsx index a5e2f7faedba..bd0a797d58e7 100644 --- a/packages/account/src/Components/api-token/api-token-table-row-cell.tsx +++ b/packages/account/src/Components/api-token/api-token-table-row-cell.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { PropsWithChildren } from 'react'; import clsx from 'clsx'; import { Text } from '@deriv/components'; @@ -11,7 +11,7 @@ const ApiTokenTableRowCell = ({ className, children, should_bypass_text, -}: React.PropsWithChildren>) => { +}: PropsWithChildren>) => { if (should_bypass_text) { return {children}; } diff --git a/packages/account/src/Components/api-token/api-token-table-row-header.tsx b/packages/account/src/Components/api-token/api-token-table-row-header.tsx index 4e8166cc233a..2a1f8542d437 100644 --- a/packages/account/src/Components/api-token/api-token-table-row-header.tsx +++ b/packages/account/src/Components/api-token/api-token-table-row-header.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Text } from '@deriv/components'; type TApiTokenTableRowHeader = { diff --git a/packages/account/src/Components/api-token/api-token-table-row-token-cell.tsx b/packages/account/src/Components/api-token/api-token-table-row-token-cell.tsx index 581d7cfb800e..c61ab1d25a54 100644 --- a/packages/account/src/Components/api-token/api-token-table-row-token-cell.tsx +++ b/packages/account/src/Components/api-token/api-token-table-row-token-cell.tsx @@ -1,6 +1,6 @@ -import React from 'react'; +import { useState } from 'react'; import { Icon, Text, Popover } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import ApiTokenClipboard from './api-token-clipboard'; type TApiTokenTableRowTokenCell = { @@ -17,7 +17,7 @@ const HiddenPasswordDots = () => ( ); const ApiTokenTableRowTokenCell = ({ token, scopes }: TApiTokenTableRowTokenCell) => { - const [should_show_token, setShouldShowToken] = React.useState(false); + const [should_show_token, setShouldShowToken] = useState(false); const toggleTokenVisibility = () => { setShouldShowToken(prev_value => !prev_value); diff --git a/packages/account/src/Components/api-token/api-token-table.tsx b/packages/account/src/Components/api-token/api-token-table.tsx index 379260ae15b1..9763c22a0e73 100644 --- a/packages/account/src/Components/api-token/api-token-table.tsx +++ b/packages/account/src/Components/api-token/api-token-table.tsx @@ -1,7 +1,7 @@ -import React from 'react'; +import { useContext, Fragment } from 'react'; import { Text } from '@deriv/components'; import { formatDate } from '@deriv/shared'; -import { Localize, localize } from '@deriv/translations'; +import { Localize, useTranslations } from '@deriv-com/translations'; import { useDevice } from '@deriv-com/ui'; import ApiTokenContext from './api-token-context'; import ApiTokenDeleteButton from './api-token-delete-button'; @@ -12,8 +12,9 @@ import ApiTokenTableRowTokenCell from './api-token-table-row-token-cell'; import { TApiContext, TToken } from '../../Types'; const ApiTokenTable = () => { - const { api_tokens } = React.useContext(ApiTokenContext); + const { api_tokens } = useContext(ApiTokenContext); const { isDesktop } = useDevice(); + const { localize } = useTranslations(); const formatTokenScopes = (str: string) => { const replace_filter = str.replace(/[-_]/g, ' '); @@ -51,7 +52,7 @@ const ApiTokenTable = () => { }; if (!isDesktop) { return ( - + {api_tokens?.map((token_data: TToken) => { const token = getScopeValue(token_data); return ( @@ -102,7 +103,7 @@ const ApiTokenTable = () => {
    ); })} - + ); } diff --git a/packages/account/src/Components/article/article.tsx b/packages/account/src/Components/article/article.tsx index 7f72feead6e6..fff2b6ea9b52 100644 --- a/packages/account/src/Components/article/article.tsx +++ b/packages/account/src/Components/article/article.tsx @@ -1,12 +1,12 @@ -import React from 'react'; +import { ReactNode, Fragment } from 'react'; import { Icon, Text } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import './article.scss'; import clsx from 'clsx'; export type TArticle = { title: JSX.Element | string; - descriptions: Array; + descriptions: Array; onClickLearnMore?: () => void; className?: string; }; @@ -21,7 +21,7 @@ const Article = ({ title, descriptions, onClickLearnMore, className }: TArticle) {title}
    {has_descriptions && ( - + {has_single_description ? ( {descriptions[0]} @@ -37,7 +37,7 @@ const Article = ({ title, descriptions, onClickLearnMore, className }: TArticle) ))}
)} -
+ )} {onClickLearnMore && (
diff --git a/packages/account/src/Components/demo-message/__test__/demo-message.spec.tsx b/packages/account/src/Components/demo-message/__tests__/demo-message.spec.tsx similarity index 100% rename from packages/account/src/Components/demo-message/__test__/demo-message.spec.tsx rename to packages/account/src/Components/demo-message/__tests__/demo-message.spec.tsx diff --git a/packages/account/src/Components/demo-message/demo-message.tsx b/packages/account/src/Components/demo-message/demo-message.tsx index 43588e720d5c..fe409688d96a 100644 --- a/packages/account/src/Components/demo-message/demo-message.tsx +++ b/packages/account/src/Components/demo-message/demo-message.tsx @@ -1,16 +1,19 @@ -import { localize } from '@deriv/translations'; +import { useTranslations } from '@deriv-com/translations'; import IconWithMessage from '../icon-with-message'; type TDemoMessage = { has_button?: boolean; }; -const DemoMessage = ({ has_button }: TDemoMessage) => ( - -); +const DemoMessage = ({ has_button }: TDemoMessage) => { + const { localize } = useTranslations(); + return ( + + ); +}; export default DemoMessage; diff --git a/packages/account/src/Components/error-component/error-component.spec.tsx b/packages/account/src/Components/error-component/__tests__/error-component.spec.tsx similarity index 89% rename from packages/account/src/Components/error-component/error-component.spec.tsx rename to packages/account/src/Components/error-component/__tests__/error-component.spec.tsx index 8c7091e8656b..9c7bd47ed4be 100644 --- a/packages/account/src/Components/error-component/error-component.spec.tsx +++ b/packages/account/src/Components/error-component/__tests__/error-component.spec.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { screen, render } from '@testing-library/react'; -import ErrorComponent from './error-component'; +import ErrorComponent from '../error-component'; jest.mock('@deriv/components', () => ({ ...jest.requireActual('@deriv/components'), diff --git a/packages/account/src/Components/error-component/error-component.tsx b/packages/account/src/Components/error-component/error-component.tsx index 5f8dd903d2d2..b7795ac85fd3 100644 --- a/packages/account/src/Components/error-component/error-component.tsx +++ b/packages/account/src/Components/error-component/error-component.tsx @@ -1,6 +1,5 @@ -import React from 'react'; import { PageError } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import { routes } from '@deriv/shared'; type TErrorComponent = { diff --git a/packages/account/src/Components/error-component/index.js b/packages/account/src/Components/error-component/index.js deleted file mode 100644 index d25ba71f1f18..000000000000 --- a/packages/account/src/Components/error-component/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ErrorComponent from './error-component.tsx'; - -export default ErrorComponent; diff --git a/packages/account/src/Components/error-component/index.ts b/packages/account/src/Components/error-component/index.ts new file mode 100644 index 000000000000..8585809410a1 --- /dev/null +++ b/packages/account/src/Components/error-component/index.ts @@ -0,0 +1,3 @@ +import ErrorComponent from './error-component'; + +export default ErrorComponent; diff --git a/packages/account/src/Components/self-exclusion/self-exclusion-article-content.tsx b/packages/account/src/Components/self-exclusion/self-exclusion-article-content.tsx index 32eacf25b05e..91d9f1696a3c 100644 --- a/packages/account/src/Components/self-exclusion/self-exclusion-article-content.tsx +++ b/packages/account/src/Components/self-exclusion/self-exclusion-article-content.tsx @@ -1,7 +1,7 @@ +import { useContext } from 'react'; import clsx from 'clsx'; -import React from 'react'; -import { getStaticUrl } from '@deriv/shared'; -import { Localize, localize } from '@deriv/translations'; +import { URLUtils } from '@deriv-com/utils'; +import { Localize, useTranslations } from '@deriv-com/translations'; import { Button, Icon, OpenLiveChatLink, Popup, Text } from '@deriv/components'; import SelfExclusionContext from './self-exclusion-context'; @@ -24,7 +24,7 @@ export const selfExclusionArticleItems = ({ is_eu, is_app_settings }: TSelfExclu className='link' rel='noopener noreferrer' target='_blank' - href={getStaticUrl('/responsible')} + href={URLUtils.getDerivStaticURL('/responsible')} />, ]} /> @@ -56,7 +56,7 @@ export const selfExclusionArticleItems = ({ is_eu, is_app_settings }: TSelfExclu className='link' rel='noopener noreferrer' target='_blank' - href={getStaticUrl('/contact_us')} + href={URLUtils.getDerivStaticURL('/contact_us')} />, ]} /> @@ -78,7 +78,7 @@ export const selfExclusionArticleItems = ({ is_eu, is_app_settings }: TSelfExclu className='link' rel='noopener noreferrer' target='_blank' - href={getStaticUrl('/responsible')} + href={URLUtils.getDerivStaticURL('/responsible')} />, ]} /> @@ -119,7 +119,8 @@ export const selfExclusionArticleItems = ({ is_eu, is_app_settings }: TSelfExclu }; const SelfExclusionArticleContent = ({ is_in_overlay }: Partial) => { - const { is_app_settings, toggleArticle, overlay_ref, is_eu } = React.useContext(SelfExclusionContext); + const { is_app_settings, toggleArticle, overlay_ref, is_eu } = useContext(SelfExclusionContext); + const { localize } = useTranslations(); const keyed_article_items = selfExclusionArticleItems({ is_eu, is_app_settings }); if (is_in_overlay) { diff --git a/packages/account/src/Components/self-exclusion/self-exclusion-confirm-page.tsx b/packages/account/src/Components/self-exclusion/self-exclusion-confirm-page.tsx index 78a7953b032c..92e8accd01ca 100644 --- a/packages/account/src/Components/self-exclusion/self-exclusion-confirm-page.tsx +++ b/packages/account/src/Components/self-exclusion/self-exclusion-confirm-page.tsx @@ -1,22 +1,24 @@ -import React from 'react'; +import { useContext, Fragment } from 'react'; import { Button, Icon, StaticUrl, Text } from '@deriv/components'; import { FormikValues, useFormikContext } from 'formik'; -import { formatMoney, toMoment } from '@deriv/shared'; -import { Localize, localize } from '@deriv/translations'; +import { toMoment } from '@deriv/shared'; +import { FormatUtils, CurrencyConstants } from '@deriv-com/utils'; +import { Localize, useTranslations } from '@deriv-com/translations'; import SelfExclusionContext from './self-exclusion-context'; import SelfExclusionConfirmLimits from './self-exclusion-confirm-limits'; const SelfExclusionConfirmPage = () => { const { backFromConfirmLimits, currency, currency_display, exclusion_texts, is_eu, state } = - React.useContext(SelfExclusionContext); + useContext(SelfExclusionContext); const { isSubmitting, values } = useFormikContext(); + const { localize } = useTranslations(); if (state?.show_confirm) { return ; } return ( - +
@@ -57,7 +59,9 @@ const SelfExclusionConfirmPage = () => { if (need_date_format.includes(key)) { value = toMoment(values[key]).format('DD/MM/YYYY'); } else if (need_money_format.includes(key)) { - value = `${formatMoney(currency, +values[key], true)} ${currency_display}`; + value = `${FormatUtils.formatMoney(+values[key], { + currency: currency as CurrencyConstants.Currency, + })} ${currency_display}`; } else if (need_minutes.includes(key)) { value = localize('{{value}} mins', { value: values[key] }); } else if (need_amount.includes(key)) { @@ -106,7 +110,7 @@ const SelfExclusionConfirmPage = () => { )}
-
+ ); }; diff --git a/packages/account/src/Components/self-exclusion/self-exclusion-context.tsx b/packages/account/src/Components/self-exclusion/self-exclusion-context.tsx index 7416191b2467..4e3b285489ba 100644 --- a/packages/account/src/Components/self-exclusion/self-exclusion-context.tsx +++ b/packages/account/src/Components/self-exclusion/self-exclusion-context.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { createContext } from 'react'; import { FormikHelpers, FormikValues } from 'formik'; export type TSelfExclusionContext = { @@ -23,7 +23,7 @@ export type TSelfExclusionContext = { backToReview?: () => void; }; -const SelfExclusionContext = React.createContext({ +const SelfExclusionContext = createContext({ overlay_ref: document.createElement('div'), currency: '', handleSubmit: () => null, diff --git a/packages/account/src/Components/self-exclusion/self-exclusion-footer.tsx b/packages/account/src/Components/self-exclusion/self-exclusion-footer.tsx index 9a8a27d6fac1..3ad139dacfcf 100644 --- a/packages/account/src/Components/self-exclusion/self-exclusion-footer.tsx +++ b/packages/account/src/Components/self-exclusion/self-exclusion-footer.tsx @@ -1,17 +1,17 @@ -import React from 'react'; +import { useContext, Fragment } from 'react'; import { createPortal } from 'react-dom'; import { FormikValues, useFormikContext } from 'formik'; import { Button, Text } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import SelfExclusionContext from './self-exclusion-context'; const SelfExclusionFooter = () => { - const { footer_ref, goToConfirm, toggleArticle } = React.useContext(SelfExclusionContext); + const { footer_ref, goToConfirm, toggleArticle } = useContext(SelfExclusionContext); const { dirty, isSubmitting, isValid, values } = useFormikContext(); if (footer_ref) { return createPortal( - <> +
@@ -27,7 +27,7 @@ const SelfExclusionFooter = () => { > - , + , footer_ref ); } diff --git a/packages/account/src/Components/self-exclusion/self-exclusion-form.tsx b/packages/account/src/Components/self-exclusion/self-exclusion-form.tsx index b60cf260e497..5ad052078b73 100644 --- a/packages/account/src/Components/self-exclusion/self-exclusion-form.tsx +++ b/packages/account/src/Components/self-exclusion/self-exclusion-form.tsx @@ -1,11 +1,11 @@ -import React from 'react'; +import { useContext } from 'react'; import { Form, Formik } from 'formik'; import SelfExclusionContext from './self-exclusion-context'; import SelfExclusionConfirmPage from './self-exclusion-confirm-page'; import SelfExclusionInputs from './self-exclusion-inputs'; const SelfExclusionForm = () => { - const { handleSubmit, state, validateFields } = React.useContext(SelfExclusionContext); + const { handleSubmit, state, validateFields } = useContext(SelfExclusionContext); return ( diff --git a/packages/account/src/Components/self-exclusion/self-exclusion-inputs.tsx b/packages/account/src/Components/self-exclusion/self-exclusion-inputs.tsx index 98776d6a22d3..732b19340446 100644 --- a/packages/account/src/Components/self-exclusion/self-exclusion-inputs.tsx +++ b/packages/account/src/Components/self-exclusion/self-exclusion-inputs.tsx @@ -1,9 +1,9 @@ -import React from 'react'; +import { ReactElement, useContext, Fragment, FunctionComponent, ChangeEvent } from 'react'; import clsx from 'clsx'; import { Button, DatePicker, Input, Text } from '@deriv/components'; import { epochToMoment, toMoment } from '@deriv/shared'; import { useDevice } from '@deriv-com/ui'; -import { Localize, localize } from '@deriv/translations'; +import { Localize, useTranslations } from '@deriv-com/translations'; import { Field, FormikComputedProps, @@ -18,7 +18,7 @@ import SelfExclusionContext from './self-exclusion-context'; import SelfExclusionFooter from './self-exclusion-footer'; type TSectionTitle = { - title: React.ReactElement; + title: ReactElement; has_border_line?: boolean; }; @@ -50,10 +50,10 @@ const SectionTitle = ({ title, has_border_line }: TSectionTitle) => { }; const StakeLossAndLimitsInputs = () => { - const { currency_display, getMaxLength } = React.useContext(SelfExclusionContext); + const { currency_display, getMaxLength } = useContext(SelfExclusionContext); const { errors, handleBlur, handleChange, values }: TFormikContext = useFormikContext(); return ( - + } />
@@ -186,17 +186,18 @@ const StakeLossAndLimitsInputs = () => {
-
+ ); }; const SessionAndLoginLimitsInputs = () => { - const { is_tablet, session_duration_digits } = React.useContext(SelfExclusionContext); + const { is_tablet, session_duration_digits } = useContext(SelfExclusionContext); const { errors, handleBlur, handleChange, setFieldValue, values }: TFormikContext = useFormikContext(); + const { localize } = useTranslations(); return ( - + } />
@@ -233,7 +234,7 @@ const SessionAndLoginLimitsInputs = () => { className='da-self-exclusion__input' label={localize('Date')} value={values.timeout_until && epochToMoment(values.timeout_until)} - onChange={({ target }: React.ChangeEvent) => + onChange={({ target }: ChangeEvent) => setFieldValue( 'timeout_until', target?.value ? toMoment(target.value).unix() : '', @@ -261,7 +262,7 @@ const SessionAndLoginLimitsInputs = () => { className='da-self-exclusion__input' label={localize('Date')} value={values.exclude_until} - onChange={({ target }: React.ChangeEvent) => + onChange={({ target }: ChangeEvent) => setFieldValue( 'exclude_until', target?.value ? toMoment(target.value).format('YYYY-MM-DD') : '', @@ -277,16 +278,17 @@ const SessionAndLoginLimitsInputs = () => {
-
+ ); }; const MaximumAccountBalanceAndOpenPositionsInputs = () => { - const { currency_display, getMaxLength } = React.useContext(SelfExclusionContext); + const { currency_display, getMaxLength } = useContext(SelfExclusionContext); const { errors, handleBlur, handleChange, values }: TFormikContext = useFormikContext(); + const { localize } = useTranslations(); return ( - + } />
@@ -332,12 +334,12 @@ const MaximumAccountBalanceAndOpenPositionsInputs = () => {
-
+ ); }; const MaximumDepositLimitInputs = () => { - const { currency, is_mf, getMaxLength } = React.useContext(SelfExclusionContext); + const { currency, is_mf, getMaxLength } = useContext(SelfExclusionContext); const { errors, handleBlur, handleChange, values }: TFormikContext = useFormikContext(); if (!is_mf) { @@ -345,7 +347,7 @@ const MaximumDepositLimitInputs = () => { } return ( - + } />
@@ -421,14 +423,14 @@ const MaximumDepositLimitInputs = () => {
-
+ ); }; const SelfExclusionInputs = () => { - const { footer_ref, goToConfirm, is_app_settings } = React.useContext(SelfExclusionContext); + const { footer_ref, goToConfirm, is_app_settings } = useContext(SelfExclusionContext); const { dirty, isSubmitting, isValid, values }: TFormikContext = useFormikContext(); - const versions: Record }> = { + const versions: Record }> = { // App-specific settings, i.e. user accessing app settings from App Store or // through DWallet App header. app_settings: { @@ -448,16 +450,16 @@ const SelfExclusionInputs = () => { }; return ( - + {Object.keys(versions).map((version_name: string) => { const version = versions[version_name]; if (!version.condition) return null; return ( - + {version.components.map((Component, component_idx) => ( ))} - + ); })} {footer_ref ? ( @@ -476,7 +478,7 @@ const SelfExclusionInputs = () => {
)} - + ); }; diff --git a/packages/account/src/Components/self-exclusion/self-exclusion-modal.tsx b/packages/account/src/Components/self-exclusion/self-exclusion-modal.tsx index f50166c05337..cc3c3b19c8c8 100644 --- a/packages/account/src/Components/self-exclusion/self-exclusion-modal.tsx +++ b/packages/account/src/Components/self-exclusion/self-exclusion-modal.tsx @@ -1,10 +1,10 @@ -import React from 'react'; +import { useContext } from 'react'; import { Modal, ThemedScrollbars } from '@deriv/components'; import SelfExclusionContext from './self-exclusion-context'; import SelfExclusionArticleContent from './self-exclusion-article-content'; const SelfExclusionModal = () => { - const { state, toggleArticle } = React.useContext(SelfExclusionContext); + const { state, toggleArticle } = useContext(SelfExclusionContext); return ( diff --git a/packages/account/src/Components/self-exclusion/self-exclusion-wrapper.tsx b/packages/account/src/Components/self-exclusion/self-exclusion-wrapper.tsx index d712687b3b29..9762d5256b21 100644 --- a/packages/account/src/Components/self-exclusion/self-exclusion-wrapper.tsx +++ b/packages/account/src/Components/self-exclusion/self-exclusion-wrapper.tsx @@ -1,12 +1,12 @@ -import React from 'react'; +import { ReactNode, useContext } from 'react'; import clsx from 'clsx'; import { Div100vhContainer, ThemedScrollbars } from '@deriv/components'; import SelfExclusionArticle from './self-exclusion-article'; import SelfExclusionContext from './self-exclusion-context'; import { useDevice } from '@deriv-com/ui'; -const SelfExclusionWrapper = ({ children }: { children?: React.ReactNode }) => { - const { is_app_settings, is_wrapper_bypassed, state } = React.useContext(SelfExclusionContext); +const SelfExclusionWrapper = ({ children }: { children?: ReactNode }) => { + const { is_app_settings, is_wrapper_bypassed, state } = useContext(SelfExclusionContext); const { isDesktop } = useDevice(); // "is_wrapper_bypassed" is currently used for a hosted . diff --git a/packages/account/src/Components/sent-email-modal/sent-email-modal.tsx b/packages/account/src/Components/sent-email-modal/sent-email-modal.tsx index 6922a9a537b3..b529f47b1c1d 100644 --- a/packages/account/src/Components/sent-email-modal/sent-email-modal.tsx +++ b/packages/account/src/Components/sent-email-modal/sent-email-modal.tsx @@ -1,5 +1,5 @@ -import React from 'react'; -import { localize, Localize } from '@deriv/translations'; +import { ReactElement } from 'react'; +import { Localize, useTranslations, localize } from '@deriv-com/translations'; import { Div100vhContainer, Icon, MobileDialog, Modal, SendEmailTemplate, Text, Popover } from '@deriv/components'; import { getPlatformSettings, CFD_PLATFORMS } from '@deriv/shared'; import { useDevice } from '@deriv-com/ui'; @@ -16,7 +16,7 @@ type TSentEmailModal = { type TNoEmailContentItem = { key: string; icon: string; - content: string | React.ReactElement; + content: string | ReactElement; }; const getNoEmailContentStrings = (): TNoEmailContentItem[] => { @@ -57,9 +57,10 @@ const SentEmailModal = ({ onClose, }: TSentEmailModal) => { const { isDesktop } = useDevice(); + const { localize } = useTranslations(); const getSubtitle = () => { - let subtitle: string | React.ReactElement = ''; + let subtitle: string | ReactElement = ''; switch (identifier_title) { case CFD_PLATFORMS.DXTRADE: subtitle = ( @@ -113,7 +114,7 @@ const SentEmailModal = ({ /> ) : null; - const sent_email_template: React.ReactElement = ( + const sent_email_template: ReactElement = ( void; @@ -23,6 +22,7 @@ const UnlinkAccountModal = ({ onClose, is_open, identifier_title, onClickSendEma onClose(); onClickSendEmail(); }; + const { localize } = useTranslations(); return ( diff --git a/packages/account/src/Components/unlink-modal/__tests__/unlink-modal.spec.tsx b/packages/account/src/Components/unlink-modal/__tests__/unlink-modal.spec.tsx deleted file mode 100644 index 4fa1024b9c61..000000000000 --- a/packages/account/src/Components/unlink-modal/__tests__/unlink-modal.spec.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import { render, screen } from '@testing-library/react'; -import { TUnlinkModal, UnlinkModal } from '../unlink-modal'; - -const modalRoot: HTMLDivElement = document.createElement('div'); -modalRoot.setAttribute('id', 'modal_root'); -document.body.appendChild(modalRoot); - -describe('', () => { - const mock_props: TUnlinkModal = { - identifier_title: 'test title', - is_open: true, - onClose: jest.fn(), - onClickSendEmail: jest.fn(), - }; - - it('should show the proper messages', () => { - render(); - - expect(screen.getByText('Are you sure you want to unlink from test title?')).toBeInTheDocument(); - expect(screen.getByText('You will need to set a password to complete the process.')).toBeInTheDocument(); - expect(screen.getByText('Unlink from test title')).toBeInTheDocument(); - }); -}); diff --git a/packages/account/src/Components/unlink-modal/index.ts b/packages/account/src/Components/unlink-modal/index.ts deleted file mode 100644 index 8d75e1af2b6e..000000000000 --- a/packages/account/src/Components/unlink-modal/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { UnlinkModal } from './unlink-modal'; - -export default UnlinkModal; diff --git a/packages/account/src/Components/unlink-modal/unlink-modal.tsx b/packages/account/src/Components/unlink-modal/unlink-modal.tsx deleted file mode 100644 index 2269521f9e4e..000000000000 --- a/packages/account/src/Components/unlink-modal/unlink-modal.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react'; -import { Button, Modal, Text } from '@deriv/components'; -import { localize, Localize } from '@deriv/translations'; - -export type TUnlinkModal = { - identifier_title: string; - is_open: boolean; - onClose: () => void; - onClickSendEmail: () => void; -}; - -export const UnlinkModal = ({ identifier_title, is_open, onClickSendEmail, onClose }: TUnlinkModal) => { - return ( - - } - toggleModal={onClose} - width='440px' - > - - - {localize('You will need to set a password to complete the process.')} - - - - - - - ); -}; diff --git a/packages/account/src/Constants/api-token-card-details.tsx b/packages/account/src/Constants/api-token-card-details.tsx index 135bfff62530..ab17ec561378 100644 --- a/packages/account/src/Constants/api-token-card-details.tsx +++ b/packages/account/src/Constants/api-token-card-details.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; export const API_TOKEN_CARD_DETAILS = [ { diff --git a/packages/account/src/Constants/closing-account-config.tsx b/packages/account/src/Constants/closing-account-config.tsx index 7d124698e3b4..aca10e07919f 100644 --- a/packages/account/src/Constants/closing-account-config.tsx +++ b/packages/account/src/Constants/closing-account-config.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; export const MAX_ALLOWED_REASONS_FOR_CLOSING_ACCOUNT = 3; export const CHARACTER_LIMIT_FOR_CLOSING_ACCOUNT = 110; diff --git a/packages/account/src/Constants/connected-apps-config.tsx b/packages/account/src/Constants/connected-apps-config.tsx index 18fd3e3f4b6a..d59bb13c51ae 100644 --- a/packages/account/src/Constants/connected-apps-config.tsx +++ b/packages/account/src/Constants/connected-apps-config.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; export const CONNECTED_APPS_INFO_BULLETS = [ { diff --git a/packages/account/src/Constants/get-login-history-table-headers.tsx b/packages/account/src/Constants/get-login-history-table-headers.tsx index 213df905095d..18f84e20886a 100644 --- a/packages/account/src/Constants/get-login-history-table-headers.tsx +++ b/packages/account/src/Constants/get-login-history-table-headers.tsx @@ -1,4 +1,4 @@ -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; const getLoginHistoryTableHeaders = () => ({ date_title: , diff --git a/packages/account/src/Containers/reset-trading-password.tsx b/packages/account/src/Containers/reset-trading-password.tsx index be15a2ff43d3..3fe86c01272e 100644 --- a/packages/account/src/Containers/reset-trading-password.tsx +++ b/packages/account/src/Containers/reset-trading-password.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useRef } from 'react'; import { useLocation } from 'react-router-dom'; import { CFD_PLATFORMS } from '@deriv/shared'; import { observer, useStore } from '@deriv/stores'; @@ -9,7 +9,7 @@ const ResetTradingPassword = observer(() => { const { ui, client } = useStore(); const { enableApp, disableApp, is_loading, setCFDPasswordResetModal, is_cfd_reset_password_modal_enabled } = ui; const location = useLocation(); - const platform = React.useRef(''); + const platform = useRef(''); const query_params = new URLSearchParams(location.search); const cfd_platform = /^trading_platform_(.*)_password_reset$/.exec(query_params.get('action') ?? '')?.[1]; if (cfd_platform) { diff --git a/packages/account/src/Helpers/utils.tsx b/packages/account/src/Helpers/utils.tsx index 70147b7f7faf..4e41947ea623 100644 --- a/packages/account/src/Helpers/utils.tsx +++ b/packages/account/src/Helpers/utils.tsx @@ -11,7 +11,7 @@ import { IDV_ERROR_STATUS, AUTH_STATUS_CODES, } from '@deriv/shared'; -import { localize } from '@deriv/translations'; +import { localize } from '@deriv-com/translations'; import { getIDVDocuments } from '../Configs/idv-document-config'; import { TServerError } from '../Types'; import { LANGUAGE_CODES } from '../Constants/onfido'; diff --git a/packages/account/src/Modules/Page404/Components/Page404.tsx b/packages/account/src/Modules/Page404/Components/Page404.tsx index 981431ce85c8..2a45f147b80a 100644 --- a/packages/account/src/Modules/Page404/Components/Page404.tsx +++ b/packages/account/src/Modules/Page404/Components/Page404.tsx @@ -1,21 +1,23 @@ -import React from 'react'; import { PageError } from '@deriv/components'; import { routes, getUrlBase } from '@deriv/shared'; -import { localize } from '@deriv/translations'; +import { useTranslations } from '@deriv-com/translations'; -const Page404 = () => ( - -); +const Page404 = () => { + const { localize } = useTranslations(); + return ( + + ); +}; export default Page404; diff --git a/packages/account/src/Sections/Security/AccountClosed/account-closed.tsx b/packages/account/src/Sections/Security/AccountClosed/account-closed.tsx index c73992325596..3c1a975050f5 100644 --- a/packages/account/src/Sections/Security/AccountClosed/account-closed.tsx +++ b/packages/account/src/Sections/Security/AccountClosed/account-closed.tsx @@ -1,24 +1,24 @@ -import React from 'react'; +import { useState, useCallback, useEffect } from 'react'; import { Modal, Text } from '@deriv/components'; -import { Localize } from '@deriv/translations'; import { observer, useStore } from '@deriv/stores'; -import { getStaticUrl } from '@deriv/shared'; +import { URLUtils } from '@deriv-com/utils'; +import { Localize } from '@deriv-com/translations'; const AccountClosed = observer(() => { const { client } = useStore(); const { logout } = client; - const [is_modal_open, setModalState] = React.useState(true); - const [timer, setTimer] = React.useState(10); + const [is_modal_open, setModalState] = useState(true); + const [timer, setTimer] = useState(10); - const counter = React.useCallback(() => { + const counter = useCallback(() => { if (timer > 0) { setTimer(timer - 1); } else { - window.location.href = getStaticUrl('/'); + window.location.href = URLUtils.getDerivStaticURL('/'); } }, [timer]); - React.useEffect(() => { + useEffect(() => { window.history.pushState(null, '', '/'); logout(); const handleInterval = setInterval(() => counter(), 1000); diff --git a/packages/account/src/Sections/Security/AccountLimits/account-limits-info.tsx b/packages/account/src/Sections/Security/AccountLimits/account-limits-info.tsx index 3afa2b7b31b7..d39f0119d0cc 100644 --- a/packages/account/src/Sections/Security/AccountLimits/account-limits-info.tsx +++ b/packages/account/src/Sections/Security/AccountLimits/account-limits-info.tsx @@ -1,6 +1,6 @@ -import React from 'react'; +import { Fragment } from 'react'; import { Icon, Text } from '@deriv/components'; -import { localize, Localize } from '@deriv/translations'; +import { localize, Localize } from '@deriv-com/translations'; const currency_name_map = { BTC: { display_code: 'BTC', name: localize('Bitcoin') }, @@ -22,9 +22,9 @@ type TAccountLimitsInfo = { }; const AccountLimitsInfo = ({ currency, is_virtual = false }: TAccountLimitsInfo) => ( - <> + {!is_virtual && ( - <> + )} - + )} - + ); export default AccountLimitsInfo; diff --git a/packages/account/src/Sections/Security/ApiToken/api-token.tsx b/packages/account/src/Sections/Security/ApiToken/api-token.tsx index 488f669118ed..bf8f427fcbac 100644 --- a/packages/account/src/Sections/Security/ApiToken/api-token.tsx +++ b/packages/account/src/Sections/Security/ApiToken/api-token.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useRef, useReducer, useEffect, ChangeEvent } from 'react'; import clsx from 'clsx'; import { Formik, Form, Field, FormikErrors, FieldProps, FormikHelpers } from 'formik'; import { ApiToken as TApitoken, APITokenResponse as TAPITokenResponse } from '@deriv/api-types'; @@ -6,7 +6,7 @@ import { Timeline, Input, Button, ThemedScrollbars, Loading } from '@deriv/compo import { useDevice } from '@deriv-com/ui'; import { getPropertyValue, WS } from '@deriv/shared'; import { observer, useStore } from '@deriv/stores'; -import { Localize, localize } from '@deriv/translations'; +import { Localize, useTranslations } from '@deriv-com/translations'; import { TToken } from '../../../Types'; import { ApiTokenContext, ApiTokenArticle, ApiTokenCard, ApiTokenTable } from '../../../Components/api-token'; import InlineNoteWithIcon from '../../../Components/inline-note-with-icon'; @@ -36,10 +36,11 @@ type TApiTokenForm = { const ApiToken = observer(() => { const { client } = useStore(); const { is_switching } = client; - const prev_is_switching = React.useRef(is_switching); + const prev_is_switching = useRef(is_switching); const { isDesktop } = useDevice(); + const { localize } = useTranslations(); - const [state, setState] = React.useReducer( + const [state, setState] = useReducer( (prev_state: Partial, value: Partial) => ({ ...prev_state, ...value, @@ -55,10 +56,10 @@ const ApiToken = observer(() => { } ); - const handle_submit_timeout_ref = React.useRef(); - const delete_token_timeout_ref = React.useRef(); + const handle_submit_timeout_ref = useRef(); + const delete_token_timeout_ref = useRef(); - React.useEffect(() => { + useEffect(() => { getApiTokens(); return () => { @@ -67,7 +68,7 @@ const ApiToken = observer(() => { }; }, []); - React.useEffect(() => { + useEffect(() => { if (prev_is_switching.current !== is_switching) { prev_is_switching.current = is_switching; getApiTokens(); @@ -248,7 +249,7 @@ const ApiToken = observer(() => { className='da-api-token__input dc-input__input-group' label={localize('Token name')} value={values.token_name} - onChange={(e: React.ChangeEvent) => { + onChange={(e: ChangeEvent) => { setFieldTouched('token_name', true); handleChange(e); }} diff --git a/packages/account/src/Sections/Security/ClosingAccount/closing-account-general-error-content.tsx b/packages/account/src/Sections/Security/ClosingAccount/closing-account-general-error-content.tsx index 8a277b3aec26..678165940bf2 100644 --- a/packages/account/src/Sections/Security/ClosingAccount/closing-account-general-error-content.tsx +++ b/packages/account/src/Sections/Security/ClosingAccount/closing-account-general-error-content.tsx @@ -1,6 +1,6 @@ -import React from 'react'; +import { Fragment } from 'react'; import { Button } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; type TClosingAccountGeneralErrorContentProps = { message: string; @@ -8,7 +8,7 @@ type TClosingAccountGeneralErrorContentProps = { }; const ClosingAccountGeneralErrorContent = ({ message, onClick }: TClosingAccountGeneralErrorContentProps) => ( - +
{message}
@@ -17,7 +17,7 @@ const ClosingAccountGeneralErrorContent = ({ message, onClick }: TClosingAccount -
+ ); export default ClosingAccountGeneralErrorContent; diff --git a/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-has-pending-conditions.tsx b/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-has-pending-conditions.tsx index 58cdb0452655..3b34d675f4f3 100644 --- a/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-has-pending-conditions.tsx +++ b/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-has-pending-conditions.tsx @@ -1,9 +1,10 @@ -import React from 'react'; +import { Fragment } from 'react'; import { DetailsOfEachMT5Loginid } from '@deriv/api-types'; import { Button, Money, ThemedScrollbars } from '@deriv/components'; -import { CFD_PLATFORMS, formatMoney } from '@deriv/shared'; +import { CFD_PLATFORMS } from '@deriv/shared'; import { observer, useStore } from '@deriv/stores'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; +import { FormatUtils, CurrencyConstants } from '@deriv-com/utils'; import { TAccounts, TDetailsOfDerivAccount, @@ -124,7 +125,7 @@ const ClosingAccountHasPendingConditions = observer( } return ( - + {!!deriv_open_positions.length && ( ) @@ -239,7 +242,7 @@ const ClosingAccountHasPendingConditions = observer( - + ); } ); diff --git a/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-balance.tsx b/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-balance.tsx index d5d0b0533213..8d712e55a39c 100644 --- a/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-balance.tsx +++ b/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-balance.tsx @@ -1,15 +1,8 @@ -import React from 'react'; import { Money } from '@deriv/components'; -import { - CFD_PLATFORMS, - formatMoney, - getCFDAccount, - getCFDAccountDisplay, - getCFDPlatformLabel, - getMT5Icon, -} from '@deriv/shared'; +import { CFD_PLATFORMS, getCFDAccount, getCFDAccountDisplay, getCFDPlatformLabel, getMT5Icon } from '@deriv/shared'; +import { FormatUtils, CurrencyConstants } from '@deriv-com/utils'; import { observer, useStore } from '@deriv/stores'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import { TCFDPlatform, TDetailsOfDerivXAccount, TDetailsOfMT5Account } from '../../../../Types'; import ClosingAccountPendingWrapper from './closing-account-pending-wrapper'; import ClosingAccountPendingContent from './closing-account-pending-content'; @@ -75,7 +68,9 @@ const ClosingAccountPendingBalance = observer(({ platform, account_balance }: TC account.currency && ( ) diff --git a/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-content.tsx b/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-content.tsx index 77ca44523eb6..634bfdf849a1 100644 --- a/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-content.tsx +++ b/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-content.tsx @@ -1,11 +1,11 @@ -import React from 'react'; +import { ReactNode } from 'react'; import { Icon, Text } from '@deriv/components'; type TClosingAccountPendingContentProps = { currency_icon: string; loginid?: string; - title?: React.ReactNode; - value: React.ReactNode; + title?: ReactNode; + value: ReactNode; }; const ClosingAccountPendingContent = ({ currency_icon, loginid, title, value }: TClosingAccountPendingContentProps) => ( diff --git a/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-positions.tsx b/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-positions.tsx index cc5e7a27b434..fa372338304f 100644 --- a/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-positions.tsx +++ b/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-positions.tsx @@ -1,7 +1,6 @@ -import React from 'react'; import { CFD_PLATFORMS, getCFDAccount, getCFDAccountDisplay, getCFDPlatformLabel, getMT5Icon } from '@deriv/shared'; import { observer, useStore } from '@deriv/stores'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import { TCFDPlatform, TDetailsOfDerivXAccount, TDetailsOfMT5Account } from '../../../../Types'; import ClosingAccountPendingWrapper from './closing-account-pending-wrapper'; import ClosingAccountPendingContent from './closing-account-pending-content'; diff --git a/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-wrapper.tsx b/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-wrapper.tsx index 3b9e5a45d638..3d4daeaba811 100644 --- a/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-wrapper.tsx +++ b/packages/account/src/Sections/Security/ClosingAccount/closing-account-pending-conditions/closing-account-pending-wrapper.tsx @@ -1,16 +1,16 @@ -import React from 'react'; +import { PropsWithChildren, ReactNode } from 'react'; import { Text } from '@deriv/components'; type TClosingAccountPendingWrapperProps = { title: JSX.Element; - description?: React.ReactNode; + description?: ReactNode; }; const ClosingAccountPendingWrapper = ({ children, title, description, -}: React.PropsWithChildren) => ( +}: PropsWithChildren) => (
{title} diff --git a/packages/account/src/Sections/Security/ClosingAccount/closing-account-reason-form.tsx b/packages/account/src/Sections/Security/ClosingAccount/closing-account-reason-form.tsx index bd930b59b3da..26b19714f54b 100644 --- a/packages/account/src/Sections/Security/ClosingAccount/closing-account-reason-form.tsx +++ b/packages/account/src/Sections/Security/ClosingAccount/closing-account-reason-form.tsx @@ -1,7 +1,7 @@ -import React from 'react'; +import { useReducer, useEffect, ChangeEvent, ClipboardEvent } from 'react'; import { Field, Form, Formik, FormikErrors, FieldProps, FormikValues } from 'formik'; import { Checkbox, FormSubmitButton, Input, Text } from '@deriv/components'; -import { localize, Localize } from '@deriv/translations'; +import { useTranslations, Localize } from '@deriv-com/translations'; import { TClosingAccountFormValues } from '../../../Types'; import { CHARACTER_LIMIT_FOR_CLOSING_ACCOUNT, @@ -71,11 +71,12 @@ const reducer = (state: TCustomState, action: TAction) => { }; const ClosingAccountReasonForm = ({ onBackClick, onConfirmClick }: TClosingAccountReasonFormProps) => { - const [state, dispatch] = React.useReducer(reducer, initial_state); + const [state, dispatch] = useReducer(reducer, initial_state); + const { localize } = useTranslations(); const { is_checkbox_disabled, total_checkbox_checked, remaining_characters, total_accumulated_characters } = state; - React.useEffect(() => { + useEffect(() => { if (total_checkbox_checked === MAX_ALLOWED_REASONS_FOR_CLOSING_ACCOUNT) { dispatch({ type: SET_CHECKBOX_DISABLED, payload: true }); } else if (is_checkbox_disabled) dispatch({ type: SET_CHECKBOX_DISABLED, payload: false }); @@ -127,9 +128,9 @@ const ClosingAccountReasonForm = ({ onBackClick, onConfirmClick }: TClosingAccou }; const handleInputChange = ( - event: React.ChangeEvent, + event: ChangeEvent, old_value: string, - onChange: (event: React.ChangeEvent) => void + onChange: (event: ChangeEvent) => void ) => { const value = event.target.value; const is_delete_action = old_value.length > value.length; @@ -144,7 +145,7 @@ const ClosingAccountReasonForm = ({ onBackClick, onConfirmClick }: TClosingAccou } }; - const handleInputPaste = async (e: React.ClipboardEvent): Promise => { + const handleInputPaste = async (e: ClipboardEvent): Promise => { const clipboardData = e.clipboardData.getData('text') || (await navigator.clipboard.readText()); if (remaining_characters <= 0 || clipboardData.length > remaining_characters) { @@ -208,7 +209,7 @@ const ClosingAccountReasonForm = ({ onBackClick, onConfirmClick }: TClosingAccou name='other_trading_platforms' value={values.other_trading_platforms} max_characters={CHARACTER_LIMIT_FOR_CLOSING_ACCOUNT} - onChange={(e: React.ChangeEvent) => + onChange={(e: ChangeEvent) => handleInputChange(e, values.other_trading_platforms, handleChange) } onPaste={handleInputPaste} @@ -227,7 +228,7 @@ const ClosingAccountReasonForm = ({ onBackClick, onConfirmClick }: TClosingAccou name='do_to_improve' value={values.do_to_improve} max_characters={CHARACTER_LIMIT_FOR_CLOSING_ACCOUNT} - onChange={(e: React.ChangeEvent) => + onChange={(e: ChangeEvent) => handleInputChange(e, values.do_to_improve, handleChange) } onPaste={handleInputPaste} diff --git a/packages/account/src/Sections/Security/ClosingAccount/closing-account-reason.tsx b/packages/account/src/Sections/Security/ClosingAccount/closing-account-reason.tsx index 54ef127f5134..d0c644dab6f2 100644 --- a/packages/account/src/Sections/Security/ClosingAccount/closing-account-reason.tsx +++ b/packages/account/src/Sections/Security/ClosingAccount/closing-account-reason.tsx @@ -1,9 +1,9 @@ -import React from 'react'; +import { useState, useEffect } from 'react'; import { Redirect } from 'react-router-dom'; import { Loading, Modal, Text } from '@deriv/components'; import { routes } from '@deriv/shared'; import { useCloseDerivAccount } from '@deriv/api'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import { MAX_ALLOWED_REASONS_FOR_CLOSING_ACCOUNT } from '../../../Constants/closing-account-config'; import ClosingAccountHasPendingConditions from './closing-account-pending-conditions/closing-account-has-pending-conditions'; import ClosingAccountReasonForm from './closing-account-reason-form'; @@ -17,11 +17,11 @@ type TClosingAccountReasonProps = { const ClosingAccountReason = ({ redirectToSteps }: TClosingAccountReasonProps) => { const { mutate, error, isSuccess, isLoading } = useCloseDerivAccount(); - const [reasons_to_close_account, setReasonsToCloseAccount] = React.useState(''); - const [error_info, setErrorInfo] = React.useState(''); - const [show_warning_modal, setShowWarningModal] = React.useState(false); + const [reasons_to_close_account, setReasonsToCloseAccount] = useState(''); + const [error_info, setErrorInfo] = useState(''); + const [show_warning_modal, setShowWarningModal] = useState(false); - React.useEffect(() => { + useEffect(() => { if (error) { if (typeof error === 'object' && 'code' in error) { const { code } = error; diff --git a/packages/account/src/Sections/Security/ClosingAccount/closing-account-steps.tsx b/packages/account/src/Sections/Security/ClosingAccount/closing-account-steps.tsx index 2acaf81eacda..d1015e330572 100644 --- a/packages/account/src/Sections/Security/ClosingAccount/closing-account-steps.tsx +++ b/packages/account/src/Sections/Security/ClosingAccount/closing-account-steps.tsx @@ -1,7 +1,6 @@ -import React from 'react'; import { Link } from 'react-router-dom'; import { observer, useStore } from '@deriv/stores'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import { Button, StaticUrl, Text } from '@deriv/components'; type TClosingAccountStepsProps = { diff --git a/packages/account/src/Sections/Security/ClosingAccount/closing-account-warning-modal.tsx b/packages/account/src/Sections/Security/ClosingAccount/closing-account-warning-modal.tsx index 79534f39fabc..b6d1ee9f0ef2 100644 --- a/packages/account/src/Sections/Security/ClosingAccount/closing-account-warning-modal.tsx +++ b/packages/account/src/Sections/Security/ClosingAccount/closing-account-warning-modal.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { localize, Localize } from '@deriv/translations'; +import { Localize, useTranslations } from '@deriv-com/translations'; import { FormSubmitButton, Icon, Text, Modal } from '@deriv/components'; type TClosingAccountWarningModalProps = { @@ -13,6 +12,8 @@ const ClosingAccountWarningModal = ({ startDeactivating, closeWarningModal, }: TClosingAccountWarningModalProps) => { + const { localize } = useTranslations(); + return (
diff --git a/packages/account/src/Sections/Security/ClosingAccount/closing-account.tsx b/packages/account/src/Sections/Security/ClosingAccount/closing-account.tsx index a924ef8ec7a0..b023d797e82e 100644 --- a/packages/account/src/Sections/Security/ClosingAccount/closing-account.tsx +++ b/packages/account/src/Sections/Security/ClosingAccount/closing-account.tsx @@ -1,9 +1,9 @@ -import React from 'react'; +import { useState } from 'react'; import ClosingAccountSteps from './closing-account-steps'; import ClosingAccountReason from './closing-account-reason'; const ClosingAccount = () => { - const [render_close_account_reason, setRenderCloseAccountReason] = React.useState(false); + const [render_close_account_reason, setRenderCloseAccountReason] = useState(false); const redirectToReasons = () => { setRenderCloseAccountReason(true); }; diff --git a/packages/account/src/Sections/Security/ConnectedApps/connected-apps-earn-more.tsx b/packages/account/src/Sections/Security/ConnectedApps/connected-apps-earn-more.tsx index 6592d0a4eade..f19a921bcf3a 100644 --- a/packages/account/src/Sections/Security/ConnectedApps/connected-apps-earn-more.tsx +++ b/packages/account/src/Sections/Security/ConnectedApps/connected-apps-earn-more.tsx @@ -1,4 +1,4 @@ -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import Article from '../../../Components/article'; const openDerivAPIWebsite = () => { diff --git a/packages/account/src/Sections/Security/ConnectedApps/connected-apps-empty.tsx b/packages/account/src/Sections/Security/ConnectedApps/connected-apps-empty.tsx index baddacfb5cb0..3286c2a9706c 100644 --- a/packages/account/src/Sections/Security/ConnectedApps/connected-apps-empty.tsx +++ b/packages/account/src/Sections/Security/ConnectedApps/connected-apps-empty.tsx @@ -1,5 +1,5 @@ import { Text } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import { useDevice } from '@deriv-com/ui'; import ConnectedAppsInfoBullets from './connected-apps-info-bullets'; diff --git a/packages/account/src/Sections/Security/ConnectedApps/connected-apps-info.tsx b/packages/account/src/Sections/Security/ConnectedApps/connected-apps-info.tsx index 21595cac83d8..7b4de61cb219 100644 --- a/packages/account/src/Sections/Security/ConnectedApps/connected-apps-info.tsx +++ b/packages/account/src/Sections/Security/ConnectedApps/connected-apps-info.tsx @@ -1,6 +1,6 @@ -import React from 'react'; +import { Fragment } from 'react'; import { InlineMessage, Text } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import { observer } from '@deriv/stores'; import { useDevice } from '@deriv-com/ui'; import ConnectedAppsInfoBullets from './connected-apps-info-bullets'; @@ -15,12 +15,12 @@ const ConnectedAppsInfo = observer(() => { type='information' size='md' message={ - + - + } /> ); diff --git a/packages/account/src/Sections/Security/ConnectedApps/connected-apps-know-more.tsx b/packages/account/src/Sections/Security/ConnectedApps/connected-apps-know-more.tsx index 2b60ee1874c6..b849eca564d5 100644 --- a/packages/account/src/Sections/Security/ConnectedApps/connected-apps-know-more.tsx +++ b/packages/account/src/Sections/Security/ConnectedApps/connected-apps-know-more.tsx @@ -1,4 +1,4 @@ -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import Article from '../../../Components/article'; const openAPIManagingWebsite = () => { diff --git a/packages/account/src/Sections/Security/ConnectedApps/connected-apps-revoke-modal.tsx b/packages/account/src/Sections/Security/ConnectedApps/connected-apps-revoke-modal.tsx index 081fcacd1795..af3198c261a4 100644 --- a/packages/account/src/Sections/Security/ConnectedApps/connected-apps-revoke-modal.tsx +++ b/packages/account/src/Sections/Security/ConnectedApps/connected-apps-revoke-modal.tsx @@ -1,6 +1,5 @@ -import React from 'react'; import { Button, Icon, Modal, Text } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; type TConnectedAppsRevokeModalProps = { handleRevokeAccess: () => void; diff --git a/packages/account/src/Sections/Security/ConnectedApps/connected-apps.tsx b/packages/account/src/Sections/Security/ConnectedApps/connected-apps.tsx index 52dd695d5690..7778f7c07933 100644 --- a/packages/account/src/Sections/Security/ConnectedApps/connected-apps.tsx +++ b/packages/account/src/Sections/Security/ConnectedApps/connected-apps.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useState, useEffect, useCallback } from 'react'; import { OauthApps } from '@deriv/api-types'; import { Loading } from '@deriv/components'; import { observer } from '@deriv/stores'; @@ -16,13 +16,13 @@ import './connected-apps.scss'; const ConnectedApps = observer(() => { const { isDesktop } = useDevice(); - const [is_loading, setLoading] = React.useState(true); - const [is_modal_open, setIsModalOpen] = React.useState(false); - const [selected_app_id, setSelectedAppId] = React.useState(null); - const [is_error, setError] = React.useState(false); - const [connected_apps, setConnectedApps] = React.useState([]); + const [is_loading, setLoading] = useState(true); + const [is_modal_open, setIsModalOpen] = useState(false); + const [selected_app_id, setSelectedAppId] = useState(null); + const [is_error, setError] = useState(false); + const [connected_apps, setConnectedApps] = useState([]); - React.useEffect(() => { + useEffect(() => { /* eslint-disable no-console */ fetchConnectedApps().catch(error => console.error('error: ', error)); }, []); @@ -36,12 +36,12 @@ const ConnectedApps = observer(() => { } }; - const handleToggleModal = React.useCallback((app_id: number | null = null) => { + const handleToggleModal = useCallback((app_id: number | null = null) => { setIsModalOpen(is_modal_open => !is_modal_open); setSelectedAppId(app_id); }, []); - const revokeConnectedApp = React.useCallback(async (app_id: number | null) => { + const revokeConnectedApp = useCallback(async (app_id: number | null) => { setLoading(true); const response = await WS.authorized.send({ revoke_oauth_app: app_id }); if (!response.error) { @@ -53,7 +53,7 @@ const ConnectedApps = observer(() => { } }, []); - const handleRevokeAccess = React.useCallback(() => { + const handleRevokeAccess = useCallback(() => { setIsModalOpen(false); revokeConnectedApp(selected_app_id); }, [revokeConnectedApp, selected_app_id]); diff --git a/packages/account/src/Sections/Security/ConnectedApps/data-list-template-entry.tsx b/packages/account/src/Sections/Security/ConnectedApps/data-list-template-entry.tsx index 961acb1673c6..f256374dbf8b 100644 --- a/packages/account/src/Sections/Security/ConnectedApps/data-list-template-entry.tsx +++ b/packages/account/src/Sections/Security/ConnectedApps/data-list-template-entry.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Fragment } from 'react'; import { Text } from '@deriv/components'; type TDataListTemplateEntry = { @@ -7,12 +7,12 @@ type TDataListTemplateEntry = { }; const DataListTemplateEntry = ({ title, content }: TDataListTemplateEntry) => ( - + {title} {content} - + ); export default DataListTemplateEntry; diff --git a/packages/account/src/Sections/Security/ConnectedApps/data-list-template.tsx b/packages/account/src/Sections/Security/ConnectedApps/data-list-template.tsx index 795b6b059faf..82fdf58f9c70 100644 --- a/packages/account/src/Sections/Security/ConnectedApps/data-list-template.tsx +++ b/packages/account/src/Sections/Security/ConnectedApps/data-list-template.tsx @@ -1,8 +1,7 @@ -import React from 'react'; import { OauthApps } from '@deriv/api-types'; import { Button } from '@deriv/components'; import { toMoment } from '@deriv/shared'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import DataListTemplateEntry from './data-list-template-entry'; import { getConnectedAppsScopes } from './template-helper'; diff --git a/packages/account/src/Sections/Security/ConnectedApps/data-table-template.tsx b/packages/account/src/Sections/Security/ConnectedApps/data-table-template.tsx index 608a027e0513..eb870ea98456 100644 --- a/packages/account/src/Sections/Security/ConnectedApps/data-table-template.tsx +++ b/packages/account/src/Sections/Security/ConnectedApps/data-table-template.tsx @@ -1,9 +1,9 @@ -import React from 'react'; +import { Fragment } from 'react'; import clsx from 'clsx'; import { OauthApps } from '@deriv/api-types'; import { Button, Text } from '@deriv/components'; import { toMoment } from '@deriv/shared'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import { getConnectedAppsColumnNames, getConnectedAppsScopes } from './template-helper'; type TDataTableTemplate = { connected_apps: OauthApps; handleToggleModal: (app_id: number) => void }; @@ -23,7 +23,7 @@ const DataTableTemplate = ({ connected_apps, handleToggleModal }: TDataTableTemp ))} {connected_apps.map(connected_app => ( - + {connected_app.name} @@ -38,7 +38,7 @@ const DataTableTemplate = ({ connected_apps, handleToggleModal }: TDataTableTemp - + ))}
); diff --git a/packages/account/src/Sections/Security/ConnectedApps/template-helper.tsx b/packages/account/src/Sections/Security/ConnectedApps/template-helper.tsx index a3992fff7a27..e7c5bfa039c6 100644 --- a/packages/account/src/Sections/Security/ConnectedApps/template-helper.tsx +++ b/packages/account/src/Sections/Security/ConnectedApps/template-helper.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Localize, localize } from '@deriv/translations'; +import { Localize, localize } from '@deriv-com/translations'; export const getConnectedAppsColumnNames = () => [ , diff --git a/packages/account/src/Sections/Security/LoginHistory/list-cell.tsx b/packages/account/src/Sections/Security/LoginHistory/list-cell.tsx index 460b114c1e8a..1e8995e0aa13 100644 --- a/packages/account/src/Sections/Security/LoginHistory/list-cell.tsx +++ b/packages/account/src/Sections/Security/LoginHistory/list-cell.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Fragment } from 'react'; import clsx from 'clsx'; import { Text } from '@deriv/components'; @@ -10,7 +10,7 @@ type TListCell = { }; const ListCell = ({ title, text, className, align = 'left' }: TListCell) => ( - + {title} @@ -22,7 +22,7 @@ const ListCell = ({ title, text, className, align = 'left' }: TListCell) => ( > {text}
- + ); export default ListCell; diff --git a/packages/account/src/Sections/Security/LoginHistory/login-history-list-row.tsx b/packages/account/src/Sections/Security/LoginHistory/login-history-list-row.tsx index 928e80bae998..a18d69f25184 100644 --- a/packages/account/src/Sections/Security/LoginHistory/login-history-list-row.tsx +++ b/packages/account/src/Sections/Security/LoginHistory/login-history-list-row.tsx @@ -1,7 +1,7 @@ import clsx from 'clsx'; import { TLoginHistoryItems } from '../../../Types'; import { Table } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import { useDevice } from '@deriv-com/ui'; import getLoginHistoryTableHeaders from '../../../Constants/get-login-history-table-headers'; import ListCell from './list-cell'; diff --git a/packages/account/src/Sections/Security/LoginHistory/login-history-table-row.tsx b/packages/account/src/Sections/Security/LoginHistory/login-history-table-row.tsx index b6aac821c789..da8e5ccc39cd 100644 --- a/packages/account/src/Sections/Security/LoginHistory/login-history-table-row.tsx +++ b/packages/account/src/Sections/Security/LoginHistory/login-history-table-row.tsx @@ -1,5 +1,5 @@ import { Table, Text } from '@deriv/components'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; import { TLoginHistoryItems } from '../../../Types'; const LoginHistoryTableRow = ({ id, date, action, browser, ip, status }: TLoginHistoryItems) => { diff --git a/packages/account/src/Sections/Security/Passwords/deriv-email.tsx b/packages/account/src/Sections/Security/Passwords/deriv-email.tsx index ea762e4832a8..a20d4f6a6290 100644 --- a/packages/account/src/Sections/Security/Passwords/deriv-email.tsx +++ b/packages/account/src/Sections/Security/Passwords/deriv-email.tsx @@ -1,9 +1,9 @@ -import React from 'react'; +import { Fragment, useState } from 'react'; import { Button, Text, Input } from '@deriv/components'; import { useVerifyEmail } from '@deriv/api'; import { toTitleCase } from '@deriv/shared'; import { observer, useStore } from '@deriv/stores'; -import { Localize, localize } from '@deriv/translations'; +import { Localize, useTranslations } from '@deriv-com/translations'; import FormSubHeader from '../../../Components/form-sub-header'; import SentEmailModal from '../../../Components/sent-email-modal'; import UnlinkAccountModal from '../../../Components/unlink-account-modal'; @@ -13,7 +13,7 @@ type TVerifyEmailPayload = Parameters['mutate' /** * Display the user's email address and a button to change it. * @name DerivEmail - * @returns {React.ReactNode} + * @returns { ReactNode } */ const DerivEmail = observer(() => { const { @@ -21,8 +21,9 @@ const DerivEmail = observer(() => { client: { social_identity_provider, is_social_signup, email }, } = useStore(); const { mutate } = useVerifyEmail(); - const [is_unlink_account_modal_open, setIsUnlinkAccountModalOpen] = React.useState(false); - const [is_send_email_modal_open, setIsSendEmailModalOpen] = React.useState(false); + const { localize } = useTranslations(); + const [is_unlink_account_modal_open, setIsUnlinkAccountModalOpen] = useState(false); + const [is_send_email_modal_open, setIsSendEmailModalOpen] = useState(false); const payload: TVerifyEmailPayload = { verify_email: email, type: 'request_email' }; @@ -42,7 +43,7 @@ const DerivEmail = observer(() => { }; return ( - +
@@ -90,7 +91,7 @@ const DerivEmail = observer(() => { is_modal_when_mobile={true} />
-
+ ); }); diff --git a/packages/account/src/Sections/Security/Passwords/deriv-password.tsx b/packages/account/src/Sections/Security/Passwords/deriv-password.tsx index 1b0f3e242746..16c6dc81b391 100644 --- a/packages/account/src/Sections/Security/Passwords/deriv-password.tsx +++ b/packages/account/src/Sections/Security/Passwords/deriv-password.tsx @@ -1,15 +1,12 @@ -import React from 'react'; - +import { Fragment, useState } from 'react'; import { useVerifyEmail } from '@deriv/api'; import { Button, Icon, Popover, Text } from '@deriv/components'; import { getBrandWebsiteName, getPlatformSettings, toTitleCase } from '@deriv/shared'; import { observer, useStore } from '@deriv/stores'; -import { Localize, localize } from '@deriv/translations'; - +import { Localize, useTranslations } from '@deriv-com/translations'; import { BrandDerivLogoCoralIcon } from '@deriv/quill-icons'; import FormSubHeader from '../../../Components/form-sub-header'; import SentEmailModal from '../../../Components/sent-email-modal'; - import PlatformDescription from './platform-description'; /** @@ -18,13 +15,14 @@ import PlatformDescription from './platform-description'; * @returns {React.ReactNode} */ const DerivPassword = observer(() => { + const { localize } = useTranslations(); const { traders_hub: { is_eu_user, financial_restricted_countries }, client: { social_identity_provider, is_social_signup, email }, } = useStore(); const { mutate } = useVerifyEmail(); - const [is_sent_email_modal_open, setIsSentEmailModalOpen] = React.useState(false); + const [is_sent_email_modal_open, setIsSentEmailModalOpen] = useState(false); const onClickSendEmail = () => { if (social_identity_provider === 'apple') { @@ -51,10 +49,10 @@ const DerivPassword = observer(() => { }; return ( - +
- + { /> {!is_eu_user && !financial_restricted_countries && ( - + { description='smarttrader' /> - + )} {(!is_eu_user || financial_restricted_countries) && ( - + { description='ctrader' /> - + )}
-
+ {is_social_signup ? ( - +
{social_identity_provider ? ( - + { /> - + ) : ( '' )}
-
+ ) : (
@@ -173,7 +171,7 @@ const DerivPassword = observer(() => { is_modal_when_mobile={true} />
- + ); }); diff --git a/packages/account/src/Sections/Security/Passwords/passwords-platform.tsx b/packages/account/src/Sections/Security/Passwords/passwords-platform.tsx index c9c2899fd5c0..eb9f6f544908 100644 --- a/packages/account/src/Sections/Security/Passwords/passwords-platform.tsx +++ b/packages/account/src/Sections/Security/Passwords/passwords-platform.tsx @@ -1,8 +1,8 @@ -import React from 'react'; +import { useState, Fragment } from 'react'; import { useMutation } from '@deriv/api'; import { CFD_PLATFORMS, getPlatformSettings } from '@deriv/shared'; import { observer, useStore } from '@deriv/stores'; -import { Localize, localize } from '@deriv/translations'; +import { Localize, useTranslations } from '@deriv-com/translations'; import FormSubHeader from '../../../Components/form-sub-header'; import SentEmailModal from '../../../Components/sent-email-modal'; import PlatformPartials from './platform-partials'; @@ -22,13 +22,14 @@ type TPasswordsPlatformProps = { const PasswordsPlatform = observer( ({ has_dxtrade_accounts = false, has_mt5_accounts = false }: TPasswordsPlatformProps) => { const { mutate } = useMutation('verify_email'); + const { localize } = useTranslations(); const { client: { email }, } = useStore(); - const [identifier, setIdentifier] = React.useState(''); - const [is_sent_email_modal_open, setIsSentEmailModalOpen] = React.useState(false); + const [identifier, setIdentifier] = useState(''); + const [is_sent_email_modal_open, setIsSentEmailModalOpen] = useState(false); const platform_name_dxtrade = getPlatformSettings('dxtrade').name; @@ -64,7 +65,7 @@ const PasswordsPlatform = observer( }; return ( - +
{has_mt5_accounts && ( @@ -93,7 +94,7 @@ const PasswordsPlatform = observer( is_modal_when_mobile />
-
+ ); } ); diff --git a/packages/account/src/Sections/Security/Passwords/passwords.tsx b/packages/account/src/Sections/Security/Passwords/passwords.tsx index 59a4dfde3931..f94ea57b94ec 100644 --- a/packages/account/src/Sections/Security/Passwords/passwords.tsx +++ b/packages/account/src/Sections/Security/Passwords/passwords.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useState, useEffect, ReactNode } from 'react'; import { Loading } from '@deriv/components'; import { observer, useStore } from '@deriv/stores'; import DerivPassword from './deriv-password'; @@ -8,7 +8,7 @@ import PasswordsPlatform from './passwords-platform'; /** * Displays the Email, Password, section under Account settings. * @name Passwords - * @returns {React.ReactNode} + * @returns {ReactNode} */ const Passwords = observer(() => { const { client, common } = useStore(); @@ -23,11 +23,11 @@ const Passwords = observer(() => { } = client; const { is_from_derivgo } = common; - const [is_loading, setIsLoading] = React.useState(true); + const [is_loading, setIsLoading] = useState(true); const has_mt5_accounts = mt5_login_list?.length > 0 || !is_mt5_password_not_set; const has_dxtrade_accounts = dxtrade_accounts_list?.length > 0 || !is_dxtrade_password_not_set; - React.useEffect(() => { + useEffect(() => { if ( is_populating_mt5_account_list === false && is_populating_dxtrade_account_list === false && diff --git a/packages/account/src/Sections/Security/Passwords/platform-description.tsx b/packages/account/src/Sections/Security/Passwords/platform-description.tsx index ecbfbff8dad2..b117eaebb96a 100644 --- a/packages/account/src/Sections/Security/Passwords/platform-description.tsx +++ b/packages/account/src/Sections/Security/Passwords/platform-description.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; type TPlatformDescription = { brand_website_name: string; diff --git a/packages/account/src/Sections/Security/Passwords/platform-partials.tsx b/packages/account/src/Sections/Security/Passwords/platform-partials.tsx index 92e03a2f108c..85e7e68db98a 100644 --- a/packages/account/src/Sections/Security/Passwords/platform-partials.tsx +++ b/packages/account/src/Sections/Security/Passwords/platform-partials.tsx @@ -1,7 +1,7 @@ -import React from 'react'; +import { Fragment } from 'react'; import { Button, Icon, Popover, Text } from '@deriv/components'; import { getPlatformSettings, CFD_PLATFORMS } from '@deriv/shared'; -import { localize } from '@deriv/translations'; +import { useTranslations } from '@deriv-com/translations'; type TPlatformPartialsProps = { description: JSX.Element; @@ -19,9 +19,10 @@ type TPlatformPartialsProps = { */ const PlatformPartials = ({ description, type, handleClick }: TPlatformPartialsProps) => { const platform_config = getPlatformSettings(type); + const { localize } = useTranslations(); return ( - + {description} @@ -38,7 +39,7 @@ const PlatformPartials = ({ description, type, handleClick }: TPlatformPartialsP large />
- + ); }; diff --git a/packages/account/src/Sections/Security/SelfExclusion/self-exclusion.tsx b/packages/account/src/Sections/Security/SelfExclusion/self-exclusion.tsx index ff31b485617d..ffc2437da592 100644 --- a/packages/account/src/Sections/Security/SelfExclusion/self-exclusion.tsx +++ b/packages/account/src/Sections/Security/SelfExclusion/self-exclusion.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Dispatch, SetStateAction, useRef, useReducer, useEffect } from 'react'; import { Loading } from '@deriv/components'; import { getBrandWebsiteName, @@ -10,7 +10,7 @@ import { useIsMounted, WS, } from '@deriv/shared'; -import { localize } from '@deriv/translations'; +import { useTranslations } from '@deriv-com/translations'; import DemoMessage from '../../../Components/demo-message'; import '../../../Components/self-exclusion/self-exclusion.scss'; import LoadErrorMessage from '../../../Components/load-error-message'; @@ -25,7 +25,7 @@ import { observer, useStore } from '@deriv/stores'; type TSelfExclusion = { is_app_settings?: boolean; overlay_ref: HTMLDivElement; - setIsOverlayShown?: React.Dispatch>; + setIsOverlayShown?: Dispatch>; }; type TExclusionData = { max_deposit: string; @@ -71,6 +71,7 @@ type TResponse = { const SelfExclusion = observer(({ is_app_settings, overlay_ref, setIsOverlayShown }: TSelfExclusion) => { const { client, ui } = useStore(); + const { localize } = useTranslations(); const { currency, is_virtual, @@ -110,9 +111,9 @@ const SelfExclusion = observer(({ is_app_settings, overlay_ref, setIsOverlayShow max_open_bets: localize('Max. open positions'), }; - const prev_is_switching = React.useRef(null); - const exclusion_limits = React.useRef({}); - const exclusion_data = React.useRef({ + const prev_is_switching = useRef(null); + const exclusion_limits = useRef({}); + const exclusion_data = useRef({ max_deposit: '', max_turnover: '', max_losses: '', @@ -142,14 +143,14 @@ const SelfExclusion = observer(({ is_app_settings, overlay_ref, setIsOverlayShow }); const isMounted = useIsMounted(); - const [state, setState] = React.useReducer<(prev_state: TCustomState, value: TCustomState) => TCustomState>( + const [state, setState] = useReducer<(prev_state: TCustomState, value: TCustomState) => TCustomState>( (prev_state, value) => { return { ...prev_state, ...value }; }, initial_state ); - React.useEffect(() => { + useEffect(() => { if (is_virtual) { setState({ is_loading: false }); } else { @@ -163,7 +164,7 @@ const SelfExclusion = observer(({ is_app_settings, overlay_ref, setIsOverlayShow // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - React.useEffect(() => { + useEffect(() => { if (prev_is_switching.current !== is_switching) { prev_is_switching.current = is_switching; @@ -174,7 +175,7 @@ const SelfExclusion = observer(({ is_app_settings, overlay_ref, setIsOverlayShow // eslint-disable-next-line react-hooks/exhaustive-deps }, [is_switching]); - React.useEffect(() => { + useEffect(() => { setIsOverlayShown?.(!!state?.show_article); }, [state.show_article, setIsOverlayShown]); diff --git a/packages/account/src/Sections/Security/TwoFactorAuthentication/digit-form.tsx b/packages/account/src/Sections/Security/TwoFactorAuthentication/digit-form.tsx index a6d9b9f50241..cd606a9e3877 100644 --- a/packages/account/src/Sections/Security/TwoFactorAuthentication/digit-form.tsx +++ b/packages/account/src/Sections/Security/TwoFactorAuthentication/digit-form.tsx @@ -1,9 +1,9 @@ -import React from 'react'; +import { useRef, useState, useEffect, ChangeEvent } from 'react'; import clsx from 'clsx'; import { Formik, Form, Field, FormikProps, FormikHelpers, FieldProps } from 'formik'; import { Input, Button } from '@deriv/components'; import { getPropertyValue, WS } from '@deriv/shared'; -import { localize } from '@deriv/translations'; +import { useTranslations } from '@deriv-com/translations'; import { observer, useStore } from '@deriv/stores'; type TResponse = { @@ -19,20 +19,21 @@ type TDigitFormValues = { const DigitForm = observer(() => { const { client, common } = useStore(); + const { localize } = useTranslations(); const { is_language_changing } = common; const { has_enabled_two_fa, setTwoFAChangedStatus, setTwoFAStatus } = client; - const [is_success, setSuccess] = React.useState(false); - const [is_ready_for_verification, setReadyForVerification] = React.useState(false); + const [is_success, setSuccess] = useState(false); + const [is_ready_for_verification, setReadyForVerification] = useState(false); const button_text = has_enabled_two_fa ? localize('Disable') : localize('Enable'); - const formik_ref = React.useRef>(null); + const formik_ref = useRef>(null); let enable_response: TResponse; const initial_form = { digit_code: '', }; - React.useEffect(() => { + useEffect(() => { if (is_language_changing) { formik_ref.current?.setFieldTouched('digit_code'); } @@ -87,7 +88,7 @@ const DigitForm = observer(() => { className='two-factor__input' label={localize('Authentication code')} value={values.digit_code} - onChange={(e: React.ChangeEvent) => { + onChange={(e: ChangeEvent) => { handleChange(e); setReadyForVerification(false); }} diff --git a/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-authentication-article.tsx b/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-authentication-article.tsx index 8c0d2ce677ba..c8e83b9934e4 100644 --- a/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-authentication-article.tsx +++ b/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-authentication-article.tsx @@ -1,17 +1,19 @@ -import React from 'react'; -import { localize, Localize } from '@deriv/translations'; +import { Localize, useTranslations } from '@deriv-com/translations'; import AccountArticle from '../../../Components/article'; -const TwoFactorAuthenticationArticle = () => ( - , - ]} - /> -); +const TwoFactorAuthenticationArticle = () => { + const { localize } = useTranslations(); + return ( + , + ]} + /> + ); +}; export default TwoFactorAuthenticationArticle; diff --git a/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-authentication.tsx b/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-authentication.tsx index d8dff8117e5c..5179d7f94c85 100644 --- a/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-authentication.tsx +++ b/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-authentication.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useState, useCallback, useEffect } from 'react'; import { getPropertyValue, WS } from '@deriv/shared'; import LoadErrorMessage from '../../../Components/load-error-message'; import { observer, useStore } from '@deriv/stores'; @@ -10,13 +10,13 @@ const TwoFactorAuthentication = observer(() => { const { client } = useStore(); const { email_address, getTwoFAStatus, has_enabled_two_fa, is_switching } = client; - const [is_loading, setLoading] = React.useState(true); - const [is_qr_loading, setQrLoading] = React.useState(false); - const [error_message, setErrorMessage] = React.useState(''); - const [secret_key, setSecretKey] = React.useState(''); - const [qr_secret_key, setQrSecretKey] = React.useState(''); + const [is_loading, setLoading] = useState(true); + const [is_qr_loading, setQrLoading] = useState(false); + const [error_message, setErrorMessage] = useState(''); + const [secret_key, setSecretKey] = useState(''); + const [qr_secret_key, setQrSecretKey] = useState(''); - const generateQrCode = React.useCallback(async () => { + const generateQrCode = useCallback(async () => { setQrLoading(true); const generate_response = await WS.authorized.accountSecurity({ account_security: 1, @@ -36,7 +36,7 @@ const TwoFactorAuthentication = observer(() => { setQrLoading(false); }, [email_address]); - const getDigitStatus = React.useCallback(async () => { + const getDigitStatus = useCallback(async () => { const status_response = await getTwoFAStatus(); // status_response can be boolean or an error object if (typeof status_response !== 'boolean') { @@ -50,7 +50,7 @@ const TwoFactorAuthentication = observer(() => { setLoading(false); }, [getTwoFAStatus, generateQrCode]); - React.useEffect(() => { + useEffect(() => { getDigitStatus(); }, [getDigitStatus, has_enabled_two_fa]); diff --git a/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-disabled.tsx b/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-disabled.tsx index 95dd4099d5ba..fe76800ca50a 100644 --- a/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-disabled.tsx +++ b/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-disabled.tsx @@ -1,8 +1,8 @@ -import React from 'react'; +import { Fragment } from 'react'; import QRCodeSVG from 'qrcode.react'; import { ThemedScrollbars, Text, Timeline, Loading, Clipboard } from '@deriv/components'; import TwoFactorAuthenticationArticle from './two-factor-authentication-article'; -import { Localize, localize } from '@deriv/translations'; +import { Localize, useTranslations } from '@deriv-com/translations'; import { useDevice } from '@deriv-com/ui'; import DigitForm from './digit-form'; @@ -14,8 +14,9 @@ type TTwoFactorDisabled = { const TwoFactorDisabled = ({ secret_key, qr_secret_key, is_qr_loading }: TTwoFactorDisabled) => { const { isDesktop } = useDevice(); + const { localize } = useTranslations(); return ( - + {!isDesktop && } @@ -51,7 +52,7 @@ const TwoFactorDisabled = ({ secret_key, qr_secret_key, is_qr_loading }: TTwoFac {is_qr_loading ? ( ) : ( - + {qr_secret_key && (
@@ -59,7 +60,7 @@ const TwoFactorDisabled = ({ secret_key, qr_secret_key, is_qr_loading }: TTwoFac )} {secret_key && ( - + @@ -72,9 +73,9 @@ const TwoFactorDisabled = ({ secret_key, qr_secret_key, is_qr_loading }: TTwoFac className='two-factor__qr--clipboard' />
-
+
)} -
+ )} @@ -88,7 +89,7 @@ const TwoFactorDisabled = ({ secret_key, qr_secret_key, is_qr_loading }: TTwoFac {isDesktop && } - + ); }; diff --git a/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-enabled.tsx b/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-enabled.tsx index d531d3a5338f..68a460806b94 100644 --- a/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-enabled.tsx +++ b/packages/account/src/Sections/Security/TwoFactorAuthentication/two-factor-enabled.tsx @@ -1,8 +1,7 @@ -import React from 'react'; import { Icon, ThemedScrollbars, Text } from '@deriv/components'; import { useDevice } from '@deriv-com/ui'; import DigitForm from './digit-form'; -import { Localize } from '@deriv/translations'; +import { Localize } from '@deriv-com/translations'; const TwoFactorEnabled = () => { const { isDesktop } = useDevice(); diff --git a/packages/core/src/Stores/common-store.js b/packages/core/src/Stores/common-store.js index 9f03e9ddf8fe..72c1f6256c12 100644 --- a/packages/core/src/Stores/common-store.js +++ b/packages/core/src/Stores/common-store.js @@ -8,6 +8,7 @@ import { getUrlBinaryBot, getUrlSmartTrader, initMoment, + setLocale, isMobile, platforms, routes, @@ -136,6 +137,7 @@ export default class CommonStore extends BaseStore { window.history.pushState({ path: new_url.toString() }, '', new_url.toString()); try { await initMoment(key); + await setLocale(key); await changeLanguage(key, () => { this.changeCurrentLanguage(key); BinarySocket.closeAndOpenNewConnection(key); diff --git a/packages/shared/src/utils/config/platform-config.ts b/packages/shared/src/utils/config/platform-config.ts index 8bbd1df533a7..a48ce1314639 100644 --- a/packages/shared/src/utils/config/platform-config.ts +++ b/packages/shared/src/utils/config/platform-config.ts @@ -1,7 +1,7 @@ import React from 'react'; import { getInitialLanguage } from '@deriv/translations'; import i18n from 'i18next'; -import { initMoment } from '../date'; +import { setLocale, initMoment } from '../date'; import { routes } from '../routes'; type TPlatform = { @@ -41,6 +41,7 @@ export const useOnLoadTranslation = () => { } (async () => { await initMoment(i18n.language); + await setLocale(i18n.language); })(); const is_english = i18n.language === 'EN'; if (is_english) { diff --git a/packages/shared/src/utils/date/dayJs-config.ts b/packages/shared/src/utils/date/dayJs-config.ts new file mode 100644 index 000000000000..0e60f0920c82 --- /dev/null +++ b/packages/shared/src/utils/date/dayJs-config.ts @@ -0,0 +1,15 @@ +import dayjs from 'dayjs'; + +// Localize dayjs instance +export const setLocale = async (lang: string) => { + const hasEnMomentLocale = ['AR', 'BN', 'SI']; // This is the list of locales that have the same format as en + let locale = lang.toLowerCase().replace('_', '-'); + if (hasEnMomentLocale.includes(lang)) locale = 'en'; + try { + const localeModule = await import(`dayjs/locale/${locale}.js`); + dayjs.locale(localeModule.default); + } catch (error) { + // eslint-disable-next-line no-console + console.error(`Locale ${locale} could not be loaded`, error); + } +}; diff --git a/packages/shared/src/utils/date/index.ts b/packages/shared/src/utils/date/index.ts index d56b46b19392..692a006cc940 100644 --- a/packages/shared/src/utils/date/index.ts +++ b/packages/shared/src/utils/date/index.ts @@ -1 +1,2 @@ export * from './date-time'; +export * from './dayJs-config'; diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json index 6b719d2fbfaf..0e8fef892178 100644 --- a/packages/shared/tsconfig.json +++ b/packages/shared/tsconfig.json @@ -4,7 +4,8 @@ "baseUrl": "./", "paths": { "@deriv/*": ["../*/src"] - } + }, + "typeRoots": ["node_modules/@types"] }, "include": ["src", "../../utils.d.ts"] } diff --git a/packages/utils/src/getLoginHistoryFormattedData.tsx b/packages/utils/src/getLoginHistoryFormattedData.tsx index cda90b6b7e74..71c3d751256a 100644 --- a/packages/utils/src/getLoginHistoryFormattedData.tsx +++ b/packages/utils/src/getLoginHistoryFormattedData.tsx @@ -1,4 +1,4 @@ -import moment from 'moment'; +import dayjs from 'dayjs'; import Bowser from 'bowser'; import { LoginHistory } from '@deriv/api-types'; @@ -37,7 +37,7 @@ export const getLoginHistoryFormattedData = (login_history: LoginHistory) => { ); const date = environment_split[0]; const time = environment_split[1].replace('GMT', ' GMT'); - data[i].date = `${moment(date, 'DD-MMM-YY').format('YYYY-MM-DD')} ${time}`; + data[i].date = `${dayjs(date).format('YYYY-MM-DD')} ${time}`; data[i].action = login_history[i].action === 'login' ? 'Login' : 'Logout'; const user_agent_string = environment.substring(environment.indexOf('User_AGENT'), environment.indexOf('LANG')); const user_agent: TUserAgent = mobile_app_UA From 36effdbba709d501c7a3fb1794ff4c30e9cdbbd5 Mon Sep 17 00:00:00 2001 From: Farrah Mae Ochoa <82315152+farrah-deriv@users.noreply.github.com> Date: Mon, 12 Aug 2024 08:41:56 +0400 Subject: [PATCH 23/72] [WALL] farrah/WALL-4530/fixed iframe height in withdrawal (#16042) * fix: iframe height * fix: spacing --- .../components/cashier-container/real/real.scss | 16 ++++++++++++++++ .../components/cashier-container/real/real.tsx | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/cashier/src/components/cashier-container/real/real.scss b/packages/cashier/src/components/cashier-container/real/real.scss index 156134338ee5..cf7dfd990046 100644 --- a/packages/cashier/src/components/cashier-container/real/real.scss +++ b/packages/cashier/src/components/cashier-container/real/real.scss @@ -3,4 +3,20 @@ width: 100%; height: 80vh; } + + &__iframe { + @include mobile { + position: absolute; + height: calc(100% - 3.2rem); + inset-inline-end: 0; + padding: 0 1.6rem; + + + .page-container__sidebar--right { + position: relative; + top: calc(100% + 1.6rem); + padding-bottom: 1.6rem; + flex: none; + } + } + } } diff --git a/packages/cashier/src/components/cashier-container/real/real.tsx b/packages/cashier/src/components/cashier-container/real/real.tsx index 7957b165eaa8..e1e91acb67f2 100644 --- a/packages/cashier/src/components/cashier-container/real/real.tsx +++ b/packages/cashier/src/components/cashier-container/real/real.tsx @@ -29,7 +29,7 @@ const Real = observer(() => { {should_show_loader && } {iframe_url && (